Comunicazione senza fili tramite Wi-Fi.
In questo articolo analizzeremo la connessione Internet delle più diffuse schede con interfaccia Wi-Fi. Possono essere utilizzati per controllare il dispositivo da remoto o per acquisire letture dai sensori su Internet. Diversi moduli ESP-01, ESP-12E e WeMos D1 mini e NodeMCU V2 presentati nell'articolo si basano sul controller ESP8266, il cui utilizzo consente di aggiungere la comunicazione wireless tramite Wi-Fi al proprio dispositivo in modo semplice ed economico. L'ultima scheda di cui parlerò è ESP32 WROOM DevKit v1, costruita sul controller della famiglia ESP32, una versione più avanzata dell'ESP8266.
Un set di moduli basati sul microcircuito ESP8266 (Figura 1).

Figura 1
Moduli basati su ESP8266.
- Funzionamento con comandi AT (nel firmware standard, il modulo Wi-Fi comunica con la scheda di controllo utilizzando "comandi AT" tramite il protocollo UART).
- Modulo Wi-Fi come controller indipendente (tutti i moduli presentati sono molto intelligenti: all'interno del chip è nascosto un intero microcontrollore, che può essere programmato in C++ tramite l'IDE Arduino).
- Tramite scheda Arduino.
- Tramite adattatore USB-seriale.
ESP-01.
ESP-01 è il modulo ESP8266 più popolare. L'antenna PCB fornisce una portata fino a 400 m in spazio aperto (Figura 2).

Figura 2
Alimentazione.
Collegamento delle periferiche.
Due porte I/O (GPIO0, GPIO2) per uso generale.
Pin-out (Figura 3).

Figura 3
Connessione (Figura 4).

Figura 4
ESP-01 USB-Serial
Modalità di programmazione (Figura 5).
Passiamo alla modalità di programmazione (è necessario farlo ogni volta prima di far programmare il modulo):
- Scollegare l'alimentazione dal modulo.
- Collega il pin GPIO0 a GND.
- Collegare il modulo all'alimentazione.

Figura 5
ESP-01 USB-Serial
L'hardware è pronto, passiamo al software in FLProg.
- Seleziona la scheda: New project for the controller->The initial of the project->Standard descriptions of the controllers->ESP8266->Modules->ESP8266 ESP-01 V090 (Figura 6).
- Imposta i dati della connessione Wi-Fi.
- Preparazione dello schema in FLProg.
- Compila e carica lo schizzo sulla scheda.

Figura 6
Per il normale funzionamento del modulo (non per la modalità firmware), scolleghiamo
il pin GPIO0 da GND. Ricolleghiamo l'alimentazione all'ESP-01 (ad esempio, rimuoviamo e reinseriamo l'adattatore).
ESP-12E (Figura 7).

Figura 7
Alimentazione: 3 - 3,6 V.
- 17 porte I/O per uso generale.
- 1 ingresso analogico.

Figura 8
Connessione (Figura 9).

Figura 9
ESP-12E USB-Serial
Modalità di programmazione (Figura 10).
Passiamo alla modalità di programmazione (è necessario farlo ogni volta prima di far programmare il modulo):
- Scollegare l'alimentazione dal modulo.
- Collega il pin GPIO0 a GND.
- Collegare il modulo all'alimentazione.

Figura 10
ESP-12E USB-Serial
L'hardware è pronto, passiamo al software in FLProg.
- Seleziona la scheda: New project for the controller->The initial of the project->Standard descriptions of the controllers->ESP8266->Modules->ESP8266 ESP-12E/Q (Figura 11).
- Imposta i dati della connessione Wi-Fi.
- Preparazione dello schema in FLProg.
- Compila e carica lo schizzo sulla scheda.

Figura 11
Per il normale funzionamento del modulo (non per la modalità firmware), scolleghiamo
il pin GPIO0 da GND. Ricolleghiamo l'alimentazione all'ESP-12E (ad esempio, rimuoviamo e reinseriamo l'adattatore).
WeMos D1mini (Figura 12).

Figura 12
Il modulo WeMos D1 mini è dotato di una interfaccia USB realizzata tramite il convertitore seriale-USB CH340. Dal connettore USB viene anche prelevata l'alimentazione a 5V, un regolatore interno (tipo RT9013) si occupa di generare l'alimentazione a 3,3V per il modulo ESP-12F. Per evitare confusione tutti i pin di I/O sono chiaramente etichettati. Nota: Tutti gli I/O supportano una tensione massima di 3,3V.
Alimentazione: 5 V
Collegamento delle periferiche:
11 I/O digitali, tutti i pin sono provvisti di interrupt e supportano PWM, I2C , UART, SPI.
1 Pin analogico (tensione massima di ingresso 3.2V).
- Uscite di alimentazione: 3,3 V e 5 V.
I2C.
Il collegamento tramite interfaccia I2C può essere utilizzato per connettere fino a 127 nodi tramite un bus che richiede solo due cavi dati, noti come SDA e SCL.
- SDA: D2(GPIO4)
- SCL: D1(GPIO5)
SPI.
Il collegamento SPI è molto più semplice di I2C. Master e slave sono collegati da tre fili di dati, solitamente chiamati MISO, (Master in, Slave out), MOSI (Master out, Slave in) e CLK.
- CLK: D5(GPIO14)
- MISO: D6(GPIO12)
- MOSI: D7(GPIO13)
- SS (CS): D8(GPIO15)
Pin-out (Figura 13).

Figura 13
Pin Funzione ESP-8266 Pin
Programmazione in FLProg.
- Seleziona la scheda: New project for the controller->The initial of the project->Standard descriptions of the controllers->ESP8266->Boards->We-Mos mini (Figura 14).
- Imposta i dati della connessione Wi-Fi.
- Preparazione dello schema in FLProg.
- Compila e carica lo schizzo sulla scheda.

Figura 14
NodeMCU V3 (Figura 15)

Figura 15
Alimentazione: 5 - 10V.
Collegamento delle periferiche:
- 17 GPIO
- SPI
- I2C (implementato nel software)
- I2S si interfaccia con DMA
- UART
- ADC a 10 bit
ESP8266 NodeMCU Pin-out (Figura 16).

Figura 16
Nota: una cosa importante da notare sul NodeMCU è che il numero GPIO non corrisponde all'etichetta sulla serigrafia della scheda. Ad esempio, D0 corrisponde a GPIO16 e D1 corrisponde a GPIO5. Nell'elenco seguente mostra la corrispondenza tra le etichette sulla serigrafia e il numero GPIO, nonché quali pin sono i migliori da utilizzare nei tuoi progetti e a quali devi prestare attenzione.
I pin evidenziati in verde sono OK da usare. Quelli evidenziati in giallo sono OK da usare, ma bisogna prestare attenzione perché potrebbero avere comportamenti inaspettati, soprattutto all'avvio. Si sconsiglia l'uso dei pin evidenziati in rosso come ingressi o uscite.
- D0 - GPIO16, Input - Nessun interrupt, Output - Nessun supporto PWM o I2C. Nota: a livello logico alto all'avvio e utilizzato per riattivarsi dalla modalità di sospensione.
- D1 - GPIO5, Input - OK, Output - OK. Nota: spesso utilizzato come SCL (I2C).
- D2 - GPIO4, Input - OK, Output - OK Nota: spesso utilizzato come SDA (I2C).
- D3 - GPIO0, Input - pulled up, Output - OK. Nota: collegato al pulsante FLASH, l'avvio non riesce se portato a livello logico basso.
- D4 - GPIO2, Input - pulled up, Output - OK. Nota: a livello logico alto all'avvio collegato al LED integrato, l'avvio non riesce se portato a livello logico basso.
- D5 - GPIO14, Input - OK, Output - OK. Nota: SPI (SCLK).
- D6 - GPIO12, Input - OK, Output - OK. Nota: SPI (MISO).
- D7 - GPIO13, input - OK, Output - OK. Nota: SPI (MOSI).
- D8 - GPIO15, Input - portato a livello logico basso(CND), Output - OK Nota: SPI (CS), l'avvio non riesce se portato a livello logico alto.
- RX - GPIO3, Input - OK, Output - RX pin. Nota: a livello logico alto all'avvio.
- TX - GPIO1, Input - Pin TX, Output - OK. Nota: a livello logico alto all'output di debug all'avvio, l'avvio non riesce se portato a livello logico basso.
- A0 - ADC0, Input - Analog Input, Output - X.
I GPIO collegati al Chip Flash.
Da GPIO6 a GPIO11 sono solitamente collegati al chip flash nelle schede ESP8266. Non è consigliabile utilizzare questi pin.
Pin utilizzati durante l'avvio.
È possibile impedire l'avvio del NodeMCU se alcuni pin vengono spostati a livello logico basso o alto. L'elenco seguente mostra lo stato dei seguenti pin all'avvio:
- GPIO16: il pin è a livello logico alto all'avvio.
- GPIO0: errore di avvio se portato a livello logico basso.
- GPIO2: il pin è a livello logico alto all'avvio, errore di avvio se portato a livello logico basso.
- GPIO15: errore di avvio se portato a livello logico alto.
- GPIO3: il pin è a livello logico alto all'avvio.
- GPIO1: il pin è a livello logico alto all'avvio, errore di avvio se portato a livello logico basso.
- GPIO10: il pin è a livello logico alto all'avvio.
- GPIO9: il pin è a livello logico alto all'avvio.
Pin su un livello logico alto all'avvio.
Ci sono alcuni pin che emettono un segnale da 3,3 V all'avvio del NodeMCU. Ciò potrebbe essere problematico se si dispone di relè o altre periferiche collegate a tali GPIO. I seguenti GPIO emettono un segnale logico alto all'avvio:
- GPIO16
- GPIO3
- GPIO1
- GPIO10
- GPIO9
Ingresso analogico.
Il NodeMCU supporta solo la lettura analogica in un GPIO. Quel GPIO si chiama ADC0 e solitamente è contrassegnato sulla serigrafia come A0. La tensione di ingresso massima del pin ADC0 è compresa tra 0 e 1 V se si utilizza il chip ESP8266. Se utilizzi una scheda di sviluppo come il kit NodeMCU ESP8266-12E, l'intervallo di tensione in ingresso è compreso tra 0 e 3,3 V poiché queste schede contengono un partitore di tensione interno.
LED di bordo.
La maggior parte delle schede di sviluppo ESP8266 hanno un LED integrato. Questo LED è solitamente collegato a GPIO2. Il LED è collegato a un resistore pull-down, quindi quando invii un segnale di livello logico alto, il LED si spegne.
Pin RST.
Quando il pin RST viene portato a livello logico basso, ESP8266 si ripristina. Equivale a premere il pulsante RESET integrato.
GPIO0.
Quando GPIO0 viene portato a livello logico basso, imposta il ESP8266 in modalità boot-loader. Equivale a premere il pulsante FLASH/BOOT integrato.
GPIO16.
GPIO16 può essere utilizzato per riattivare il ESP8266 dalla modalità di sospensione. Per riattivare il ESP8266 dalla modalità di sospensione, GPIO16 deve essere collegato al pin RST.
I2C.
L'ESP8266 non dispone di pin I2C hardware, ma può essere implementato nel software. Quindi puoi utilizzare qualsiasi GPIO come I2C. Solitamente, come pin I2C vengono utilizzati i seguenti GPIO:
- GPIO5: SCL
- GPIO4: SDA
SPI.
I pin utilizzati come SPI nell'ESP8266 sono:
- GPIO12: MISO
- GPIO13:MOSI
- GPIO14: SCL
- CGPIO15:CS
Pin PWM.
ESP8266 consente la PWM software in tutti i pin I/O: da GPIO0 a GPIO16. I segnali PWM su ESP8266 hanno una risoluzione di 10 bit.
Interrupt Pins.
L'ESP8266 supporta gli interrupt in qualsiasi GPIO, tranne GPIO16.
Programmazione in FLProg.
- Seleziona la scheda: New project for the controller->The initial of the project->Standard descriptions of the controllers->ESP8266->Boards->ESP8266 NodeMcu v3 (Figura 17).
- Imposta i dati della connessione Wi-Fi.
- Preparazione dello schema in FLProg.
- Compila e carica lo schizzo sulla scheda.

Figura 17
ESP32 WROOM DevKit v1 (Figura 18).

Figura 18
Alimentazione.
Periferiche ESP32:
- 18 canali del convertitore analogico-digitale (ADC).
- 3 interfacce SPI.
- 3 interfacce UART.
- 2 interfacce I2C.
- 16 canali di uscita PWM.
- 2 convertitori digitale-analogico (DAC).
- 2 interfacce I2S.
- 10 GPIO con rilevamento capacitivo.

Figura 19
Inoltre, ci sono pin con caratteristiche specifiche che le rendono adatte o meno per un particolare progetto. Nell'elenco seguente mostra quali pin è meglio utilizzare come ingressi, uscite e quali è necessario prestare attenzione.
I pin evidenziati in verde sono OK da usare. Quelli evidenziati in giallo sono OK da utilizzare, ma è necessario prestare attenzione perché potrebbero avere un comportamento inaspettato soprattutto all'avvio. Si sconsiglia l'uso dei pin evidenziati in rosso come ingressi o uscite.
- GPIO1 - TXD: Input - Pin TX, Output - OK. Nota: eseguire il debug dell'output all'avvio.
- GPIO2 - D2: Input - OK, Output - OK. Nota: collegato al LED integrato, deve essere lasciato flottante o portato a livello logico basso per accedere alla modalità programmazione.
- GPIO3 - RXD: Input - OK, Output - Pin RX. Nota: a livello logico alto all'avvio.
- GPIO4 - D4: Input - OK, Output - OK.
- GPIO5 - D5: Input - OK, Output - OK. Nota: emette il segnale PWM all'avvio, pin di fissaggio.
- GPIO12 - D12: Input - OK, Output - OK. Nota: l'avvio non riesce se portato a livello logico alto, pin di fissaggio.
- GPIO13 - D13: Input - OK, Output - OK.
- GPIO14 - D14: Input - OK, Output - OK. Nota: emette il segnale PWM all'avvio.
- GPIO15 - D15: Input - OK, Output - OK. Nota: emette il segnale PWM all'avvio.
- GPIO16 - D16: Input - OK, Output - OK.
- GPIO17 - D17: Input - OK, Output - OK.
- GPIO18 - D18: Input - OK, Output - OK.
- GPIO19 - D19: Input - OK, Output - OK.
- GPIO21 - D21: Input - OK, Output - OK.
- GPIO22 - D22: Input - OK, Output - OK.
- GPIO23 - D23: Input - OK, Output - OK.
- GPIO25 - D25: Input - OK, Output - OK.
- GPIO26 - D26: Input - OK, Output - OK.
- GPIO27 - D27: Input - OK, Output - OK.
- GPIO32 - D32: Input - OK, Output - OK.
- GPIO33 - D33: Input - OK, Output - OK.
- GPIO34 - D34: Input - OK. Nota: solo input.
- GPIO35 - D35: Input - OK. Nota: solo input.
- GPIO36 - VP: Input - OK. Nota: solo input.
- GPIO39 - VN: Input - OK. Nota: solo input.
Pin di solo input.
I GPIO da 34 a 39 sono GPI: pin di solo input. Questi pin non hanno resistenze interne di pull-up o pull-down. Non possono essere utilizzati come uscite, quindi utilizza questi pin solo come input.
- GPIO34
- GPIO35
- GPIO36
- GPIO39
GPIO tattili capacitivi.
- T0 (GPIO4)
- T1 (GPIO0)
- T2 (GPIO2)
- T3 (GPIO15)
- T4 (GPIO13)
- T5 (GPIO12)
- T6 (GPIO14)
- T7 (GPIO27)
- T8 (GPIO33)
- T9 (GPIO32)
Convertitore analogico-digitale (ADC).
- ADC1_CH0 (GPIO 36)
- ADC1_CH1 (GPIO 37)
- ADC1_CH2 (GPIO 38)
- ADC1_CH3 (GPIO 39)
- ADC1_CH4 (GPIO 32)
- ADC1_CH5 (GPIO 33)
- ADC1_CH6 (GPIO 34)
- ADC1_CH7 (GPIO 35)
- ADC2_CH0 (GPIO 4)
- ADC2_CH1 (GPIO 0)
- ADC2_CH2 (GPIO 2)
- ADC2_CH3 (GPIO 15)
- ADC2_CH4 (GPIO 13)
- ADC2_CH5 (GPIO 12)
- ADC2_CH6 (GPIO 14)
- ADC2_CH7 (GPIO 27)
- ADC2_CH8 (GPIO 25)
- ADC2_CH9 (GPIO 26)
Convertitore digitale-analogico (DAC).
- DAC1 (GPIO25)
- DAC2 (GPIO26)
PWM.
I2C.
- GPIO 21 (SDA)
- GPIO 22 (SCL)
SPI.
- GPIO23 (MOSI)
- GPIO19 (MISO)
- GPIO18 (CLK)
- GPIO5 (CS)
Interrupt.
Abilita (EN).
Corrente assorbita per GPIO.
Sensore effetto Hall integrato ESP32.
L'ESP32 dispone anche di un sensore ad effetto Hall integrato che rileva i cambiamenti nel campo magnetico nell'ambiente circostante.
Programmazione in FLProg.
- Seleziona la scheda: New project for the controller->The initial of the project->Standard descriptions of the controllers->ESP32->Boards->ESP32 WROOM DEVKIT V1 (Figura 20).
- Imposta i dati della connessione Wi-Fi.
- Preparazione dello schema in FLProg.
- Compila e carica lo schizzo sulla scheda.

Figura 20