Biblioteka, skirta HTTP užklausoms atlikti naudojant ESP8266 WiFi modulį ir Arduino

Biblioteka, skirta HTTP užklausoms atlikti naudojant ESP8266 WiFi modulį ir Arduino

Biblioteka, skirta HTTP užklausoms atlikti naudojant ESP8266 WiFi modulį ir Arduino

Paprastas būdas siųsti informaciją į mikrovaldiklį ir iš jo – centralizuoti ją žiniatinklio serveryje. Nors tai nėra toks efektyvus būdas kaip, pavyzdžiui, tiesioginis prisijungimas prie duomenų bazės, jis yra pakankamai efektyvus, ypač jei galvojate apie projektą, pagrįstą mikrovaldikliu ir pridedate visur privalumus (duomenys debesyje) ir paprastumą (tai gali būti tvarkoma kaip tekstinė informacija ir užsakymai). Informacijos siuntimas naudojant šią sistemą gali būti sudarytas iš HTTP POST užklausų pateikimo ir jos gavimo analizuojant atsakymo į HTTP GET užklausą turinį.

Turinys

    El ESP8266 WiFi modulis Tai labai ekonomiškas variantas, kurio našumas labai tinka naudoti su mikrovaldikliais ir labai paprastas naudoti dirbant su AT komandomis.

    Siekdamas susisteminti jos naudojimą HTTP užklausomis, sukūriau nedidelę biblioteką, kuri palaiko mano miego valdymo įrenginio projekto (kurį pavadinau SleepManager) poreikius, nes jos infrastruktūra grindžiama žiniatinklio serveriu, leidžiančiu jį išplėsti iki objekto. DI kaip debesies paslauga. Nesunku į biblioteką įtraukti kitas paslaugas, pavyzdžiui, UDP užklausas laiko sinchronizavimas per NTP nors, kaip paaiškinu susietame tekste, tai nėra labai svarbu mano poreikiams ir galiu jį priimtinai išspręsti su HTTP užklausa tam tikslui paruoštam tinklalapiui, kaip parodysiu šios bibliotekos naudojimo pavyzdyje.

    Bibliotekos veikimas pagrįstas AT komandų siuntimu, kai įrenginys yra pasiekiamas ir jų kartojimu (su nedideliu vėlavimu) įvykus klaidai, kuri interpretuojama kaip nepasiekiamumas (sėkmingai, testuojant) pavyzdžiui iš taško WiFi prieigos arba konsultuojamas serveris.

    Biblioteka naudojasi tuo, kad ESP8266 WiFi modulis grąžina +IPD kodą kaip įspėjimą apie duomenų gavimą, kad užpildytų nedidelį buferį serverio grąžinama informacija. Miego valdymo įrenginio projektui man reikia išanalizuoti labai mažai duomenų, grąžinamų iš serverio, todėl norint sutaupyti, buferis ir per jį einantis rodyklė yra ypač maži; Tai bus vienas iš pirmųjų dalykų, kuriuos turėsite pakeisti, norėdami pakartotinai naudoti biblioteką didesniam duomenų kiekiui apdoroti.

    Funkcijos, kurios yra viešos, leidžia (1) sužinoti modulio būseną: ar jis prijungtas ar ne, ar buferyje yra duomenų ir kiek, ir ar ESP8266 modulis atliko operaciją, kurios buvo prašoma. ; (2) prisijungti prie „WiFi“ prieigos taško tinkle su DHCP serveriu ir (3) pateikti HTTP GET ir POST užklausas, nors, kaip matysite, kodas sukurtas taip, kad būtų labai lengva pridėti kitų.

    Kalbant apie vidinį funkcionavimą, pirmiausia sudaromos dvi matricos: viena su AT įsakymais, o kita su laukiamais atsakymais į sėkmę ir klaidą; Tada programa, kuri naudoja biblioteką, turi retkarčiais iškviesti funkciją siųsti kuri bus atsakinga už užsakymų siuntimą į modulį, jei jie yra prieinami ir neužimti, ir į funkciją gauti kuris apdoros atsakymus iš ESP8266 modulio (ir iš HTTP serverio per jį, jei taikoma)

    Kadangi modulis gali būti atjungtas dėl signalo praradimo, pagrindinė programa gali patikrinti, ar ESP8266 modulis yra prijungtas prie WiFi prieigos taško (su funkcija conectado) ir pabandykite prisijungti kitaip (su funkcija connect_wifi)

    Kad sužinotų, ar prašoma operacija baigta, programa gali naudoti funkciją operacija_baigta ir tokiu atveju siųsti kitą arba naudoti gautus duomenis, kuriems naudojama funkcija skaitymo_buferis, kuris grąžina buferio turinį, kuris buvo užpildytas duomenimis, gautais į ESP8266 modulį, kol operacija bus baigta, ir funkciją buferio_ilgis kuri praneša apie šių duomenų kiekį, kurį serveris įspėjo, kad juos ketinama siųsti (kad būtų galima diskontuoti informaciją iš paties modulio)

    Toliau pateiktame pavyzdyje naudojama HTTP užklausų biblioteka su ESP8266 WiFi moduliu duomenims siųsti į serverį (procentas, gautas nuskaitant analoginę įvestį) kas tam tikrą laiko intervalą. Kadangi jis nesitiki gauti jokio atsakymo, jis nenaudoja buferio ir jo pakanka, kad operacija būtų atlikta teisingai. Šią sistemą naudoju savo miego valdymo įrenginio projekte, kad saugočiau jutiklio rodmenų rezultatus serveryje.

    Toliau pateiktame pavyzdyje naudojama HTTP GET užklausa, skirta serverio laikui pateikti ir sinchronizuoti jį su mikrovaldomo įrenginio laiku, pridedant numatomą atsakymo laiką; Tiesą sakant, ji prideda dar 4–6 sekundes, kad įsitikintų, jog įrenginio laikas yra ilgesnis už serverio laiką ir kad būtų galima lengvai patikrinti, ar tikrojo laiko laikrodžio, kuris yra įrenginio dalis, laikas yra teisingas, ar buvo prarastas dėl atsisiuntimo. akumuliatorius.

    Po daugelio bandymų įsitikinau, kad ši sistema yra Laiko sinchronizavimas su ESP8266 WiFi moduliu Tai pakankamai tikslus mano poreikiams; blogiausiu atveju su mažesne nei 10 sekundžių klaida, kuri mano atveju yra šiek tiek nesvarbu.

    Kaip matyti iš kode, pirmiausia reikia paklausti buferio ilgio, nes nuskaitant jis nustatomas iš naujo, kad būtų galima saugoti naujus duomenis.

    Nuskaitęs buferio turinį, šiame pavyzdyje jis apdorojamas, kad būtų gautas laikas. Pirmiausia pasirenkamas tekstas tarp skliaustų (serveris atsako naudodamas komandą PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Toliau pateikta pavyzdinė programa, įkvėpta vartotojo užklausos, naudojama viešajam IP adresui rasti naudojant paslaugą Patikrinkite IP AWS („Amazon Web Services“) kas penkias minutes.

    Kaip ir ankstesniuose pavyzdžiuose, daroma daugybė prielaidų, kurias reikės pakeisti atsižvelgiant į naudojamą tinklo konfigūraciją (pavyzdyje 192.168.1.X), SSID ir WiFi raktą... Kaip rasti IP adresas nėra labai elegantiškas, daroma prielaida, kad tai yra paskutinė atsakymo į HTTP GET užklausą eilutė, nors gali būti API, kuri tai padarytų ortodoksesniu būdu.


    jūs galite atsisiųskite ESP8266 biblioteką HTTP užklausoms su Arduino Uno (be pulto) ir iš čia galite atsisiųskite ESP8266 HTTP užklausų biblioteką, skirtą Arduino kuri naudoja konsolę, tai yra, ji turi įdiegti nuoseklųjį prievadą programine įranga arba naudoti kaip aparatinę įrangą, pavyzdžiui, pagrindinę plokštę „Arduino Mega“ o arduino leonardo.

    Rašyti komentarą

    Galbūt praleidote