Witam wszystkich,
nazywam się Michał i chciałbym pokazać wam dzisiaj jak zrobić jednostronny komunikator za pomocą Arduino. Projekt znalazłem na zagranicznej stronie i wprowadziłem w nim obsługę modułu internetowego ENC28J60.
Arduino mam od niedawna i jest to mój pierwszy artykuł na Majsterkowo, także proszę o wyrozumiałość. Jeśli zauważycie jakieś błędy to proszę pisać w komentarzach, to poprawię artykuł jak najszybciej się da :)
Co nam będzie potrzebne?
– Arduino, w moim przypadku Leonardo
– Publiczne IP
– Wyświetlacz 2×16 zgodny z HD44780
Czyli wszystko co jest dostepne w Starter Kicie, plus ENC28J60.
Od czego zacząć?
Na początku trzeba wszystko poskładać, dlatego zacznę od schematu narysowanego w programie Fritzing, jest to mój pierwszy rysunek w tym programie, ale myślę, że każdy zobaczy co i jak podłączyć. :)
Następnym krokiem będzie wgranie programu do naszego Arduino. Przed wgraniem można zmienić numer IP naszego komunikatora na odpowiedni w naszej sieci. Np. adres IP mojego routera to 192.168.0.1, a komputera to 192.168.0.101, to ustawiam IP komunikatora na 192.168.0.115.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include "etherShield.h" #include "ETHER_28J60.h" #include <Wire.h> #include <LiquidCrystal.h> // dodanie odpowiednich bibliotek #define BACKLIGHT_PIN 3 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // ustalenie pinów wyświetlacza static uint8_t mac[6] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // tutaj możemy ustawić adres mac static uint8_t ip[4] = { 192, 168, 0, 115}; // tutaj możemy ustawić adres ip naszego komunikatora static uint16_t port = 80; ETHER_28J60 e; int static wiersz = 0; char* params; void setup() { Serial.begin(9600); e.setup(mac, ip, port); lcd.begin(16, 2); lcd.home(); lcd.print("Gotowy!"); delay(1000); lcd.clear(); } void loop() { if (params = e.serviceRequest()) { if(wiersz > 3) { wiersz = 0; lcd.clear(); } e.print("<center><H1>Wyslij wiadomosc z internetu do mojego Arduino :D</H1></center>"); e.print("<center><form action=\"\"> Wiadomosc: <input type=\"text\" name=\"msg\"><br><input type=\"submit\" value=\"Wyslij\"></form></center>"); e.print("<center>Arduino + wyswietlacz 16x2 HD44780 + enc28j60</center>"); // strona, za pomocą której będziemy mogli wysyłać wiadomości e.respond(); String myString (params); params = ""; myString.replace("favicon.ico", ""); myString.replace("?msg=",""); Serial.println(myString); lcd.print(myString); lcd.setCursor(0, wiersz); wiersz++; } } |
Podłączamy nasz komunikator do routera i możemy sprawdzić czy wszystko działa w sieci lokalnej. Aby to sprawdzić wpisujemy w pasek adresu naszej przeglądarki 192.168.0.115 i powinna nam się ukazać strona naszego komunikatora:
Jeśli strona się poprawnie wyświetla, to możemy wpisać coś w pole wiadomość i kliknąć wyślij. Nasza wiadomość powinna pokazać się na wyświetlaczu:
Publiczne IP i przekierowanie portów
Teraz pora na przekierowanie portów, aby z naszego komunikatora można było korzystać spoza sieci lokalnej tzn. z całego świata. Ja zrobię to na przykładzie routera TP-Link TL-WDR4300, w przypadku innych TP-Linków będzie identycznie, a w przypadku routerów innych firm powinno być podobnie.
Jeśli nie mamy publicznego IP to musielibyśmy skonfigurować nasz router do pracy z DDNS, czyli dynamicznym DNS, ale z tego można zrobić nowy artykuł, dlatego teraz tego nie opiszę :)
W pasek adresu wpisujemy adres IP naszego routera w moim przypadku to 192.168.0.1, wyświetla nam się panel logowanie:
Po wpisaniu loginu i hasła pojawi się strona główna naszego routera:
Teraz wchodzimy w zakładkę “Forwarding” w menu po lewej stronie:
U mnie wyświetla się kilka aktywnych już przekierowań. Teraz klikamy “Add New…” i wyświetla nam się takie menu:
Jeśli nie zmieniliśmy adresu IP naszego komunikatora to uzupełniamy identycznie jak w moim przykładzie i klikamy “Save”. :)
Zakończenie
Teraz wystarczy sprawdzić jaki mamy zawnętrzny adres IP np. na tej stronie. Jeśli chcemy sprawdzić czy nasz komunikator działa z zewnątrz to wystarczy skopiować adres IP i wysłać go jakiemuś znajomemu, który wyśle nam wiadomość. :)
I to by było na tyle. Przepraszam za ewentualne błędy, jest to mój pierwszy taki tekst. W razie sugestii i pytań proszę pisać w komentarzach. Dziękuje :)
Akurat od kilku dni bawię się ENC28J60 :D to będzie to co zrobię następne z Arduino :D
Fajnie, że się podoba :) Szczerze to ja od ok. miesiąca bawię się Arduino :D
Kolego, dzięki wielkie za to.
Nie ma za co ;)
Pomysłowe i przydatne ;) 5/5
Przydatne kiedy leżymy w łóżku chorzy a nasz opiekun ma to w zasięgu wzroku. Wchodzimy na stronkę np. na telefonie i wysyłamy mu wiadomość :D
W takim wypadku można pominąć część z przekierowaniem i publicznym IP. I niestety wiadomość musi być krótka bo w obecnej wersji nie ma przewijania tekstu :)
Wystarczy ‘Help’ xD
Skoro mam radiowy internet to niby w jaki sposob moge zrobic to przekierowanie z publicznego adresu ip?
Przekierowanie ustawiasz tak samo i dodatkowo musisz założyć konto w witrynie noip.com i wpisać dane twojego konta w routerze w zakładce “Dynamic DNS”, pod spodem masz wszystko opisane ;)
http://www.tp-link.com.pl/article/?faqid=419
Internet radiowy… Tzn.? Jeśli masz 3G, LTE itp. to musisz wykupić chyba jakiś pakiet u operatora.
Co do przewijania, w przykładach Arduino jest LCD scroll :) Można tego użyć.
Paweł, radiowy to znaczy, że firma wysyła internet w miasto po wifi ;) A co do przewijania to wymyśliłem to dopiero pisząć komentarz ;)
Dodam jeszcze coś ;)
Dla UNO piny od wyświetlacza (11, 12) podłączamy np. pod 6, 7, a ENC28J60 wg. tabelki :D
Obrazek się nie dodał :/ Link: http://obrazki.elektroda.pl/2222250100_1422185677.jpg :D
Obrazek:
Dzięki :)
Fajne , a jak zrobić to na większym wyświetlaczu – ekranie ?
Jeśli jest to wyświetlacz zgodny z HD44780 wystarczy zmienić rozmiar tutaj:
void setup()
{
lcd.begin(16, 2); // szerokośc i wysokość
A jeśli byłby to jakiś wyświetlacz graficzny to trzeba by było użyć innej biblioteki :)
Witam, mam taką prośbę podajcie link do biblioteki ENC28J60 która będzie działać z Arduino 1.5.8. Te co znalazłem jakoś nie chcą mi działać.
A czy istnieje możliwość dodania kodu na stronie przez która komunikujesz się z Arduino by np pokazywał nam stan przekazników (on/off) albo wyświetlał inne bieżące informacje np. temperatura?
Jasne, trzeba tylko odpowiednio zmodyfikować program :D
Hej, czy można coś zrobić żeby zamiast spacji nie wyświetlały się “+”?
Bo teraz np. wprowadzę tekst “Ala ma kota” to LCD wygląda tak “Ala+ma+kota”
PS Ardurino mam dopiero 2 dni dlatego nie wiem za bardzo czy można coś z tym zrobić :D
Witam,
Realizowałem ostatnio ten projekt, oto moje uwagi:
https://onedrive.live.com/redir?resid=B2694B96751353EF!106&authkey=!AM1dz9cIoTZG6Nc&ithint=file%2crar
Wszystkie pliki zawierają się w jednym folderze, dlatego z głównego programu należy usunąć linijkę #include “etherShield.h” (spokojnie, etherShield znajduje się w ETHER_28J60 i jest załączany do projektu)
Przepraszam, że odświeżam, ale wpadłem na pewien pomysł, który może się przydać zwłaszcza w urządzeniach automatyki domowej. Jest jakaśmożliwość, albo jak to zrobić, aby wartość zmiennej tekstowej bądź numerycznej odczytać z wywołania GET. Chodzi mi o takie coś, że podaje w pasku przeglądarki adres_mojego_arduino/a_to_chce_odebrac jako zmienną.