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.
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.
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.
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
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.
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.
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 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.
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 di 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 Flash Download Tool devi selezionare esp8266 e poi iniziare a configurarlo.
Ecco un esempio di configurazione per il 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.
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.
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.
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.
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.
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.
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.
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.
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.
Ecco la configurazione per il NodeMCU.
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
Ecco per NodeMCU
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
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.
Fai clic sul pulsante Login
e scrivi admin come password.
Devi recuperare tutti i parametri dall’interfaccia web ESP-LINK.
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.
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.
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
- 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