Introduzione alla Programmazione Remota dell’Arduino UNO r3 tramite WiFi con l’ESP8266


Nell’ampio universo dell’IoT e dei sistemi embedded, la capacità di gestire, monitorare e aggiornare i dispositivi da remoto è fondamentale. Questa capacità non solo migliora la flessibilità e la scalabilità delle reti IoT, ma garantisce anche che i dispositivi, una volta implementati sul campo, possano essere gestiti e aggiornati senza interazione fisica.

Programming Arduino UNO via WiFi with ESP8266
Programmazione dell’Arduino UNO tramite WiFi con ESP8266

Questo articolo ti guiderà attraverso la metodologia per programmare in remoto un Arduino UNO utilizzando i moduli ESP8266, concentrandosi in particolare su NodeMCU ed ESP01, utilizzando il firmware ESP-Link. Questo firmware funge da ponte, abilitando la comunicazione WiFi e seriale, cambiando così il modo in cui interagiamo con le schede microcontrollore come l’Arduino UNO tramite ESP8266.

ESP8266: NodeMCU ed ESP01 come ponte WiFi per Arduino UNO

L’ESP8266, disponibile in varie forme come NodeMCU ed ESP01, è diventato un elemento fondamentale nel dominio IoT grazie alla sua economicità e facilità d’uso con l’IDE di Arduino. Sebbene possa funzionare come microcontrollore autonomo con capacità WiFi, nel contesto di questa guida, lo utilizzeremo come ponte WiFi per abilitare la programmazione remota dell’Arduino UNO.

Pinout dell’ESP8266 NodeMCU

NodeMCU è una piattaforma IoT open-source che utilizza il modulo WiFi ESP8266 ed è compatibile con l’IDE di Arduino.

  • VCC: Alimenta il modulo con 3.3V.
  • GND: Pin di massa.
  • D0-D8: Pin GPIO utilizzabili per varie comunicazioni seriali.
  • RX e TX: Comunicazione seriale.
  • RST: Pin di reset.
  • A0: Ingresso analogico.
  • 3V3: Uscita 3.3V.
  • VIN: Ingresso di tensione.
NodeMcu v2.1 low resolution pinout
NodeMcu v2.1 pinout a bassa risoluzione

Pinout dell’ESP8266 ESP01

ESP01 è una variante minimalista dell’ESP8266 con meno pin GPIO ma mantenendo le funzionalità WiFi principali.

  • VCC: Alimentazione a 3.3V.
  • GND: Pin di massa.
  • TX e RX: Comunicazione seriale.
  • CH_PD: Pin di abilitazione.
  • GPIO0 e GPIO2: Pin di input/output generici.
  • RST: Pin di reset.
esp-01s pinout
Pinout dell’esp-01s

Ecco i dispositivi WeMos D1 mini - NodeMCU V2 V2.1 V3 - esp01 - esp01 programmer

Utilizzo del firmware ESP-Link per la programmazione remota di Arduino UNO

Il firmware ESP-Link è progettato per permettere al modulo ESP8266 di fungere da ponte seriale trasparente per qualsiasi microcontrollore, facilitando così il controllo e la comunicazione via WiFi. Questo firmware consente all’ESP8266 di comunicare tramite WiFi e permette la programmazione remota dell’Arduino UNO, fondamentale per gestire e aggiornare dispositivi distribuiti in varie località.

Puoi recuperare l’ultima versione del firmware ESP-LINK da qui. Dopo il download, decomprimilo e scarica il Flash Download Tool da Espressif.

Collegamenti

Per il NodeMCU, è semplice: devi solo collegare l’USB; per l’ESP-01, puoi seguire la guida estesa qui, o provare questi semplici passaggi.

Ottieni un FTDI dal link qui sotto.

Ecco l'FTDI USB to TTL CH340G - USB to TTL FT232RL


Quindi, devi collegare il dispositivo all’ESP-01 in questo modo.

Ora, per programmare, usa il jumper della modalità di programmazione e fai clic sul pulsante di reset.

Flash del dispositivo

Nella cartella del firmware, puoi trovare questi file

File list of the esp-link firmware
Elenco dei file del firmware esp-link

Descrizione dei file

boot_v1.6.bin

Descrizione: Questo è il file del 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 prende il controllo delle operazioni principali del dispositivo. La designazione “user1” indica generalmente che questo è lo spazio di applicazione principale; in alcune configurazioni, potrebbe esistere anche un “user2.bin” per firmware di backup o alternativo.

esp_init_data_default.bin

Descrizione: Questo file contiene i dati di inizializzazione predefiniti per il dispositivo ESP. Viene tipicamente utilizzato per impostare configurazioni di sistema predefinite, inclusi i parametri RF, i parametri WiFi e altri valori correlati all’hardware.

Programmazione dell'Arduino UNO via WiFi con NodeMCU esp8266
Programmazione dell’Arduino UNO via WiFi con NodeMCU esp8266
blank.bin

Descrizione: Questo file è solitamente riempito con dati vuoti (zero) ed è utilizzato per cancellare o resettare specifici settori della memoria flash. Questo è utile quando si aggiorna il firmware o si vuole assicurare 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 modo standard in cui l’SDK esp8266 rileva la dimensione della memoria flash. Ciò significa che devi impostare correttamente questo parametro quando esegui il flash del bootloader. Se usi esptool.py, puoi farlo usando 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 usano queste impostazioni.

IndirizzoNome del fileDimensione (MB)
0x00000boot_v1.6.bin0.5
0x01000user1.bin3.5
0x3FC000esp_init_data_default.bin0.1
0x3FE000blank.bin0.1

Ecco un esempio di un upload 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 usare queste impostazioni.

IndirizzoNome del fileDimensione (MB)
0x00000boot_v1.6.bin0.5
0x01000user1.bin1.8
0x1FC000esp_init_data_default.bin0.1
0x1FE000blank.bin0.1

Indirizzi della memoria flash da 8mbit (1MB)

ESP-01S e alcune versioni di DT-06 utilizzano queste impostazioni.

IndirizzoNome del fileDimensione (MB)
0x00000boot_v1.6.bin0.5
0x01000user1.bin0.9
0xFC000esp_init_data_default.bin0.1
0xFE000blank.bin0.1

Indirizzi della memoria flash da 4mbit (512Kb)

Il DT-06 originale, l’ESP-01 e altri piccoli dispositivi necessitano di queste impostazioni.

IndirizzoNome del fileDimensione (MB)
0x00000boot_v1.6.bin0.5
0x01000user1.bin0.4
0x7C000esp_init_data_default.bin0.1
0x7E000blank.bin0.1

Con il Flash Download Tool, è abbastanza semplice. Quando avvii Flash Download Tool devi selezionare esp8266 e poi iniziare a configurarlo.

Seleziona esp8266 nel Flash Download Tool
Seleziona esp8266 nel Flash Download Tool

Ecco un esempio di configurazione per il NodeMCU

Processo di upload del Flash Download Tool sul NodeMCU
Processo di upload del Flash Download Tool sul 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

Poi, 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 configurare il dispositivo.

Configurazione ESP-LINK

Impostare il firmware ESP-Link sul modulo ESP8266 è un processo semplice, ma per chi non ha familiarità, può sembrare scoraggiante. Il firmware fornisce un’interfaccia user-friendly per configurare l’ESP8266, trasformandolo in un versatile ponte WiFi. La seguente guida passo-passo, accompagnata da screenshot per ogni fase, mira a semplificare questo processo, garantendo una configurazione fluida e senza errori per utenti di tutti i livelli di esperienza.

Connessione alla rete ESP

In questo screenshot, puoi vedere un elenco delle reti WiFi disponibili su un dispositivo. Viene visualizzata in modo prominente la rete ESP_XXXXXX. Questo 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 rete specifica per avviare il processo di configurazione.

Connect to AP ESP-LINK WiFi network
Connessione alla rete WiFi ESP-LINK

Pagina principale di ESP-Link

Accedendo all’indirizzo 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, c’è un messaggio evidente che indica che il dispositivo non può eseguire la scansione mentre è in modalità AP. Questo messaggio serve come promemoria della modalità operativa attuale del dispositivo.

ESP-LINK switch to STA+AP mode
ESP-LINK passaggio alla modalità STA+AP

Navigazione 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 Stazione WiFi è evidenziato, indicando che l’utente ha cliccato o sta per cliccare su di esso per accedere alle impostazioni della stazione WiFi.

ESP-LINK esp8266 hamburger menu on the main page
Menu hamburger di ESP-LINK esp8266 nella pagina principale

Passaggio alla modalità STA+AP

Il focus di questo screenshot è l’interfaccia di configurazione della stazione WiFi. Viene visualizzato un link prominente etichettato Passa alla modalità STA+AP. Questa opzione consente agli utenti di abilitare simultaneamente le modalità Stazione (STA) e Access Point (AP). Si invita l’utente a cliccare su questo link per procedere.

ESP-LINK switch to STA+AP mode
ESP-LINK passaggio alla modalità STA+AP

Selezione di una rete WiFi

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

ESP-LINK select WiFi network to connect in STA mode
ESP-LINK seleziona la rete WiFi per connettersi in modalità STA

Ritorno alla pagina principale con IP DHCP

Dopo 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 è cruciale per i passaggi successivi.

ESP-LINK wait for connection to the network
ESP-LINK in attesa della connessione alla rete

Schermata della stazione WiFi con guida alla connessione

Questo screenshot della schermata della stazione WiFi fornisce agli utenti istruzioni chiare. Un messaggio informa gli utenti 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.

ESP-LINK check the recommendation in WiFi Association
ESP-LINK verifica la raccomandazione nell’Associazione WiFi

Impostazione di un IP statico

L’ultimo screenshot guida gli utenti sull’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 un’opzione per impostare un IP statico. Questa funzione garantisce che il dispositivo avrà sempre lo stesso indirizzo IP, facilitando la connessione in futuro.

ESP-LINK configure a static IP
ESP-LINK configura un IP statico

Assegnazione dei pin

Per i diversi dispositivi, utilizzo configurazioni diverse. Ricorda che il pin utile è il Reset per consentire il processo di programmazione.

Ecco la configurazione per ESP-01.

Configurazione dei pin ESP01 su ESP-LINK
Configurazione dei pin ESP01 su ESP-LINK

Ecco la configurazione per il NodeMCU.

Configurazione dei pin del NodeMCU su ESP-Link
Configurazione dei pin del NodeMCU su ESP-Link

Cablaggio di Arduino per la programmazione remota

Come specificato, rispetto al debug, abbiamo bisogno di un pin aggiuntivo per la programmazione, e deve essere collegato al pin di Reset di Arduino UNO.

Ecco per ESP-01

esp-01 WiFi programmazione Arduino UNO
esp-01 WiFi programmazione Arduino UNO

Ecco per NodeMCU

NodeMCU esp8266 WiFi programmazione e debug Arduino UNO
NodeMCU esp8266 WiFi programmazione e debug Arduino UNO

Ma ricorda che la logica di Arduino UNO è 5V, quindi per applicazioni a lungo termine, è meglio inserire un convertitore di livello logico.

Ecco il convertitore di livello logico che uso Aliexpress

NodeMCU WiFi programmazione e debug Arduino UNO (con convertitore di livello logico)
NodeMCU WiFi programmazione e debug Arduino UNO (con convertitore di livello logico)

Invece del convertitore di livello logico, puoi aggiungere una resistenza da 10k al reset e un divisore di tensione al pin Rx dell’esp8266.

Crea una porta COM virtuale

Ora, abbiamo un’interfaccia che comunica via WiFi con il nostro dispositivo, ma come ci colleghiamo ad essa? Un sistema versatile e bello è generare una porta COM virtuale.

Uno dei programmi più usati è “HW VSP3 – Virtual Serial Port”, che puoi scaricare da questa pagina, scarica quello singolo perché il multi è un prodotto a pagamento.

Dopo il download, installalo.

HW VSP3 Virtual Serial Port: accesso come admin
HW VSP3 Virtual Serial Port: accesso come admin

Fai clic sul pulsante Login e scrivi admin come password.

esp-01 programmazione remota dell'Arduino UNO
esp-01 programmazione remota dell’Arduino UNO

Devi recuperare tutti i parametri dall’interfaccia web ESP-LINK.

ESP-LINK verifica le porte di servizio
ESP-LINK verifica le porte di servizio
Configurazione HW VSP3 porta COM virtuale ESP-LINK esp8266
Configurazione HW VSP3 porta COM virtuale ESP-LINK esp8266

Nella scheda Virtual Serial Port, scegli il numero della porta COM e inserisci l’indirizzo IP e la porta 23. Dopodiché, fai clic sul pulsante Create COM.

Aspetta un momento; se va bene, nel Device Manager, puoi trovare la tua nuova porta.

HW VSP3 Virtual Serial Port: Device Manager
HW VSP3 Virtual Serial Port: Device Manager

Debug e caricamento del codice

Ora, se colleghiamo il nostro Arduino IDE alla porta Serial COM 25, possiamo trasmettere e ricevere i dati seriali via WiFi.

Connessione del monitor seriale di Arduino IDE alla porta COM virtuale di ESP-LINK
Connessione del monitor seriale di Arduino IDE alla porta COM virtuale di ESP-LINK

Ora possiamo provare a caricare il codice, e infine, ecco il risultato.

avrdude: Version 6.3-20190619
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\renzo\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"

         Using Port                    : COM25
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.21s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "C:\Users\renzo\AppData\Local\Temp\arduino\sketches\B3D8EDADAC2319C86E5C9AEF5B5AB344/sketch_oct2a.ino.hex"
avrdude: writing flash (2052 bytes):

Writing | ################################################## | 100% 7.80s

avrdude: 2052 bytes of flash written

avrdude done.  Thank you.


Grazie

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *