Síťový Ethernet modul W5500 je přídavný komunikační obvod pro Arduino. Tento šikovný obvod od firmy WIZnet umožňuje připojit Arduino k domácí síti, potažmo Internetu. Na modulu najdeme kromě obvodu W5500 také konektor RJ45 pro připojení síťového kabelu a přídavné součástky pro správnou funkci. Za zmínku stojí také napěťový převodník z 5 Voltů na 3,3 Voltu. Obvod W5500 totiž pracuje na napětí velikosti 3,3 V, ale jeho datové piny umí komunikovat i na 5 V úrovních. Díky přítomnosti převodníku pak můžeme použít napájecí pin 5V nebo 3.3V. Modul zvládá práci s adresami typu IPv4 a komunikuje rychlostí 10 či 100 Mb/s. S Arduinem probíhá komunikace pomocí protokolu SPI.
Pro úspěšné propojení Ethernet modulu W5500 a Arduino desky je nutné propojit celkem 8 vodičů. Propojíme 3.3V s 3V3 Arduina, MISO s D12, MOSI s D11, SCS s D10, SCLK s D13, GND se zemí Arduina, RST s RESETem Arduina a INT s pinem D2. Piny D10, D11, D12 a D13 jsou připojeny na SPI piny použité desky typu UNO. Pokud budete chtít použít jinou Arduino desku, je nutné využít její SPI piny (více informací najdete zde).
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu Ethernet2, návod, jak na to je uveden zde. Ukázkový kód s web serverem obsahuje na svém začátku připojení potřebných knihoven. Jako další si nastavíme vlastní MAC adresu, přičemž tuto adresu musí mít každé zařízení unikátní, a poté nastavíme IP adresu, která musí být přidělitelná DHCP serverem či nastavena routerem ručně. Použitý rozsah můžeme jednoduše zjistit tak, že na libovolném počítači připojeném ke stejné síti zjistíme IP adresu (např. 192.168.1.2) a poté nastavíme pro Arduino IP adresu o několik adres větší (např. 192.168.1.50). Poté stačí už jen inicializovat Ethernet Shield do módu server se standardním portem 80.
Podprogram setup obsahuje nastavení komunikace po sériové lince, po kterém následuje zapnutí komunikace s Ethernet Shieldem a výpis nastavené IP adresy po sériové lince.
Nekonečná smyčka loop na svém začátku jako první načte připojené klienty do proměnné klient a poté zkontroluje, zda máme nějakého klienta. V případě, že je klient připojen, vytiskneme si informaci na sériovou linku a následně mu pošleme všechna data. Jako první tedy pošleme standardní http odezvu, kde můžeme nastavit u příkazu „Refresh: 5“ počet vteřin, po kterých se provede u klienta znovunačtení stránky. Dále je pro nás důležité místo pro tištění vlastních údajů, kde v tomto programu vytiskneme čas od spuštění Arduina a poté pomocí for smyčky informace ze všech analogových vstupů. Poté co je vytištěna celá odezva, uzavřeme spojení a smyčka loop se opakuje.
// LAN modul W5500 - web server // připojení potřebných knihoven #include <SPI.h> #include <Ethernet2.h> // nastavení MAC adresy byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // nastavení IP adresy - musí být přidělitelná DHCP serverem, // tedy ve správném rozsahu, případně přidělena routerem ručně IPAddress ip(192, 168, 1, 50); // inicializace serveru na portu 80 EthernetServer server(80); void setup() { // inicializace komunikace po sériové lince rychlostí 9600 baud Serial.begin(9600); // zapnutí komunikace s Ethernet Shieldem Ethernet.begin(mac, ip); server.begin(); // výpis informace o nastavené IP adrese Serial.print("Server je na IP adrese: "); Serial.println(Ethernet.localIP()); } void loop() { // načtení připojených klientů EthernetClient klient = server.available(); // pokud se připojí nějaký klient, provedeme následující if (klient) { Serial.println("Novy klient:"); // http request končí prázdným řádkem boolean aktualniRadkaPrazdna = true; // pokud je klient připojen a k dispozici, // vytiskneme mu dostupná data while (klient.connected()) { if (klient.available()) { // načtení a vytištění informace o klientovi char c = klient.read(); Serial.write(c); // pokud se dostaneme na konec řádku a následující je prázdný, // byl ukončen request a my můžeme poslat odezvu if (c == '\n' && aktualniRadkaPrazdna) { // nejprve pošleme standardní http odezvu klient.println("HTTP/1.1 200 OK"); klient.println("Content-Type: text/html"); klient.println("Connection: close"); // nastavení automatické obnovy stránky po 5 vteřinách klient.println("Refresh: 5"); klient.println(); klient.println(""); klient.println(""); // místo pro tištění vlastních údajů klient.print("Cas od spusteni: "); klient.print(millis() / 1000); klient.print(" vterin.<br />"); // ukázka výpisu dat ze všech analogových vstupů for (int analogPin = 0; analogPin < 6; analogPin++) { int analogData = analogRead(analogPin); klient.print("Analogovy vstup A"); klient.print(analogPin); klient.print(": "); klient.print(analogData); // příkaz "<br />" funguje jako krok na další řádek klient.println("<br />"); } klient.println(""); break; } // začátek nové řádky if (c == '\n') { aktualniRadkaPrazdna = true; // detekce znaku na nové řádce } else if (c != '\r') { aktualniRadkaPrazdna = false; } } } // pauza pro prohlížeč, aby stihl zpracovat všechny data delay(1); // uzavření spojení klient.stop(); Serial.println("Klient odpojen."); Serial.println("---------------------"); } }
Po nahrání ukázkového kódu do Arduino desky s připojeným Ethernet modulem W5500 dostaneme například tento výsledek:
Arduino Ethernet modul W5500 je zajímavým síťovým prvkem, který nám umožňuje připojit Arduino do naší domácí sítě. Po připojení můžeme sledovat naměřené údaje z libovolného zařízení, které se nachází ve stejné síti. Tento Ethernet modul tedy můžeme využít například jako měřící zařízení v části domu, kde je rozvedena LAN síť. Velkou výhodou je také to, že díky velmi dobré podpoře staršího modulu W5100 vznikla použitá knihovna Ethernet2, která je 100% kompatibilní se starší knihovnou Ethernet. Pokud jste tedy používali v nějakém projektu starší modul, stačí stáhnout novou knihovnu a ve Vašem kódu pouze změnit v názvu připojené knihovny <Ethernet.h> na <Ethernet2.h>.
Seznam použitých komponent:
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1676-sitovy-ethernetovy-modul-w5500-tcp-ip-51-stm32-pro-arduino-1500539901.html