Libreria per effettuare query HTTP con un modulo WiFi ESP8266 e Arduino

Libreria per effettuare query HTTP con un modulo WiFi ESP8266 e Arduino

Libreria per effettuare query HTTP con un modulo WiFi ESP8266 e Arduino

Un modo semplice per inviare informazioni da e verso un microcontrollore è centralizzarlo su un server web. Sebbene non sia un metodo efficiente come, ad esempio, l’accesso diretto a un database, è abbastanza efficace, soprattutto se si considera un progetto basato su un microcontrollore, e si aggiungono i vantaggi dell’ubiquità (dati nel cloud) e della semplicità (è possono essere gestiti come informazioni di testo e ordini). L'invio di informazioni utilizzando questo sistema può consistere nell'effettuare richieste HTTP POST e riceverle analizzando il contenuto della risposta a una richiesta HTTP GET.

Sommario

    El Modulo Wi-Fi ESP8266 È un'opzione molto economica, con prestazioni molto adatte all'uso con microcontrollori e molto facile da usare lavorando con i comandi AT.

    Per sistematizzare il suo utilizzo con le richieste HTTP, ho sviluppato una piccola libreria che supporta le esigenze del mio progetto di dispositivo per la gestione del sonno (che ho chiamato SleepManager) poiché basa la sua infrastruttura su un server web che ne permette l'estensione ad un oggetto. IoT come servizio cloud. Non è difficile aggiungere altri servizi alla biblioteca, come ad esempio le richieste UDP sincronizzazione dell'ora tramite NTP anche se, come spiego nel testo collegato, non è fondamentale per le mie esigenze e posso risolverlo accettabilmente con una richiesta HTTP a una pagina web preparata a tale scopo, come mostro in un esempio di utilizzo di questa libreria.

    Il funzionamento della libreria si basa sull'invio di comandi AT quando il dispositivo è disponibile e sulla loro ripetizione (con un piccolo ritardo) in caso di errore, interpretato come non disponibilità (con successo, mediante test) ad esempio da un punto di accesso WiFi o server consultato.

    La libreria sfrutta il fatto che il modulo WiFi ESP8266 restituisce un codice +IPD come avviso di ricezione dati per riempire un piccolo buffer con le informazioni restituite dal server. Per il progetto del dispositivo di gestione del sonno ho bisogno di analizzare pochissimi dati restituiti dal server quindi, per risparmiare, il buffer ed il puntatore che lo percorre sono particolarmente piccoli; Questa sarà una delle prime cose che dovrai modificare per riutilizzare la libreria per elaborare un volume maggiore di dati.

    Le funzioni esposte come pubbliche permettono (1) di conoscere lo stato del modulo: se è connesso o meno, se ci sono dati nel buffer e quanto e se il modulo ESP8266 ha completato l'operazione richiesta; (2) connettersi a un punto di accesso WiFi su una rete con un server DHCP e (3) effettuare richieste HTTP GET e POST anche se, come vedrai, il codice è progettato per rendere molto semplice l'aggiunta di altri.

    Per quanto riguarda il funzionamento interno, innanzitutto vengono costruite due matrici, una con gli ordini AT e un'altra con le risposte attese di successo ed errore; Quindi, il programma che utilizza la libreria deve chiamare di tanto in tanto la funzione inviare che si occuperà di inviare gli ordini al modulo se disponibili e non occupati e alla funzione ricevere che elaborerà le risposte dal modulo ESP8266 (e dal server HTTP attraverso di esso, se applicabile)

    Poiché esiste la possibilità che il modulo venga disconnesso a causa della perdita di segnale, il programma principale può verificare se il modulo ESP8266 è connesso al punto di accesso WiFi (con la funzione collegato) e provare a connettersi altrimenti (con la funzione connect_wifi)

    Per sapere se l'operazione richiesta è terminata il programma può utilizzare l'apposita funzione operazione_finita e in tal caso inviarne un altro o utilizzare i dati risultanti per i quali viene utilizzata la funzione read_buffer, che restituisce il contenuto del buffer che è stato riempito con i dati arrivati ​​al modulo ESP8266 fino al completamento dell'operazione, e la funzione lunghezza_buffer che riporta la quantità di questi dati che il server ha avvisato che sarebbero stati inviati (in modo che le informazioni provenienti dal modulo stesso possano essere scontate)

    L'esempio seguente utilizza la libreria di query HTTP con il modulo WiFi ESP8266 per inviare dati al server (una percentuale ottenuta dalla lettura di un ingresso analogico) ogni determinato intervallo di tempo. Poiché non prevede di ricevere alcuna risposta, non utilizza il buffer ed è sufficiente affinché l'operazione si concluda correttamente. Questo sistema è quello che utilizzo nel progetto del mio dispositivo di gestione del sonno per memorizzare i risultati delle letture dei sensori sul server.

    L'esempio seguente utilizza una query HTTP GET per interrogare l'ora del server e sincronizzarla con l'ora del dispositivo microcontrollato aggiungendo il tempo di risposta stimato; Infatti aggiunge altri 4-6 secondi per garantire che l'ora del dispositivo sia maggiore dell'ora del server e per verificare facilmente se l'ora dell'orologio in tempo reale che fa parte del dispositivo è corretta o è andata persa a causa del download . batteria.

    Dopo molti test ho verificato che questo sistema di Sincronizzazione dell'ora con modulo WiFi ESP8266 È abbastanza preciso per le mie esigenze; nel peggiore dei casi con un errore inferiore a 10 secondi che nel mio caso è alquanto irrilevante.

    Come si può vedere nel codice, è necessario prima interrogare la lunghezza del buffer poiché la lettura lo reimposta in modo che sia disponibile per memorizzare nuovi dati.

    Una volta letto il contenuto del buffer, in questo esempio viene elaborato per ottenere l'ora. Per prima cosa viene selezionato il testo tra parentesi graffe (il server risponde utilizzando il comando PHP echo “{“.time()”.}”) lo trasforma in un “oggetto tempo” e ne ricava la data e l'ora in formato umano.

    Il seguente programma di esempio, ispirato alla query di un utente, viene utilizzato per trovare l'indirizzo IP pubblico utilizzando il servizio ControllaIP AWS (Amazon Web Services) ogni cinque minuti.

    Come negli esempi precedenti, si fanno una serie di presupposti che dovranno essere modificati a seconda della configurazione di rete utilizzata (192.168.1.X, nell'esempio), dell'SSID e della chiave WiFi... Il modo per trovare il L'indirizzo IP non è molto elegante, presuppone che sia l'ultima riga della risposta alla richiesta HTTP GET anche se potrebbe esserci un'API per farlo in modo più ortodosso.


    si può scaricare la libreria ESP8266 per query HTTP con Arduino Uno (senza console) e da qui puoi scarica la libreria di query HTTP ESP8266 per Arduino che utilizza una console, cioè ha bisogno di implementare una porta seriale via software o utilizzare come hardware, ad esempio, una scheda madre Arduino Mega o Arduino Leonardo.

    Invia commento

    Potresti aver perso