Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Arduino Ethernet Shield obsahuje integrovaný obvod W5100. Tento šikovný obvod od firmy WIZnet umožňuje připojit Arduino k domácí síti, potažmo Internetu. Samotný Shield obsahuje kromě obvodu W5100 také konektor RJ45 pro připojení síťového kabelu a slot pro paměťové karty typu microSD. Shield lze používat s různými typy desek, jako například Uno, Leonardo či Mega. Výhodou je také vyvedené tlačítko pro Reset na Shield. Pro jednoduchou kontrolu činnosti LAN portu jsou umístěný na Shieldu také indikační LED diody. Obvod W5100 zvládá práci s adresami typu IPv4 a komunikuje rychlostí 10 či 100 Mb/s. S Arduinem probíhá komunikace pomocí protokolu SPI, a to jak komunikace s obvodem W5100, tak i se slotem na paměťové karty.
Pro úspěšné propojení Ethernet Shieldu s Arduinem tedy stačí do desky Arduino Uno (nebo jiné) zapojit Shield a propojit Shield síťovým kabelem RJ45 s routerem či switchem. Výhodou tohoto Shieldu je také to, že se na něm nachází průchozí konektory a my tedy můžeme zapojit nevyužité piny Arduina s jinými zařízeními. Ethernet Shield využívá piny 11, 12 a 13 pro SPI a dále pin 10 pro CS signál W5100 a pin 4 pro CS signál slotu pro paměťové karty.
Ukázkový kód s web serverem obsahuje na svém začátku připojení potřebných knihoven, které jsou součástí Arduino IDE. 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ř. 10.0.0.2) a poté nastavíme pro Arduino IP adresu o několik adres větší (např. 10.0.0.55). 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. Nekonečná smyčka loop na svém začátku jako první načte připojené klienty do proměnné klient a poté zkontrolujeme, 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.
// Ethernet Shield - web server #include <SPI.h> #include <Ethernet.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(10, 0, 0, 55); // inicializace serveru na portu 80 EthernetServer server(80); void setup() { // 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 Shieldem dostaneme například tento výsledek:
Cas od spusteni: 16 vterin. Analogovy vstup A0: 337 Analogovy vstup A1: 265 Analogovy vstup A2: 221 Analogovy vstup A3: 167 Analogovy vstup A4: 131 Analogovy vstup A5: 110 Cas od spusteni: 21 vterin. Analogovy vstup A0: 150 Analogovy vstup A1: 144 Analogovy vstup A2: 143 Analogovy vstup A3: 115 Analogovy vstup A4: 103 Analogovy vstup A5: 84
Arduino Ethernet Shield 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 Shield tedy můžeme využít jako měřící zařízení v části domu, kde je rozvedena LAN síť. Pokud budete chtít využít také SD kartu, lze s ní pracovat obdobně jako v tomto návodu, stačí pouze změnit datový pin sd_CS na pin 4.
Seznam použitých komponent:
http://dratek.cz/arduino/917-arduino-ethernet-shield-w5100-r3-1420993161.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.