Sommario:
Video: ESP8266 Comunicazione diretta dei dati: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
introduzione
Pur avendo realizzato alcuni progetti con Arduinos e moduli nRF24l01, mi chiedevo se potevo risparmiare un po' di fatica utilizzando invece un modulo ESP8266. Il vantaggio del modulo ESP8266 è che contiene un micro controller a bordo, quindi non è necessaria alcuna scheda Arduino aggiuntiva. Inoltre, la dimensione della memoria dell'ESP8266 è molto più grande e per quanto riguarda la velocità, l'ESP8266 funziona a un massimo di 160 MHz invece dei 16 MHz di Arduino. Naturalmente ci sono alcuni lati negativi.
L'ESP8266 funziona solo a 3,3 V, ha meno pin e mancano i bei ingressi analogici di Arduino (ne ha uno, ma solo per 1,0 V e non per 3,3 V). Inoltre ci sono molti altri esempi di codice per Arduino + nRF24l01 poi ci sono per ESP8266, specialmente quando si tratta di trasferimento diretto dei dati.
Quindi, con un progetto in mente, ho esaminato l'argomento del trasferimento dati veloce e leggero tra due ESP8266 senza tutte le cose WWW e
Durante la ricerca di esempi su Internet (la maggior parte del codice seguente è stato prelevato dalla rete in vari punti) mi sono imbattuto in molte domande su come implementare un trasferimento diretto di dati senza i bei esempi "fai così". C'era del codice di esempio, ma principalmente con la domanda perché non funzionava.
Quindi, dopo aver letto e cercato di capire, ho creato gli esempi seguenti che consentono il trasferimento rapido e semplice di dati tra due ESP8266.
Passaggio 1: confini e sfondi (TCP Vs. UDP)
Per arrivarci bisogna chiarire alcuni confini rispetto al nRF24l01.
Per utilizzare ESP8266 all'interno dell'ambiente Arduino, la libreria di base da utilizzare è ESP8266WiFi.h. Potrebbero essere diversi, ma la maggior parte degli esempi usa quelli menzionati sopra. Quando lo usi, devi portare la tua comunicazione a livello WiFi.
Quindi, per comunicare ci deve essere almeno un punto di accesso (AP) / server e un client. L'AP fornisce il nome della rete e gli indirizzi IP e il client si connetterà a questo server.
Quindi, rispetto al nRF24l01, dove il codice ad entrambe le estremità è più o meno lo stesso (ad eccezione dei canali di trasmissione), il codice dell'ESP8266 è fondamentalmente diverso, poiché uno è configurato come AP e l'altro come client.
Il prossimo argomento è che invece di inviare solo alcuni byte al nRF24l01, per i protocolli di trasferimento ESP8266 devono essere osservati.
Ci sono due protocolli comunemente usati: TCP e UDP.
Il TCP (Transmission Control Protocol) è un protocollo che consente una trasmissione senza perdite tra un server e un client. Il protocollo incorpora "handshake" (molti flag e conferme inviati tra entrambe le parti) e numerazione e rilevamento dei pacchetti per identificare e ritrasmettere i pacchetti persi. Inoltre, utilizzando tutti questi handshake, il protocollo impedisce la perdita di dati a causa di molti pacchetti inviati contemporaneamente nella rete. I pacchetti di dati attendono di essere ricevuti.
All'UDP (User Datagram Protocol) mancano tutti gli handshake, la numerazione dei pacchetti e la ritrasmissione. Il suo sovraccarico è quindi più piccolo e non c'è bisogno di tutte le strette di mano per mantenere una connessione. UDP incorpora un rilevamento di errori di base, ma nessuna correzione (il pacchetto danneggiato viene semplicemente eliminato). I dati vengono inviati, senza sapere se la parte ricevente è libera di ricevere i dati. Allo stesso tempo, più pacchetti possono entrare in collisione, poiché ciascuna parte invia i dati ogni volta che è necessario. Omettendo tutte le strette di mano, c'è una bella funzionalità aggiuntiva di UDP chiamata "multicast" e "broadcast". Nel caso "multicast" i pacchetti di dati vengono inviati a un gruppo predefinito di membri, in un "broadcast" i pacchetti di dati vengono inviati a tutti i membri collegati. Ciò riduce notevolmente il trasferimento di dati in caso di flussi che devono essere ricevuti da più membri (ad esempio inviando un feed video a più ricevitori o inviando l'ora corrente a più dispositivi collegati).
Ci sono alcuni buoni video su Youtube che lo spiegano ancora meglio.
Quindi, quando si inviano dati, è importante conoscere le proprie esigenze:
- dati non corrotti, gestione di più peer tramite handshake → TCP
- dati in tempo reale, connessione veloce → UDP
Ho iniziato con l'implementazione di una comunicazione basata su TCP (tra un Server e un Client). Durante il test, ho avuto problemi di stallo nella trasmissione. All'inizio i dati venivano scambiati velocemente, poi dopo un po' la velocità calava drasticamente. Ho concluso che questo era un problema tipico dell'approccio TCP (che era sbagliato!), quindi sono passato a una soluzione basata su UDP. Alla fine mi sono avvicinato entrambi al lavoro. Quindi entrambe le soluzioni saranno fornite.
Gli schizzi seguenti hanno in comune per TCP e UDP che:
- sono indipendenti da qualsiasi rete WiFi esistente. Quindi funzionerà ovunque, lontano da Internet e dai router connessi.
- stanno inviando dati ASCII da stampare tramite il monitor seriale.
- inviano dati ottenuti dalla funzione millis(), per analizzare la velocità di trasmissione.
- non sono testati per più client (a causa dell'hardware per configurare la rete in questo momento)
Passaggio 2: hardware
Per testare l'intera configurazione ho usato due moduli ESP8266. Un modulo è un adattatore ESP-01 + USB-to-UART. L'altro modulo è un modulo basato su ESP-12 che incorpora la connessione USB, il regolatore di tensione e alcune cose divertenti come interruttori, LDR e LED multicolore.
Il modulo USB-to-UART per ESP-01 doveva essere modificato un po' per poterlo utilizzare come programmatore (sempre Youtube di Csongor Varga).
Per eseguire gli schizzi, è necessario installare le librerie ESP8266 (come descritto in molti punti su Internet). In entrambi i casi (TCP e UDP) c'è un server e uno schizzo client ciascuno. Quale schizzo è caricato su quale modulo non ha importanza.
Ringraziamenti
Come accennato, gli schizzi sono basati su molti frammenti che ho trovato sul web. Non ricordo più dove ho trovato cosa, e qual è il codice originale o cosa ho cambiato. Quindi volevo solo ringraziare la grande comunità in generale là fuori per aver pubblicato tutti i grandi esempi.
Passaggio 3: gli schizzi
Il Codice consiste di due sketch ciascuno (come spiegato), uno sketch del server e uno sketch del client, ciascuno per TCP e UDP.
Consigliato:
Visualizzazione dei dati da Magicbit in AWS: 5 passaggi
Visualizzazione dei dati da Magicbit in AWS: i dati raccolti dai sensori collegati a Magicbit verranno pubblicati su AWS IOT core tramite MQTT per essere visualizzati graficamente in tempo reale. Stiamo usando magicbit come scheda di sviluppo in questo progetto basato su ESP32. Pertanto qualsiasi ESP32 d
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): 3 passaggi
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): a tutti noi piace giocare con la nostra funzione P…lotter nell'IDE di Arduino. Tuttavia, sebbene possa essere utile per le applicazioni di base, i dati vengono cancellati man mano che più si aggiungono punti e non è particolarmente gradevole alla vista. Il plotter Arduino IDE non
Smart Watchz con rilevamento dei sintomi della corona e registrazione dei dati: 10 passaggi
Smart Watchz con rilevamento dei sintomi della corona e registrazione dei dati: questo è uno smartwatch con rilevamento dei sintomi della corona che utilizza LM35 e accelerometro con registrazione dei dati sul server. Rtc viene utilizzato per mostrare l'ora e sincronizzarsi con il telefono e utilizzarlo per la registrazione dei dati. Esp32 è usato come un cervello con controller corteccia con Blue
Pull e visualizzazione ambientale dei dati da qualsiasi sito Web tramite Wi-Fi (indicatore dell'aurora boreale) con NodeMcu: 6 passaggi
Pull e visualizzazione ambientale dei dati da qualsiasi sito Web tramite Wi-Fi (indicatore dell'aurora boreale) con NodeMcu: la mia motivazione: ho visto MOLTE istruzioni sull'impostazione / utilizzo di un NodeMCU (costruito sul modulo ESP8266) per realizzare progetti IoT (internet delle cose) . Tuttavia, pochissimi di questi tutorial avevano tutti i dettagli/il codice/i diagrammi per un principiante
Come misurare correttamente il consumo energetico dei moduli di comunicazione wireless nell'era del basso consumo energetico?: 6 passaggi
Come misurare correttamente il consumo energetico dei moduli di comunicazione wireless nell'era del basso consumo energetico?: Il basso consumo energetico è un concetto estremamente importante nell'Internet delle cose. La maggior parte dei nodi IoT deve essere alimentata da batterie. Solo misurando correttamente il consumo energetico del modulo wireless possiamo stimare con precisione quanta batteria ho