Könyvtár a HTTP-lekérdezésekhez ESP8266 WiFi modullal és Arduino-val

Könyvtár a HTTP-lekérdezésekhez ESP8266 WiFi modullal és Arduino-val

Könyvtár a HTTP-lekérdezésekhez ESP8266 WiFi modullal és Arduino-val

Egy egyszerű módja annak, hogy információkat küldjön a mikrokontrollerre és onnan, ha központosítja azokat egy webszerverre. Bár ez nem olyan hatékony módszer, mint például az adatbázis közvetlen elérése, de elég hatékony, különösen, ha egy mikrokontrollerre épülő projektet tekintünk, és ehhez hozzáadjuk a mindenütt jelenlévő (adatok a felhőben) és az egyszerűség (ez szöveges információként és parancsként kezelhető. Az információ küldése e rendszer segítségével HTTP POST kérések lebonyolításából és azok fogadásából állhat a HTTP GET kérésre adott válasz tartalmának elemzésével.

Tartalomjegyzék

    El ESP8266 WiFi modul Ez egy nagyon gazdaságos opció, teljesítménye nagyon alkalmas mikrokontrollerekkel való használatra, és nagyon könnyen használható AT parancsokkal.

    A HTTP-kérésekkel való használatának rendszerezésére kifejlesztettem egy kis könyvtárat, amely támogatja az alváskezelő eszközprojektem (amelyet SleepManagernek neveztem) igényeit, mivel infrastruktúráját egy webszerverre alapozza, amely lehetővé teszi egy objektumra való kiterjesztését. Tárgyak internete mint felhő szolgáltatás. Nem nehéz más szolgáltatásokat, például UDP-kéréseket hozzáadni a könyvtárhoz, például időszinkronizálás NTP-n keresztül bár, amint azt a linkelt szövegben kifejtem, az én igényeim szempontjából nem kritikus, és elfogadhatóan meg tudom oldani egy erre a célra készített weboldalhoz intézett HTTP kéréssel, amint azt a könyvtár használati példájában is bemutatom.

    A könyvtár működése azon alapul, hogy az eszköz elérhetősége esetén AT parancsokat küldünk, és azokat (kis késéssel) megismételjük hiba esetén, ami elérhetetlenségként értelmezhető (tesztelve sikeresen) például pont WiFi hozzáférésről, ill. a szerverrel konzultálnak.

    A könyvtár kihasználja azt a tényt, hogy az ESP8266 WiFi modul egy +IPD kódot ad vissza az adatvételre figyelmeztetésül, hogy egy kis puffert töltsön fel a szerver által visszaküldött információkkal. Az alváskezelő eszköz projekthez nagyon kevés adatot kell elemeznem a szerverről, így a takarékosság kedvéért a puffer és a rajta futó mutató különösen kicsi; Ez lesz az egyik első dolog, amit meg kell változtatnia, ha a könyvtárat nagyobb mennyiségű adat feldolgozására szeretné újra felhasználni.

    A nyilvánosként megjelenő funkciók lehetővé teszik (1) a modul állapotának megismerését: csatlakoztatva van-e vagy sem, van-e adat a pufferben és mennyi, és hogy az ESP8266 modul befejezte-e a kért műveletet; (2) csatlakozzon egy Wi-Fi hozzáférési ponthoz egy DHCP-kiszolgálóval rendelkező hálózaton, és (3) HTTP GET és POST kéréseket hajtson végre, bár amint látni fogja, a kódot úgy tervezték, hogy nagyon egyszerű legyen mások hozzáadása.

    A belső működés tekintetében először két mátrixot építünk fel, az egyiket az AT parancsokkal, a másikat pedig a várható siker- és hibaválaszokkal; Ezután a könyvtárat használó programnak időnként meg kell hívnia a függvényt küld amely felelős a rendelések elküldéséért a modulba, ha azok elérhetők és nem foglaltak, valamint a funkcióhoz kap amely feldolgozza az ESP8266 modul válaszait (és adott esetben a HTTP-kiszolgálón keresztül)

    Mivel fennáll annak a lehetősége, hogy jelvesztés miatt a modul lekapcsolódhat, a főprogram ellenőrizheti, hogy az ESP8266 modul csatlakozik-e a WiFi hozzáférési ponthoz (a funkcióval összefüggő), és próbáljon meg másként kapcsolódni (a funkcióval connect_wifi)

    A program használhatja a funkciót, hogy megtudja, hogy a kért művelet befejeződött-e művelet_befejezett és ebben az esetben küldjön egy másikat, vagy használja a kapott adatokat, amelyekhez a funkciót használják read_buffer, amely visszaadja az ESP8266 modulhoz érkezett adatokkal feltöltött puffer tartalmát a művelet befejezéséig, és a függvényt puffer_hossz amely jelzi ezen adatok mennyiségét, amelyekre a szerver figyelmeztetett, hogy elküldik (hogy a modulból származó információ diszkontált legyen)

    Az alábbi példa a HTTP lekérdezési könyvtárat használja az ESP8266 WiFi modullal, hogy adatokat küldjön a szervernek (az analóg bemenet olvasásával kapott százalékos arányt) bizonyos időközönként. Mivel nem vár választ, nem használja a puffert, és ez elegendő a művelet megfelelő befejezéséhez. Ezt a rendszert használom az alváskezelő eszközprojektemben az érzékelők leolvasási eredményeinek szerveren való tárolására.

    A következő példa egy HTTP GET-lekérdezést használ a szerver idejének lekérdezésére, és a becsült válaszidő hozzáadásával szinkronizálja azt a mikrokontrollált eszköz idejével; Valójában további 4-6 másodpercet ad hozzá, hogy megbizonyosodjon arról, hogy az eszköz ideje nagyobb, mint a kiszolgálóé, és könnyen ellenőrizhető, hogy az eszköz részét képező valós idejű óra pontos-e, vagy elveszett-e a letöltés miatt. akkumulátor.

    Sok teszt után igazoltam, hogy ez a rendszer a Időszinkronizálás ESP8266 WiFi modullal Elég pontos az igényeimhez; legrosszabb esetben 10 másodpercnél rövidebb hibával, ami az én esetemben némileg irreleváns.

    Ahogy a kódban is látható, először le kell kérdezni a puffer hosszát, mivel az olvasás visszaállítja azt, így elérhető új adatok tárolására.

    A puffer tartalmának beolvasása után ebben a példában azt feldolgozzuk, hogy megkapjuk az időt. Először a kapcsos zárójelek közötti szöveg kerül kiválasztásra (a szerver a paranccsal válaszol PHP echo "{.time()."}") „időobjektummá” alakítja, és emberi formátumban lekéri belőle a dátumot és az időt.

    A következő példaprogram, amelyet egy felhasználó lekérdezése ihletett, a nyilvános IP-cím megkeresésére szolgál a szolgáltatás használatával CheckIP AWS (Amazon Web Services) öt percenként.

    Az előző példákhoz hasonlóan számos feltevést teszünk, amelyeket a használt hálózati konfigurációtól (a példában 192.168.1.X), az SSID-től és a WiFi kulcstól függően módosítani kell... A Az IP-cím nem túl elegáns, feltételezi, hogy ez a HTTP GET-kérésre adott válasz utolsó sora, bár lehet, hogy van egy API, amely ezt ortodoxabb módon teszi.


    Akkor töltse le az ESP8266 könyvtárat a HTTP-lekérdezésekhez az Arduino Uno segítségével (konzol nélkül) és innen megteheti töltse le az ESP8266 HTTP lekérdezési könyvtárat az Arduino számára amely konzolt használ, vagyis szoftveresen soros portot kell megvalósítania, vagy hardverként kell használnia, például egy alaplapot Mega Arduino o arduino leonardo.

    Hozzászólás Comment

    Lehet, hogy lemaradtál