Sommario:

ESP8266 Comunicazione diretta dei dati: 3 passaggi
ESP8266 Comunicazione diretta dei dati: 3 passaggi

Video: ESP8266 Comunicazione diretta dei dati: 3 passaggi

Video: ESP8266 Comunicazione diretta dei dati: 3 passaggi
Video: SmartPA - Lezione 11: Il trattamento dei dati personali da parte della P.A. 2024, Novembre
Anonim
ESP8266 Comunicazione diretta dei dati
ESP8266 Comunicazione diretta dei dati

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

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
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: