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 GSM Shield obsahuje GSM modul SIM900. Tento populární obvod od firmy Simcom nám umožňuje vytvořit z Arduina vlastní mobilní telefon. Můžeme tedy pomocí Arduina volat na různá telefonní čísla, zároveň i hovory přijímat a to samé se SMS zprávami. Dále je možné se pomocí GPRS připojit na Internet, avšak tato funkce není součástí tohoto návodu. Díky podpoře Quad-Band (850/900/1800/1900 MHz) je možné používat modul téměř po celém světě. Komunikace s Arduinem probíhá přes sériovou linku pomocí AT příkazů.
Pro úspěšné propojení GSM Shieldu s Arduinem tedy stačí vespod GSM shieldu vložit SIM kartu (je nutné odstranit zadávání PINu) a do desky Arduino Uno (či jiné kompatibilní) zapojit Shield. Na některých Shieldech lze pomocí propojek nastavit ručně piny TX a RX pro komunikaci se senzorem, u novějších jsou to pak většinou piny 7 a 8. A jako třetí je použit pin 9 pro zapínání napájení pro GSM modul.
Pokud byste chtěli využít GSM shield na jiných deskách, tak na deskách Mega a Mega 2560 je možné pro pin RX využít pouze tyto piny: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). A na deskách Leonardo a Micro lze pro pin RX využít tyto piny: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Pro správnou funkci uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu GPRS_SIM900, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a poté nastavení propojovacích pinů a rychlosti komunikace se SIM modulem. Jako další jsou vytvořeny proměnné jako detekované číslo, se kterým budeme ovládat modul, a proměnné pro práci se SMS zprávami. Následně provedeme inicializaci modulu SIM900 z knihovny. V podprogramu setup zahájíme komunikaci po sériové lince pro výpis ladících informací a následně provedeme kontrolu napájení pro SIM modul. Pokud je modul vypnutý, provedeme jeho zapnutí a poté vyčkáme ve smyčce while na kompletní inicializaci modulu. Pokud by se nedařilo navázat spojení se SIM modulem, budeme dostávat každou vteřinu informaci o chybě inicializace. Po úspěšné inicializaci se posuneme do hlavní smyčky loop, kde jako první načteme aktuální čas od spuštění napájení a převedeme si ho na textový tvar, který je poté použit při odesílání SMS odezvy. Následují ukázky různých funkcí modulu SIM900. Jako první je uvedena ukázka načtení počtu nepřečtených zpráv a v případě existence alespoň jedné nepřečtené zprávy si nejprve do proměnných načteme všechny informace, následně zprávu smažeme a vytiskneme po sériové lince všechny dostupné informace. Poté proběhne kontrola, jestli zpráva přišla od našeho nastaveného čísla a v případě že ano, tak jestli obsahuje očekávaný text „Ahoj“ nebo „Zavolej“. Pokud jsou obě podmínky splněny, vypíšeme hlášku o přijaté zprávě, u zprávy „Zavolej“ také zavoláme na nastavené číslo. V opačném případě si vypíšeme chybovou hlášku. Druhá ukázka funkce modulu SIM900 souvisí s detekcí telefonátu. Pokud je tedy splněna if podmínka o příchozím hovoru, vytiskneme si po sériové lince číslo volajícího a následně po jedné sekundě zavěsíme. Poté zkontrolujeme, jestli se číslo volaného shoduje s naším nastaveným a pokud tato podmínka platí, načteme si v našem příkladu hodnotu z analogového portu A0 a vytvoříme odpověď obsahující čas od spuštění a naměřenou hodnotu z portu A0. Následně ji převedeme na formát vhodný pro SIM modul a odešleme na uložené telefonní číslo. Pokud by byl detekován hovor od cizího čísla, dostaneme o tomto pouze informaci po sériové lince. Na konci programu se nachází už jen krátká pauza před novým během smyčky loop.
// SIM 900 GSM Shield // připojení potřebných knihoven #include <GPRS_Shield_Arduino.h> #include <SoftwareSerial.h> // nastavení propojovacích pinů a rychlosti // komunikace se SIM modulem, // novější Shieldy používají pro // komunikaci TX a RX piny 7 a 8 #define pinTX 2 #define pinRX 3 #define pinPower 9 #define rychlostSim 9600 // vytvoření proměnné s detekovaným číslem char mojeCislo[16] = "+420721******"; // vytvoření proměnných pro práci s SMS #define delkaZpravy 160 char smsZprava[delkaZpravy]; int smsIndex = 0; char telCislo[16]; char casDatum[24]; // inicializace SIM900 modulu z knihovny GPRS sim900(pinTX, pinRX, rychlostSim); void setup() { // zahájení komunikace po sériové lince Serial.begin(9600); // kontrola napájení modulu SIM900, // v případě vypnutého modulu ho zapneme if(!sim900.checkPowerUp()) { sim900.powerUpDown(pinPower); } // vyčkávací smyčka, dokud není správně nainicializován // SIM modul while(!sim900.init()) { Serial.println("Chyba inicializace!"); delay(1000); } delay(2000); Serial.println("Inicializace uspesna!"); } void loop() { // načtení a přepočet času od spuštění Arduina // do tvaru 1h2m3s long cas = millis()/1000; long casSekundy = cas % 60; long casMinuty = (cas / 60) % 60; long casHodiny = cas / 3600; String casKomplet = String(casHodiny); casKomplet += "h"; casKomplet += String(casMinuty); casKomplet += "m"; casKomplet += String(casSekundy); casKomplet += "s"; // kontrola SMS zpráv - načtení počtu nepřečtených zpráv smsIndex = sim900.isSMSunread(); // pokud existuje alespoň jedna nepřečtená zpráva, // provedeme její přečtení a detekci textu if (smsIndex > 0) { // načtení SMS zprávy do proměnných ve funkci sim900.readSMS(smsIndex, smsZprava, delkaZpravy, telCislo, casDatum); // vymazání aktuálně přečtené zprávy sim900.deleteSMS(smsIndex); // vytištění informací o přijaté SMS zprávě Serial.print("Od cisla: "); Serial.println(telCislo); Serial.print("Datum a cas: "); Serial.println(casDatum); Serial.print("Zprava: "); Serial.println(smsZprava); // kontrola přijetí SMS zprávy od našeho nastaveného čísla // strcmp porovná 2 stringy a nula znamená počet odlišných znaků if (strcmp(telCislo, mojeCislo)==0) { // proměnná s detekovaným textem v SMS zprávě char mojeZprava1[delkaZpravy] = "Ahoj"; char mojeZprava2[delkaZpravy] = "Zavolej"; // kontrola přijetí detekovaného textu if (strcmp(smsZprava, mojeZprava1)==0) { Serial.println("Prijata zprava Ahoj!"); } else if (strcmp(smsZprava, mojeZprava2)==0) { Serial.println("Prijata zprava Zavolej, tak volam!"); sim900.callUp(mojeCislo); } else { Serial.println("Prijata neznama zprava."); } } else { Serial.println("Prijata neznama zprava od neznameho cisla."); } } // kontrola příchozího hovoru s uložením čísla do proměnné if(sim900.isCallActive(telCislo)) { // vytištění informací o příchozím hovoru Serial.print("Vola cislo: "); Serial.println(telCislo); // pauza po dobu 1 sekundy a následné zavěšení hovoru delay(1000); sim900.hangup(); // kontrola hovoru od našeho nastaveného čísla if (strcmp(telCislo, mojeCislo)==0) { // vytištění informace o poslání zprávy Serial.println("Zname cislo, odeslana SMS."); // načtení hodnoty analogového pinu // do proměnné typu String String analog = String(analogRead(A0)); // složení celé zprávy do proměnné odpoved String odpoved = "Cas od spusteni: "; odpoved += casKomplet; odpoved += " vterin. A0: "; odpoved += analog; // převedení textu na proměnnou kompatibilní se SIM modulem odpoved.toCharArray(smsZprava, 160); // poslání SMS zprávy na nastavené číslo sim900.sendSMS(telCislo, smsZprava); } else { // vytištění informací o volání neznámého čísla Serial.println("Nezname cislo - bez odezvy."); Serial.print("Ulozene : "); Serial.println(mojeCislo); Serial.print("Volajici: "); Serial.println(telCislo); } } // krátká pauza před novou komunikací se SIM modulem delay(10); }
Po nahrání ukázkového kódu do Arduino desky s připojeným GSM Shieldem dostaneme například tento výsledek:
Arduino GSM Shield s modulem SIM900 je velice šikovný komunikační doplněk, který nám umožňuje doplnit Arduino o funkce mobilního telefonu. Můžeme ho pak využívat pro dálkovou kontrolu a ovládání různých zařízení, kdy může reagovat jak na příchozí nastavovací zprávy, tak jen na jednoduché prozvonění. A to vše samozřejmě jen u povolených telefonních čísel.
Seznam použitých komponent:
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/1215-arduino-gprs-gsm-shield-sim900-850-900-1800-1-1458073747.html
nebo
http://dratek.cz/arduino/905-arduino-gsm-shield-1420739952.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.