Knižnica na vytváranie HTTP dotazov pomocou WiFi modulu ESP8266 a Arduina

Knižnica na vytváranie HTTP dotazov pomocou WiFi modulu ESP8266 a Arduina

Knižnica na vytváranie HTTP dotazov pomocou WiFi modulu ESP8266 a Arduina

Jednoduchým spôsobom odosielania informácií z a do mikrokontroléra je ich centralizácia na webovom serveri. Aj keď to nie je taká efektívna metóda ako napríklad priamy prístup k databáze, je dostatočne efektívna, najmä ak uvažujete o projekte založenom na mikrokontroléri a pridáte výhody všadeprítomnosti (dáta v cloude) a jednoduchosti (to môžu byť spracované ako textové informácie a objednávky). Odosielanie informácií pomocou tohto systému môže pozostávať z vytvárania požiadaviek HTTP POST a ich prijímania analýzou obsahu odpovede na požiadavku HTTP GET.

Obsah

    El WiFi modul ESP8266 Je to veľmi ekonomická možnosť, s výkonom veľmi vhodným pre použitie s mikrokontrolérmi a veľmi jednoduchou obsluhou pri práci s AT príkazmi.

    Aby som systematizoval jeho používanie s požiadavkami HTTP, vyvinul som malú knižnicu, ktorá podporuje potreby môjho projektu zariadenia na správu spánku (ktorý som nazval SleepManager), pretože svoju infraštruktúru zakladá na webovom serveri, ktorý umožňuje jej rozšírenie na objekt. IoT ako cloudová služba. Nie je ťažké pridať do knižnice napríklad ďalšie služby, ako sú požiadavky UDP synchronizácia času cez NTP aj keď, ako vysvetľujem v prepojenom texte, nie je to kritické pre moje potreby a môžem to prijateľne vyriešiť HTTP požiadavkou na webovú stránku pripravenú na tento účel, ako ukazujem na príklade použitia tejto knižnice.

    Fungovanie knižnice je založené na odosielaní AT príkazov, keď je zariadenie dostupné a ich opakovaní (s malým oneskorením) v prípade chyby, ktorá je interpretovaná ako nedostupnosť (úspešne, testovaním) napríklad z bodového WiFi prístupu resp. konzultovaný server.

    Knižnica využíva skutočnosť, že WiFi modul ESP8266 vracia +IPD kód ako upozornenie na príjem dát, aby naplnil malú vyrovnávaciu pamäť informáciami vrátenými serverom. Pre projekt zariadenia na správu spánku potrebujem analyzovať veľmi málo údajov vrátených zo servera, takže z dôvodu úspory sú vyrovnávacia pamäť a ukazovateľ, ktoré cez ňu prebiehajú, obzvlášť malé; Toto bude jedna z prvých vecí, ktoré budete musieť zmeniť, aby ste mohli knižnicu opätovne použiť na spracovanie väčšieho objemu údajov.

    Funkcie, ktoré sú vystavené ako verejné, umožňujú (1) poznať stav modulu: či je pripojený alebo nie, či sú dáta vo vyrovnávacej pamäti a koľko a či modul ESP8266 dokončil požadovanú operáciu; (2) pripojte sa k prístupovému bodu WiFi v sieti so serverom DHCP a (3) vytvorte požiadavky HTTP GET a POST, hoci, ako uvidíte, kód je navrhnutý tak, aby bolo veľmi jednoduché pridávať ďalšie.

    Čo sa týka interného fungovania, najprv sú vytvorené dve matice, jedna s AT príkazmi a druhá s očakávanými odpoveďami na úspech a chybu; Potom musí program, ktorý používa knižnicu, z času na čas volať funkciu odoslať ktorý bude mať na starosti odosielanie objednávok do modulu, ak sú dostupné a funkcia ešte nie je obsadená obdržať ktorý bude spracovávať odpovede z modulu ESP8266 (a z HTTP servera cez neho, ak je to možné)

    Keďže existuje možnosť, že modul môže byť odpojený z dôvodu straty signálu, hlavný program môže skontrolovať, či je modul ESP8266 pripojený k prístupovému bodu WiFi (pomocou funkcie conectado) a skúste sa pripojiť inak (pomocou funkcie connect_wifi)

    Ak chcete vedieť, či bola požadovaná operácia dokončená, program môže použiť funkciu operácia_dokončená a v tom prípade poslať ďalšie alebo použiť výsledné dáta, na ktoré sa funkcia používa read_buffer, ktorý vráti obsah vyrovnávacej pamäte, ktorá bola naplnená údajmi, ktoré prišli do modulu ESP8266, kým sa operácia nedokončí, a funkcia dĺžka_bufru ktorý hlási množstvo týchto dát, o ktorých server varoval, že sa budú odosielať (aby bolo možné zľaviť informácie zo samotného modulu)

    Nižšie uvedený príklad používa knižnicu dotazov HTTP s modulom WiFi ESP8266 na odosielanie údajov na server (percento získané z čítania analógového vstupu) v každom určitom časovom intervale. Keďže neočakáva žiadnu odpoveď, nevyužíva vyrovnávaciu pamäť a na správne dokončenie operácie stačí. Tento systém používam vo svojom projekte zariadenia na správu spánku na ukladanie výsledkov nameraných hodnôt senzorov na serveri.

    Nasledujúci príklad používa dotaz HTTP GET na dopytovanie času servera a jeho synchronizáciu s časom mikroriadeného zariadenia pridaním odhadovaného času odozvy; V skutočnosti pridáva ďalších 4 až 6 sekúnd, aby sa zaistilo, že čas zariadenia je dlhší ako čas servera, a aby sa ľahko skontrolovalo, či je čas na hodinách reálneho času, ktoré sú súčasťou zariadenia, správny alebo sa stratil v dôsledku sťahovania batérie.

    Po mnohých testoch som si overil, že tento systém Synchronizácia času s WiFi modulom ESP8266 Je dostatočne presný pre moje potreby; v najhoršom prípade s chybou menšou ako 10 sekúnd, čo je v mojom prípade trochu irelevantné.

    Ako je vidieť v kóde, je potrebné najprv zistiť dĺžku vyrovnávacej pamäte, pretože čítanie ju resetuje, aby bolo možné uložiť nové údaje.

    Po prečítaní obsahu vyrovnávacej pamäte sa v tomto príklade spracuje na získanie času. Najprv sa vyberie text medzi zloženými zátvorkami (server odpovie príkazom PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Nasledujúci vzorový program, inšpirovaný dopytom používateľa, sa používa na nájdenie verejnej IP adresy pomocou služby CheckIP AWS (webové služby Amazon) každých päť minút.

    Rovnako ako v predchádzajúcich príkladoch je vytvorený rad predpokladov, ktoré sa budú musieť zmeniť v závislosti od použitej konfigurácie siete (v príklade 192.168.1.X), SSID a kľúča WiFi... Spôsob, ako nájsť IP adresa nie je príliš elegantná, predpokladá, že je to posledný riadok odpovede na požiadavku HTTP GET, hoci môže existovať rozhranie API, ktoré to urobí ortodoxnejším spôsobom.


    môžete stiahnite si knižnicu ESP8266 pre HTTP dotazy s Arduino Uno (bez konzoly) a odtiaľto môžete stiahnite si knižnicu dotazov HTTP ESP8266 pre Arduino ktorý používa konzolu, to znamená, že potrebuje implementovať sériový port softvérom alebo použiť ako hardvér, napríklad základná doska Mega Arduino o arduino leonardo.

    Pridať komentár

    Možno ste zmeškali