Bibliotecă pentru a face interogări HTTP cu un modul WiFi ESP8266 și Arduino

Bibliotecă pentru a face interogări HTTP cu un modul WiFi ESP8266 și Arduino

Bibliotecă pentru a face interogări HTTP cu un modul WiFi ESP8266 și Arduino

O modalitate simplă de a trimite informații către și de la un microcontroler este prin centralizarea acestora pe un server web. Deși nu este o metodă la fel de eficientă precum, de exemplu, accesarea directă a unei baze de date, este suficient de eficientă, mai ales dacă luați în considerare un proiect bazat pe un microcontroler și adăugați avantajele ubicuității (date în cloud) și simplității (este pot fi tratate ca informații text și comenzi).Trimiterea de informații folosind acest sistem poate consta în efectuarea de solicitări HTTP POST și primirea lor prin analizarea conținutului răspunsului la o solicitare HTTP GET.

Cuprins

    El Modul WiFi ESP8266 Este o optiune foarte economica, cu o performanta foarte potrivita pentru utilizarea cu microcontrolere si foarte usor de folosit lucrul cu comenzi AT.

    Pentru a sistematiza utilizarea acestuia cu cereri HTTP, am dezvoltat o bibliotecă mică care susține nevoile proiectului meu de dispozitiv de gestionare a somnului (pe care l-am numit SleepManager), deoarece își bazează infrastructura pe un server web care îi permite să fie extins la un obiect. IoT ca serviciul cloud. Nu este dificil să adăugați alte servicii precum solicitările UDP la bibliotecă, de exemplu, la sincronizare de timp prin NTP deși, așa cum explic în textul legat, nu este critic pentru nevoile mele și o pot rezolva în mod acceptabil cu o solicitare HTTP către o pagină web pregătită în acest scop, așa cum arăt într-un exemplu de utilizare a acestei biblioteci.

    Funcționarea bibliotecii se bazează pe trimiterea de comenzi AT când dispozitivul este disponibil și repetarea acestora (cu o mică întârziere) în caz de eroare, ceea ce este interpretat ca indisponibilitate (cu succes, prin testare) de exemplu din punct de acces WiFi sau serverul fiind consultat.

    Biblioteca profită de faptul că modulul WiFi ESP8266 returnează un cod +IPD ca avertisment de recepție a datelor pentru a umple un mic buffer cu informațiile returnate de server. Pentru proiectul dispozitivului de management al somnului am nevoie să analizez foarte puține date returnate de la server, astfel încât, pentru a economisi, buffer-ul și pointerul care rulează prin el sunt deosebit de mici; Acesta va fi unul dintre primele lucruri pe care va trebui să le schimbați pentru a reutiliza biblioteca pentru a procesa un volum mai mare de date.

    Funcțiile care sunt expuse ca public permit (1) să cunoască starea modulului: dacă este conectat sau nu, dacă sunt date în buffer și cât de mult și dacă modulul ESP8266 a finalizat operația care a fost solicitată ; (2) conectați-vă la un punct de acces WiFi dintr-o rețea cu un server DHCP și (3) faceți solicitări HTTP GET și POST, deși, după cum veți vedea, codul este conceput pentru a facilita adăugarea altora.

    În ceea ce privește funcționarea internă, în primul rând sunt construite două matrice, una cu comenzile AT și alta cu răspunsurile așteptate pentru succes și eroare; Apoi, programul care folosește biblioteca trebuie să apeleze funcția din când în când enviar care se va ocupa de trimiterea comenzilor către modul dacă acestea sunt disponibile și nu sunt ocupate și către funcție recibir care va procesa răspunsurile de la modulul ESP8266 (și de la serverul HTTP prin intermediul acestuia, dacă este cazul)

    Deoarece modulul poate fi deconectat din cauza pierderii semnalului, programul principal poate verifica dacă modulul ESP8266 este conectat la punctul de acces WiFi (cu funcția legat) și încercați să vă conectați altfel (cu funcția connect_wifi)

    Pentru a ști dacă operațiunea solicitată s-a încheiat, programul poate folosi funcția operațiune_terminată și în acest caz trimiteți altul sau utilizați datele rezultate pentru care este utilizată funcția read_buffer, care returnează conținutul buffer-ului care a fost umplut cu datele care au ajuns la modulul ESP8266 până la finalizarea operațiunii și funcția buffer_length care raportează cantitatea acestor date pe care serverul a avertizat-o că urmează să fie trimise (pentru ca informațiile din modul însuși să poată fi reduse)

    Exemplul de mai jos folosește biblioteca de interogări HTTP cu modulul WiFi ESP8266 pentru a trimite date către server (un procent obținut din citirea unei intrări analogice) la fiecare anumit interval de timp. Deoarece nu se așteaptă să primească niciun răspuns, nu folosește bufferul și este suficient ca operația să se termine corect. Acest sistem este ceea ce folosesc în proiectul meu dispozitiv de gestionare a somnului pentru a stoca rezultatele citirilor senzorului pe server.

    Următorul exemplu utilizează o interogare HTTP GET pentru a interoga ora serverului și pentru a o sincroniza cu ora dispozitivului microcontrolat prin adăugarea timpului de răspuns estimat; De fapt, adaugă încă 4 până la 6 secunde pentru a se asigura că timpul dispozitivului este mai mare decât timpul serverului și pentru a verifica cu ușurință dacă ora de pe ceasul în timp real care face parte din dispozitiv este corectă sau s-a pierdut din cauza descărcării . baterie.

    Dupa multe teste am verificat ca acest sistem de Sincronizare oră cu modulul WiFi ESP8266 Este suficient de precis pentru nevoile mele; în cel mai rău caz cu o eroare de mai puțin de 10 secunde, ceea ce este oarecum irelevant în cazul meu.

    După cum se poate vedea în cod, este necesar să interogați mai întâi lungimea buffer-ului, deoarece citirea îl resetează, astfel încât să fie disponibil pentru a stoca date noi.

    Odată ce conținutul buffer-ului a fost citit, în acest exemplu acesta este procesat pentru a obține timpul. Mai întâi, este selectat textul dintre acolade (serverul răspunde folosind comanda PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Următorul exemplu de program, inspirat de interogarea unui utilizator, este utilizat pentru a găsi adresa IP publică folosind serviciul Verificați IP AWS (Amazon Web Services) la fiecare cinci minute.

    Ca și în exemplele anterioare, se fac o serie de ipoteze care vor trebui modificate în funcție de configurația rețelei utilizată (192.168.1.X, în exemplu), SSID-ul și cheia WiFi... Modalitatea de a găsi Adresa IP nu este foarte elegantă, presupune că este ultima linie a răspunsului la cererea HTTP GET, deși poate exista un API care să o facă într-un mod mai ortodox.


    Puteti descărcați biblioteca ESP8266 pentru interogări HTTP cu Arduino Uno (fara consola) si de aici poti descărcați biblioteca de interogări HTTP ESP8266 pentru Arduino care folosește o consolă, adică trebuie să implementeze un port serial prin software sau să folosească ca hardware, de exemplu, o placă de bază arduino mega o arduino leonardo.

    Posteaza un comentariu

    S-ar putea să fi ratat