Bibliotek för att göra HTTP-frågor med en ESP8266 WiFi-modul och Arduino

Bibliotek för att göra HTTP-frågor med en ESP8266 WiFi-modul och Arduino

Bibliotek för att göra HTTP-frågor med en ESP8266 WiFi-modul och Arduino

Ett enkelt sätt att skicka information till och från en mikrokontroller är att centralisera den på en webbserver. Även om det inte är en lika effektiv metod som att till exempel direkt komma åt en databas, är den tillräckligt effektiv, speciellt om du överväger ett projekt baserat på en mikrokontroller, och lägger till fördelarna med ubiquity (data i molnet) och enkelhet (det kan hanteras som textinformation och order.) Att skicka information med detta system kan bestå av att göra HTTP POST-förfrågningar och ta emot den genom att analysera innehållet i svaret på en HTTP GET-förfrågan.

Innehållsförteckning

    El ESP8266 WiFi-modul Det är ett mycket ekonomiskt alternativ, med en prestanda som är mycket lämplig för användning med mikrokontroller och mycket lätt att använda att arbeta med AT-kommandon.

    För att systematisera dess användning med HTTP-förfrågningar har jag utvecklat ett litet bibliotek som stödjer behoven i mitt sömnhanteringsenhetsprojekt (som jag har kallat SleepManager) eftersom det baserar sin infrastruktur på en webbserver som gör att den kan utökas till ett objekt. IoT som molntjänst. Det är inte svårt att lägga till andra tjänster som UDP-förfrågningar till biblioteket, till exempel tidssynkronisering över NTP även om det, som jag förklarar i den länkade texten, inte är kritiskt för mina behov och jag kan lösa det på ett acceptabelt sätt med en HTTP-förfrågan till en webbsida förberedd för detta ändamål, som jag visar i ett exempel på användning av detta bibliotek.

    Driften av biblioteket bygger på att skicka AT-kommandon när enheten är tillgänglig och upprepa dem (med en liten fördröjning) vid fel, vilket tolkas som att det inte är tillgängligt (lyckat, genom att testa) till exempel från punkt WiFi-access eller server som konsulteras.

    Biblioteket utnyttjar det faktum att ESP8266 WiFi-modulen returnerar en +IPD-kod som en varning för datamottagning för att fylla en liten buffert med informationen som returneras av servern. För sömnhanteringsenhetsprojektet behöver jag analysera väldigt lite data som returneras från servern, så för att spara är bufferten och pekaren som går genom den särskilt små; Detta kommer att vara en av de första sakerna du måste ändra för att återanvända biblioteket för att bearbeta en större mängd data.

    Funktionerna som är exponerade som offentliga tillåter (1) att veta modulens status: om den är ansluten eller inte, om det finns data i bufferten och hur mycket och om ESP8266-modulen har slutfört den efterfrågade operationen; (2) anslut till en WiFi-åtkomstpunkt i ett nätverk med en DHCP-server och (3) gör HTTP GET- och POST-förfrågningar även om, som du kommer att se, koden är utformad för att göra det mycket enkelt att lägga till andra.

    När det gäller den interna funktionen byggs först två matriser, en med AT-order och en annan med förväntade svar för framgång och fel; Sedan måste programmet som använder biblioteket anropa funktionen då och då skicka som kommer att ansvara för att skicka beställningarna till modulen om de är tillgängliga och inte upptagna samt till funktionen recibir som kommer att bearbeta svar från ESP8266-modulen (och från HTTP-servern genom den om tillämpligt)

    Eftersom det finns en möjlighet att modulen kan kopplas bort på grund av signalförlust, kan huvudprogrammet kontrollera om ESP8266-modulen är ansluten till WiFi-åtkomstpunkten (med funktionen ansluten) och försök ansluta på annat sätt (med funktionen connect_wifi)

    För att veta om den begärda operationen har avslutats kan programmet använda funktionen operation_finished och i så fall skicka en annan eller använda den resulterande data som funktionen används för read_buffer, som returnerar innehållet i bufferten som har fyllts med data som anlände till ESP8266-modulen tills operationen är klar, och funktionen buffertlängd som rapporterar mängden av denna data som servern har varnat för att den skulle skickas (så att informationen från själva modulen kan diskonteras)

    Exemplet nedan använder HTTP-frågebiblioteket med ESP8266 WiFi-modulen för att skicka data till servern (en procentandel som erhålls från att läsa en analog ingång) varje visst tidsintervall. Eftersom den inte förväntar sig att få något svar använder den inte bufferten och det räcker för att operationen ska slutföras korrekt. Det här systemet är det jag använder i mitt projekt för sömnhanteringsenhet för att lagra resultaten av sensoravläsningarna på servern.

    Följande exempel använder en HTTP GET-fråga för att fråga serverns tid och synkronisera den med den mikrokontrollerade enhetens tid genom att lägga till den beräknade svarstiden; Faktum är att den lägger till ytterligare 4 till 6 sekunder för att säkerställa att enhetens tid är större än serverns tid och för att enkelt kontrollera om tiden på realtidsklockan som är en del av enheten är korrekt eller har gått förlorad på grund av nedladdning batteri.

    Efter många tester har jag verifierat att detta system av Tidssynkronisering med ESP8266 WiFi-modul Det är tillräckligt exakt för mina behov; i värsta fall med ett fel på mindre än 10 sekunder vilket är något irrelevant i mitt fall.

    Som kan ses i koden är det nödvändigt att först fråga längden på bufferten eftersom läsning återställer den så att den är tillgänglig för att lagra ny data.

    När innehållet i bufferten väl har lästs bearbetas det i detta exempel för att erhålla tiden. Först väljs texten mellan klammerparenteserna (servern svarar med kommandot PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Följande exempelprogram, inspirerat av en användares fråga, används för att hitta den offentliga IP-adressen med hjälp av tjänsten Kontrollera IP AWS (Amazon Web Services) var femte minut.

    Liksom i de tidigare exemplen görs en serie antaganden som måste ändras beroende på vilken nätverkskonfiguration som används (192.168.1.X, i exemplet), SSID och WiFi-nyckeln... Sättet att hitta IP-adressen är inte särskilt elegant, den antar att den är den sista raden i svaret på HTTP GET-förfrågan även om det kan finnas ett API för att göra det på ett mer ortodoxt sätt.


    du kan ladda ner ESP8266-biblioteket för HTTP-frågor med Arduino Uno (utan konsol) och härifrån kan du ladda ner ESP8266 HTTP-frågebiblioteket för Arduino som använder en konsol, det vill säga den behöver implementera en seriell port med programvara eller använda som hårdvara, till exempel ett moderkort arduino mega o arduino leonardo.

    Post kommentar

    Du kanske har missat