Hrátky s WiFi čipem ESP8266 (3.díl – vzdálené ovládání relé)

Jak jsem v minulém díle seriálu předesílal, dnes se koukneme na jednoduchou aplikaci, která bude srze WiFi a webový prohlížeč ovládat periferii připojenou na GPIO port. Dá se tedy již říct, že se již lehce začínáme opírat o IoT (Internet of Things).

Dnes si postavíme základ pro dálkové spínání zásuvky.

Co budeme potřebovat:

Zleva jmenovitě – nepájivé kontaktní pole s modulem pro napájení, modul ESP-01, relé modul spínající při GND připojeném na řídící pin – low level trigger, UART modul pro sériovou komunikaci, propojovací kabely

Použití low level trigger relé je důležité. Relé moduly většinou pracují s logikou 0-5V. Výstup na ESP modulu na GPIO je 3,3V. K sepnutí high level trigger relé by to samo o sobě nestačilo.

Zapojení bude následovné:

Kabely, které jsou na schématu přerušovaně, se mohou po naprogramování odpojit. Především kabel připojený na GPIO0. Pokud zůstane připojen po restartu, přepne se ESP modul opět do módu pro nahrávání programu. UART převodník je vhodný nechat při prvním spuštění zapojený pro ověření vstupů a výstupů přes sériový monitor (součást Aduino IDE). Detaily debuggingu přes sériovou komunikaci najdete v přiloženém zdrojovém kódu, kde je vše podrobně zakomentováno.

Aplikace, kterou do ESP nahrajeme, se bude chovat jako jednoduchý webový server. Při startu se připojí na WiFi definovanou v kódu a začne naslouchat na portu 80. Při příchozím požadavku vyhodnotí jeho obsah a na základě toho provede definovanou akci – zobraz stránku a sepni relé / zobraz stránku a rozepni relé / zobraz stránku. IP modulu zjistíme ze sériového monitoru (případ DHCP), nebo ji můžeme nastavit staticky. Pro dnes je to vše. Příště si povíme něco málo o napájení ESP modulů a podíváme se jak dokáže ESP komunikovat s displejem přes i2c.

 

Přílohy

  • zip rele
    Velikost souboru: 1 KB

15 komentářů: „Hrátky s WiFi čipem ESP8266 (3.díl – vzdálené ovládání relé)

  1. Dobry den, do ESP8266-01 som nahral Vas program, vsetko prebehlo OK.. Seriovy terminal hlasi….Server.nastartovany, novy klient, vypise IP adresu. Pri pokuse o pristup na IP adresu z PC, alebo telefonu sa webovska stranka neobjavi a seriovy terminal zahlasi : Client disconnected. Kde, prosim Vas soudruh z NDR dela chybu ?
    Dakujem za radu a prajem pekny den.

    1. Dobrý den,
      zkuste pod řádku:
      String req = client.readStringUntil(‚/‘);
      přidat
      Serial.println(req);
      Ať vidíte co vám tam přijde v requestu. Následně pak můžete vyhodnotit zda je string zpracováván korektně. Serial.println je nejjednodušší nástroj pro debugging.

      Případně můžete zkusit zavolat přímo. Tím zjistíte, zda není problém pouze s výchozím voláním.

      http://IP/zapni
      nebo
      http://IP/vypni

      Ještě se případně zeptám, jaký prohlížeč používáte?

  2. Dobry den, dakujem za odpoved. Riadok som pridal, vyzera to tak, ze ESP odpoveda. Na terminali sa objavuje zapnuto, vypnuto po zadani IP/zapni, IP/vypni. Po zadani IP bez lomitka je na terminali odozva : Get. Prehliadace som skusal: IE11, Mozilla 6.10 a Chrome 67. Stranka sa nezobrazi ani na jednom, na Mozille „Zapni“ a „Vypni“ preblikne a zmizne. Windows je verzie 10.
    So samotnym modulom mam problem aj s AT prikazmi. Skec ide nahrat bez problemov, Firmware som aktualizoval na 0.9.5.2. Po aktualizacii chvilu na AT odpovedal a teraz „so mnou nerozprava“
    Prajem pekny den.

    1. Zvláštní je, že vám prohlížeč nevykresluje danou webovou stránku s odkazy vypnout a zapnout. Zkoušel jste v prohlížeči dát „zobrazit zdrojový kód“? Třeba tam je problém s nějakým neuzavřeným tagem a prohlížeč to může špatně interpretovat. Při vypni/zapni to také stránku neukáže?

      1. Prvotny problem som mal uz pri kopirovani skecu….CTRL C, CTRL V. Po vymazani riadku #include a pridani kniznice cez Arduino IDE problem zmizol. Je mozne, ze pri kopirovani z webu sa skec poskodil, pripadne sa skopirovali aj znaky, ktore tam nemali byt.. Kazdopadne, dalej neriesim. Nasiel som vyborny web server aj s vykreslenim tlacitiek tu : https://randomnerdtutorials.com/esp8266-web-server/. Mozno poznate, je tam aj podrobne vysvetlenie kodu. Funguje na prvy pokus. Kazdopadne dakujem za inspiraciu a prajem vsetko dobre.

      2. client.flush()je určený len na vyprázdnenie vyrovnávacej pamäte vysielania a nie na príjem

        treba ho nahradiť

        while (client.available()) {
        client.read();
        }

        1. Dobrý den,
          volání client.flush() je použito na správném místě, kde již žádný požadavek ze socketu číst nechci. O čtení se starají dvě řádky nad daným voláním, Kde si potřebné vstupy z volání GET uložím do proměnné.

          1. Dobrý deň

            To je v poriadku
            ale treba vyprázdniť celý request až do konca hoci z neho nič nepotrebujem.
            flush to nevyprázdni, stále tam ostáva okolo 400 znakov.
            A preto všetko prebehne v poriadku len stránka sa v prehliadači nezobrazí pretože request nebol spracovaný celý

          2. Zkuste se podívat výše na odkaz, který jsem zasílal kolegovi. Funkce client.flush() je tam použita úplně stejně a i mně samotnému toto řešení fungovalo.
            V dokumentaci se mluví jasně o zahození zbytku streamu https://www.arduino.cc/en/Reference/WiFiClientFlush

            Zkoušel jsem i telnet a odpověď jsem dostal korektní. Nevím kde dělal kolega chybu. Vám kód taktéž nefunguje? Můžete případně poslat odkaz na vaše řešení.

          3. Dobrý deň

            v dokumantácíí sa píše
            Discard any bytes that have been written to the client but not yet read.- zapísané klientovi a neprečítané
            čiže client.print() a nie client.read()

            a čo sa týka toho vzorového súboru na githubu líši sa od vášho v tom že po odoslaní stránky nie je ukončená komunikácia client.stop() a potom ak aj nepoužijete client.flush() tak to funguje

            Vo vašom príklade ukončíte komunikácia client.stop() bez dočítania requestu
            a preto sa stránka nezobrazí

          4. Omlouvám se, už jsem pochopil co se mi tu celou dobu snažíte říct … že mi to ale trvalo 🙂 Zřejmě vlivem dopisování komentářů jsem vyhodil několik client.flush příkazů a nahradil je client.stop. Doma mám samozřejmě jinou verzi.

            Opravím to obratem. Děkuji za trpělivost!

  3. Mám esp8266-01 zapojené s relé na pinu GP02.Nevím proč když připojím napájecí napětí na modul tak relé sepne a nelze se připojit k wifi. Musím odpojit relé od modulu a znovu zapnout napájení připojit relé a pak vše funguje jak má.

    1. Dobrý den, pokud si to pamatuji správně, tak jsem podobný problém řešil u relé s high level trigger (sepnutí logickou jedničkou). Tenkrát jsem mezi relé a esp dal nějaký NPN tranzistor a bylo po problému.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.