Debug remoto via WiFi su Arduino utilizzando un ESP8266 (NodeMCU e ESP01) con firmware ESP-LINK
Il debugging remoto è una caratteristica essenziale per qualsiasi sistema embedded, compresi i progetti basati su Arduino. Il modulo WiFi ESP8266 ha guadagnato popolarità per tali applicazioni, specialmente quando utilizzato con il firmware ESP-LINK. Questo articolo ha lo scopo di guidarti nell’impostazione di un ambiente di debugging remoto avanzato utilizzando Arduino, ESP8266 (NodeMCU e ESP01) e il firmware ESP-LINK.

Che cos’è il firmware ESP-LINK?
ESP-LINK è un firmware open-source che connette un microcontrollore a Internet utilizzando un modulo WiFi ESP8266. Offre una moltitudine di funzionalità:
- Ponte trasparente tra WiFi e seriale, utile per il debugging o per l’inserimento in un microcontrollore (uC).
- Programmazione flash di microcontrollori Arduino/AVR e altri microcontrollori ARM collegati via WiFi.
- Richieste REST HTTP in uscita dal microcontrollore collegato verso Internet.
- Client MQTT pub/sub dal microcontrollore collegato verso Internet.
- Fornisce pagine web personalizzate contenenti dati estratti dinamicamente dal microcontrollore collegato.
Modulo WiFi
Prima di addentrarci nei dettagli della programmazione del firmware e dell’impostazione del debugging remoto, prendiamoci un momento per esaminare i dispositivi al centro di questo articolo:
esp8266
Per questo test, utilizzo una NodeMCU; in questo caso, il firmware deve essere ESP-LINK, quindi prima di tutto, dobbiamo caricarlo.

Per la versione di produzione, consiglio l’ESP-01 descritto in questo vecchio articolo del sito “Scheda di programmazione per modulo ESP-01“.

Carica il firmware ESP-LINK
Puoi recuperare l’ultima versione del firmware ESP-LINK da qui. Dopo il download, decomprimilo, e scarica il Flash Download Tool da Espressif.
Cablaggio
Per la NodeMCU, è semplice: basta collegare il cavo USB; per l’ESP-01, puoi seguire la guida dettagliata qui, oppure provare questi semplici passaggi.
Procurati un FTDI dal link qui sotto.
Qui il FTDI USB to TTL CH340G - USB to TTL FT232RL
Quindi, devi collegare il dispositivo all’ESP-01 in questo modo.

Ora, per programmare, utilizza il jumper della modalità di programmazione e premi il pulsante di reset.
Flasha il dispositivo
Nella cartella del firmware, puoi trovare questi file

Descrizione dei file
boot_v1.6.bin
Descrizione: Questo è il file bootloader responsabile dell’inizializzazione dell’hardware e del caricamento del firmware principale. È il primo codice che viene eseguito all’avvio del dispositivo. Il numero di versione (v1.7 in questo caso) indica la versione del bootloader.
user1.bin
Descrizione: Questo è il firmware principale dell’applicazione, contenente il codice sorgente compilato e le risorse necessarie per le funzioni specifiche del dispositivo. Viene caricato dal bootloader e gestisce il funzionamento principale del dispositivo. La designazione “user1” indica generalmente che questo è lo spazio applicativo primario; in alcune configurazioni, potrebbe esistere anche un “user2.bin” per backup o firmware alternativo.
esp_init_data_default.bin
Descrizione: Questo file contiene i dati di inizializzazione predefiniti per il dispositivo ESP. Viene tipicamente utilizzato per impostare le configurazioni di sistema di default, inclusi i parametri del modulo RF, le impostazioni Wi-Fi e altri valori relativi all’hardware.
blank.bin
Descrizione: Questo file è solitamente riempito con dati vuoti (zero) ed è usato per cancellare o resettare specifici settori della memoria flash. È utile durante l’aggiornamento del firmware o quando è necessario assicurarsi che non rimangano dati residui in queste aree di memoria.
Il firmware si adatta alla dimensione del chip flash utilizzando le informazioni memorizzate nel settore di avvio (indirizzo 0). Questo è il metodo standard con cui l’SDK dell’esp8266 rileva la dimensione della flash. Ciò significa che devi impostarlo correttamente quando flashi il bootloader. Se usi esptool.py, puoi farlo utilizzando le opzioni -ff e -fs. Vedi la fine di questa pagina per le istruzioni sull’installazione di esptool.py.
Indirizzi della memoria flash da 32mbit (4MB)
Dispositivi come NodeMCU, WeMos D1 mini e altri utilizzano queste impostazioni.
Indirizzo | Nome del file | Dimensione (MB) |
---|---|---|
0x00000 | boot_v1.6.bin | 0.5 |
0x01000 | user1.bin | 3.5 |
0x3FC000 | esp_init_data_default.bin | 0.1 |
0x3FE000 | blank.bin | 0.1 |
Ecco un esempio di
caricamento con esptool.py
:
esptool.py --port /dev/ttyUSB0 --baud 230400 write_flash -fs 32m -ff 80m \
0x00000 boot_v1.6.bin 0x1000 user1.bin \
0x3FC000 esp_init_data_default.bin 0x3FE000 blank.bin
Indirizzi della memoria flash da 16mbit (2MB)
Alcuni dispositivi, come il DT-06 aggiornato, possono utilizzare queste impostazioni.
Indirizzo | Nome del file | Dimensione (MB) |
---|---|---|
0x00000 | boot_v1.6.bin | 0.5 |
0x01000 | user1.bin | 1.8 |
0x1FC000 | esp_init_data_default.bin | 0.1 |
0x1FE000 | blank.bin | 0.1 |
Indirizzi della memoria flash da 8mbit (1MB)
ESP-01S e alcune versioni del DT-06 utilizzano queste impostazioni.
Indirizzo | Nome del file | Dimensione (MB) |
---|---|---|
0x00000 | boot_v1.6.bin | 0.5 |
0x01000 | user1.bin | 0.9 |
0xFC000 | esp_init_data_default.bin | 0.1 |
0xFE000 | blank.bin | 0.1 |
Indirizzi della memoria flash da 4mbit (512Kb)
Il DT-06 originale, l’ESP-01 e altri piccoli dispositivi necessitano di queste impostazioni.
Indirizzo | Nome del file | Dimensione (MB) |
---|---|---|
0x00000 | boot_v1.6.bin | 0.5 |
0x01000 | user1.bin | 0.4 |
0x7C000 | esp_init_data_default.bin | 0.1 |
0x7E000 | blank.bin | 0.1 |
Con il Flash Download Tool è abbastanza semplice. Quando avvii il Flash Download Tool, devi selezionare esp8266 e poi iniziare a configurarlo.

Ecco un esempio di configurazione per la NodeMCU

Prima di tutto, eseguo un ERASE
.
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 115200
Changed.
crc_efuse_4bit: 0
crc_calc_4bit: 6
Successivamente, procedo con il flash.
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 115200
Changed.
NO XMC flash detected!
crc_efuse_4bit: 0
crc_calc_4bit: 6
Flash will be erased from 0x00000000 to 0x00000fff...
Flash will be erased from 0x00001000 to 0x00051fff...
Flash will be erased from 0x003fc000 to 0x003fcfff...
Flash will be erased from 0x003fe000 to 0x0044efff...
Compressed 3856 bytes to 2763...
Compressed 330756 bytes to 244619...
Compressed 128 bytes to 75...
Compressed 330756 bytes to 244619...
is stub and send flash finish
Dopo il reset, possiamo procedere a configurare il dispositivo.
Cablaggio ESP-LINK

Da Arduino UNO a NodeMCU
Prima di tutto, bisogna specificare che questa è la connessione di base solo per il debugging, non per la programmazione, e va considerato che l’Arduino UNO opera a un livello logico di 5V, mentre il NodeMCU a 3,3V.
Per fare ciò, ci servono solamente l’alimentazione e la connessione di Rx e Tx.

In questa configurazione, in caso di trasmissione prolungata, è possibile sovraccaricare l’esp8266, quindi consiglio di utilizzare un semplice partitore di tensione da Tx dell’Arduino UNO a Rx del NodeMCU.

ESP-01 verso Arduino UNO
Schema di connessione simile per l’ESP-01

Qui con partitore di tensione.

Configurazione di ESP-LINK
Configurare il firmware ESP-Link sul modulo ESP8266 è un processo semplice, ma per chi non ha familiarità con esso può sembrare scoraggiante. Il firmware fornisce un’interfaccia utente intuitiva per configurare l’ESP8266, trasformandolo in un versatile ponte WiFi. La seguente guida passo-passo, accompagnata da screenshot per ogni fase, ha lo scopo di semplificare questo processo, garantendo un’impostazione fluida e senza errori per utenti di ogni livello di esperienza.
Connessione alla rete ESP
In questo screenshot, si vede un elenco delle reti WiFi disponibili su un dispositivo. In evidenza compare la rete ESP_XXXXXX. Questa rappresenta la modalità Access Point (AP) dell’ESP8266, che diventa attiva dopo l’installazione del firmware esp-link. Si consiglia all’utente di selezionare questa specifica rete per avviare il processo di configurazione.

Pagina principale di ESP-Link
Accedendo all’IP 192.168.4.1, lo screenshot mostra l’interfaccia principale della pagina esp-link. La parte centrale dello schermo mostra lo stato attuale del WiFi. In alto, compare un messaggio che avverte che il dispositivo non può eseguire la scansione mentre è in modalità AP. Questo messaggio serve da promemoria della modalità operativa attuale del dispositivo.

Navigare alle impostazioni della stazione WiFi
Questo screenshot mostra la pagina principale di esp-link ma con un menu laterale sinistro espanso. Tra le varie opzioni, il link WiFi station è evidenziato, indicando che l’utente ha cliccato o sta per cliccarlo per accedere alle impostazioni della stazione WiFi.

Passaggio alla modalità STA+AP
Lo screenshot si concentra sull’interfaccia di configurazione della WiFi Station. Viene visualizzato un link ben evidente etichettato Switch to STA+AP mode. Questa opzione permette agli utenti di abilitare contemporaneamente sia la modalità Station (STA) che quella Access Point (AP). All’utente viene richiesto di cliccare su questo link per procedere.

Selezione di una rete WiFi
In questa fase, lo screenshot mostra un elenco delle reti WiFi disponibili all’interno della schermata di configurazione della WiFi Station. Gli utenti sono invitati a selezionare la rete di loro preferenza da questo elenco. Accanto a ciascun nome di rete è presente un campo per inserire la password della rete. Dopo aver inserito la password, c’è un pulsante connect per stabilire la connessione.

Ritorno alla pagina principale con IP DHCP
Dopo aver effettuato la connessione a una rete WiFi, lo screenshot riporta l’utente alla pagina principale di esp-link all’indirizzo 192.168.4.1. La modalità AP rimane attiva, ma ora c’è un’informazione aggiuntiva: l’indirizzo IP assegnato dal server DHCP. Questo IP è fondamentale per i passaggi successivi.

Schermata della WiFi Station con indicazioni per la connessione
Questo screenshot della schermata della WiFi Station fornisce agli utenti indicazioni chiare. Un messaggio informa che se il loro dispositivo è sulla stessa rete, dovrebbero navigare direttamente all’indirizzo IP fornito dal DHCP. In caso contrario, il primo passo è connettersi alla rete con l’SSID specificato.

Impostare un IP statico
Lo screenshot finale guida gli utenti nell’impostazione di un IP statico per il loro dispositivo. Dopo essersi connessi tramite l’IP assegnato dal DHCP e aver accesso alle impostazioni della stazione WiFi, gli utenti possono scorrere verso il basso per trovare l’opzione per impostare un IP statico. Questa funzione garantisce che il dispositivo avrà sempre lo stesso indirizzo IP, rendendo più semplice la connessione in futuro.

Carica il codice di test su Arduino
Per questo test, ho scritto un semplice sketch e l’ho caricato su Arduino.
/*
Esempio semplice per testare il debugging remoto via WiFi
Renzo Mischianti <www.mischianti.org>
*/
// la funzione setup viene eseguita una volta quando premi reset o alimenti la scheda
void setup() {
Serial.begin(115200);
while (!Serial) { delay(100); }
Serial.println("Starting all");
// inizializza il pin digitale LED_BUILTIN come output.
pinMode(LED_BUILTIN, OUTPUT);
}
// la funzione loop viene eseguita in loop all'infinito
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // accende il LED (HIGH è il livello di tensione)
Serial.println("LED_BUILTIN, HIGH");
delay(1000); // attende per un secondo
digitalWrite(LED_BUILTIN, LOW); // spegne il LED impostando LOW la tensione
Serial.println("LED_BUILTIN, LOW");
delay(1000); // attende per un secondo
}
Interfaccia web del Serial Monitor
L’interfaccia web di ESP-LINK offre una console pratica per esplorare e interagire con la seriale.

Aggiungi una porta COM virtuale
Il firmware ESP-LINK è uno strumento potente che trasforma un modulo ESP8266 in un ponte WiFi trasparente, consentendo una comunicazione senza interruzioni tra dispositivi. Una delle sue caratteristiche distintive è la capacità di creare una porta COM virtuale, permettendo agli utenti di comunicare con dispositivi seriali su una rete WiFi in remoto. Questa funzionalità è particolarmente preziosa per chi desidera integrare dispositivi seriali tradizionali negli ecosistemi IoT moderni senza i vincoli delle connessioni fisiche.
A questo scopo, utilizzo HW VSP3 (Hardware Virtual Serial Port), una soluzione software che consente di creare e gestire porte COM virtuali sul tuo computer, scaricabile da questa pagina; scarica quella singola perché la versione multi è a pagamento.
Queste porte virtuali possono essere collegate a porte seriali fisiche reali, oppure possono emulare il comportamento di porte che non esistono fisicamente. Ciò è particolarmente utile per lo sviluppo software, i test e il debugging.
Dopo aver scaricato, installalo.

Clicca sul pulsante Login
e inserisci ‘admin’ come password.
Devi recuperare tutti i parametri dall’interfaccia web di ESP-LINK.

In questo caso, la porta che ti interessa è la 23, e ottieni l’IP dalla schermata precedente (se imposti un IP statico, è meglio).

Nella scheda Virtual Serial Port, scegli il numero della porta COM e inserisci l’indirizzo IP e la porta 23. Successivamente, clicca sul pulsante Create COM
.
Attendi un attimo; se tutto è a posto nel Device Manager, potrai trovare la tua nuova porta.

Ora, se colleghiamo il nostro Arduino IDE alla porta COM seriale 25, possiamo trasmettere e ricevere la comunicazione seriale tramite WiFi.

Grazie
- Arduino Programmazione remota/wireless
- BMP280, DHT11 and DHT22, DHT12, Dallas Temperature ds18b20, Thermistor
- Scheda di programmazione ATtiny (ArduinoUNO come ISP)
- Inviare email con esp8266 e Arduino (Libreria v1.x)
- Come usare la scheda SD con esp8266 e Arduino
- Ebyte LoRa E32 per Arduino, esp32 o esp8266 : WOR (wake on radio) del microcontrollore e uno shield per Arduino
- Gestire file JSON con Arduino, esp32 ed esp8266
- Come interfacciare Arduino, esp8266 o esp32 alla seriale RS-485
- Inviare email con allegati (libreria v2.x): Arduino Ethernet
- WebSocket
- Arduino AVR: binario compilato (.hex) da riga di comando o strumenti grafici
- Arduino: memoria SPI flash esterna veloce
- Accelerometro GY-291 ADXL345 i2c spi con interrupt per esp32, esp8266, stm32 e Arduino
- i2c Arduino: come creare una rete, parametri e scanner di indirizzi
- Magnetometro GY-273 QMC5883L clone HMC5883L per Arduino, esp8266 e esp32
- Debug remoto via WiFi di un Arduino con DT-06
- Programmare Arduino UNO da remoto via WiFi con il firmware ESP-Link su DT-06
- Introduzione alla Programmazione Remota dell’Arduino UNO r3 tramite WiFi con l’ESP8266
- Debug remoto via WiFi su Arduino utilizzando un ESP8266 (NodeMCU e ESP01) con firmware ESP-LINK