Bibliotek for å lage HTTP-spørringer med en ESP8266 WiFi-modul og Arduino

Bibliotek for å lage HTTP-spørringer med en ESP8266 WiFi-modul og Arduino

Bibliotek for å lage HTTP-spørringer med en ESP8266 WiFi-modul og Arduino

En enkel måte å sende informasjon til og fra en mikrokontroller på er å sentralisere den på en webserver. Selv om det ikke er en like effektiv metode som for eksempel direkte tilgang til en database, er den effektiv nok, spesielt hvis du vurderer et prosjekt basert på en mikrokontroller, og legger til fordelene med ubiquity (data i skyen) og enkelhet (det kan håndteres som tekstinformasjon og bestillinger.) Å sende informasjon ved hjelp av dette systemet kan bestå i å lage HTTP POST-forespørsler og motta den ved å analysere innholdet i svaret på en HTTP GET-forespørsel.

Innholdsfortegnelse

    El ESP8266 WiFi-modul Det er et veldig økonomisk alternativ, med en ytelse som er veldig egnet for bruk med mikrokontrollere og veldig enkel å bruke ved å jobbe med AT-kommandoer.

    For å systematisere bruken med HTTP-forespørsler har jeg utviklet et lite bibliotek som støtter behovene til prosjektet mitt for søvnstyringsenhet (som jeg har kalt SleepManager) siden det baserer infrastrukturen sin på en webserver som gjør at den kan utvides til et objekt. IOT som skytjeneste. Det er ikke vanskelig å legge til andre tjenester som UDP-forespørsler til biblioteket, for eksempel til tidssynkronisering over NTP selv om det, som jeg forklarer i den koblede teksten, ikke er kritisk for mine behov, og jeg kan løse det på en akseptabel måte med en HTTP-forespørsel til en nettside utarbeidet for det formålet, som jeg viser i et eksempel på bruk av dette biblioteket.

    Driften av biblioteket er basert på å sende AT-kommandoer når enheten er tilgjengelig og gjenta dem (med en liten forsinkelse) i tilfelle feil, noe som tolkes som manglende tilgjengelighet (vellykket, ved å teste) for eksempel fra punkt WiFi-tilgang eller serveren blir konsultert.

    Biblioteket utnytter det faktum at ESP8266 WiFi-modulen returnerer en +IPD-kode som en advarsel om datamottak for å fylle en liten buffer med informasjonen som returneres av serveren. For prosjektet for søvnstyringsenhet må jeg analysere svært lite data som returneres fra serveren, så for å spare penger er bufferen og pekeren som går gjennom den spesielt små; Dette vil være en av de første tingene du må endre for å gjenbruke biblioteket til å behandle et større datavolum.

    Funksjonene som er eksponert som offentlige lar (1) vite statusen til modulen: om den er tilkoblet eller ikke, om det er data i bufferen og hvor mye, og om ESP8266-modulen har fullført operasjonen som er forespurt ; (2) koble til et WiFi-tilgangspunkt på et nettverk med en DHCP-server og (3) foreta HTTP GET- og POST-forespørsler, selv om, som du vil se, koden er designet for å gjøre det veldig enkelt å legge til andre.

    Når det gjelder intern funksjon, bygges det først to matriser, en med AT-ordrene og en annen med de forventede responsene for suksess og feil; Deretter må programmet som bruker biblioteket kalle opp funksjonen fra tid til annen send som skal stå for å sende bestillingene til modulen dersom de er ledige og ikke opptatt og til funksjonen motta som vil behandle svar fra ESP8266-modulen (og fra HTTP-serveren gjennom den hvis aktuelt)

    Siden modulen kan bli frakoblet på grunn av signaltap, kan hovedprogrammet sjekke om ESP8266-modulen er koblet til WiFi-tilgangspunktet (med funksjonen conectado) og prøv å koble til på annen måte (med funksjonen koble_wifi)

    For å vite om den forespurte operasjonen er fullført, kan programmet bruke funksjonen operasjon_ferdig og i så fall sende en annen eller bruke de resulterende dataene som funksjonen brukes til lese_buffer, som returnerer innholdet i bufferen som er fylt med dataene som ankom ESP8266-modulen til operasjonen er fullført, og funksjonen buffer_length som rapporterer mengden av disse dataene som serveren har advart om at de kom til å bli sendt (slik at informasjonen fra selve modulen kan bli diskontert)

    Eksemplet nedenfor bruker HTTP-spørringsbiblioteket med ESP8266 WiFi-modulen for å sende data til serveren (en prosentandel hentet fra lesing av en analog inngang) hvert bestemt tidsintervall. Siden den ikke forventer å motta noe svar, bruker den ikke bufferen og det er nok for at operasjonen skal fullføres riktig. Dette systemet er det jeg bruker i mitt prosjekt for søvnstyringsenhet for å lagre resultatene av sensoravlesningene på serveren.

    Følgende eksempel bruker en HTTP GET-spørring for å spørre serverens tid og synkronisere den med den mikrokontrollerte enhetens tid ved å legge til den estimerte responstiden; Faktisk legger den til ytterligere 4 til 6 sekunder for å sikre at enhetens tid er større enn serverens tid og for enkelt å sjekke om tiden på sanntidsklokken som er en del av enheten er riktig eller har gått tapt på grunn av nedlasting . batteri.

    Etter mange tester har jeg bekreftet at dette systemet av Tidssynkronisering med ESP8266 WiFi-modul Det er nøyaktig nok for mine behov; i verste fall med en feil på under 10 sekunder som er noe irrelevant i mitt tilfelle.

    Som man kan se i koden, er det nødvendig å først spørre etter lengden på bufferen siden lesing tilbakestiller den slik at den er tilgjengelig for å lagre nye data.

    Når innholdet i bufferen er lest, behandles det i dette eksemplet for å få tiden. Først velges teksten mellom klammeparentesene (serveren svarer med kommandoen PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Følgende eksempelprogram, inspirert av en brukers forespørsel, brukes til å finne den offentlige IP-adressen ved å bruke tjenesten Sjekk IP AWS (Amazon Web Services) hvert femte minutt.

    Som i de foregående eksemplene, er det gjort en rekke forutsetninger som må endres avhengig av nettverkskonfigurasjonen som brukes (192.168.1.X, i eksempelet), SSID og WiFi-nøkkelen... Måten å finne IP-adressen er ikke veldig elegant, den antar at den er den siste linjen i svaret på HTTP GET-forespørselen, selv om det kan være et API for å gjøre det på en mer ortodoks måte.


    Her kan du last ned ESP8266-biblioteket for HTTP-spørringer med Arduino Uno (uten konsoll) og herfra kan du last ned ESP8266 HTTP-spørringsbiblioteket for Arduino som bruker en konsoll, det vil si at den trenger å implementere en seriell port ved hjelp av programvare eller bruk som maskinvare, for eksempel et hovedkort arduino mega o arduino leonardo.

    Legg inn kommentar

    Du kan ha gått glipp av