Programmare Arduino in Wi-Fi tramite ESP8266 (ESP-01 come programmatore remoto OTA)

ESP-01 con ESP-LINK come programmatore Wi-Fi remoto (OTA)

Questa guida nasce dall’esigenza di programmare l’Arduino in Wi-Fi (Over The Air) utilizzando l’Arduino IDE ed un modulo ESP-01.

Questo articolo contiene esempi solo per Windows, poiché gli utenti Linux hanno buoni esempi e documentazione nativi.

1. Collegare il modulo ESP module al convertitore USB-UART

Prima di tutto abbiamo bisogno della scheda ESP8266, io ho provato con un ESP-01 che è il più economico, con 8Mb (1MB) e un convertitore USB-UART (CH340). L’USB-UART deve funzionare a 3.3V!

Normalmente l’USB-UART ha un’alimentazione a 3,3 V a bassissima corrente. Quindi abbiamo bisogno di un alimentatore da 3,3 V o di un regolatore di tensione a 3,3 V. Si può usare un LM1117-33, da 0,5 A che è più che sufficiente.

ESP-01 pins

 

Collegare l’ESP all’UART

Se non ha RTS e DTR potete continuare utilizzando uno switch per effettuare il reset in manuale.

Basta collegare GPIO0 a GND e RST (EXT_RSBT) allo switch connesso a GND oppure come da schema seguente, con resistori da 10K.

Quindi accendere l’ESP. Questo dovrebbe accendere il LED rosso e potrebbe iniziare a lampeggiare anche il LED blu, che dipende dal firmware corrente presente all’interno dell’ESP.
Proviamo a flashare il nuovo firmware.

2. Preparazione per flashare ESP-LINK

Il firmware è possibile scaricarlo dai seguenti link ESP-LINK v.3  (o qui v.3 o qui v.2).

Possiamo flashare il firmware con il tool ESP8266Flasher (o qui).

Scaricare il tool, avviarlo, settare la porta COM del convertitore USB-UART e selezionare i 4 file e gli indirizzi da Flashare:

Gli indirizzi dell’ESP8266 dipendono dalla board e quindi dalla grandezza della memoria interna.

Guarda un approfondimento su https://github.com/jeelabs/esp-link/blob/master/FLASHING.md

32Mbit / 4Mbyte module
0x00000 boot_v1.6.bin
0x1000 user1.bin
0x3FC000 esp_init_data_default.bin
0x3FE000 blank.bin

4Mbit / 512Kbyte module
0x00000 boot_v1.6.bin
0x1000 user1.bin
0x7C000 esp_init_data_default.bin
0x7E000 blank.bin

For 8Mbit / 1MByte module
0x00000 boot_v1.6.bin
0x1000 user1.bin
0xFC000 esp_init_data_default.bin
0xFE000 blank.bin

Premere il tasto Flash e fare un reset manuale se si usa lo switch di reset.

Dopo il corretto flash del nuovo firmware, provare a cercare una rete Wi-Fi simile a ESP_0E4E5E e collegarsi.

3. Collegare il modulo ESP-01 e Arduino

Dopo essersi collegarti alla rete Wi-Fi sopra mensionata, andare su http://192.168.4.1/

Adesso è possibile scegliere se connettere l’ESP-LINK alla propria rete Wi-Fi o utilizzare l’ESP come punto di accesso (AP).

Nella home page impostare la scheda ESP utilizzata in modo da assegnare i corretti pin e premere “Change!”

In realtà dobbiamo collegare solo pochi pin:

ESP           Arduino
RX          –    TX
TX          –    RX
GPIO0    –  Reset
GND.     –    GND

Ma quando Arduino funziona con livelli a 5 V, ti consiglio di utilizzare il partitore di tensione sul pin ESP RX (vedi filo blu).

È possibile utilizzare resistori da 2-50K Ohm su entrambi i lati. La resistenza deve essere circa uguale su entrambi i lati per una divisione a metà della tensione, 5 V / 2 = 2,5 V che è intorno a 3V 🙂 ed è il livello alto per l’ESP.

Inoltre collegare la resistenza pullup (10K Ohm) al pin di reset di Arduino e + 3.3V. Questo impedisce i 5V accidentali al pin ESP GPOI0.

Ora dobbiamo aggiungere un programmatore personalizzato all’IDE di Arduino

Aprire c:\Program Files (x86)\Arduino\hardware\arduino\avr\programmers.txt e aggiungere la seguente parte:

####################
#ESP-LINK
esp-link.name=ESP-Link
esp-link.communication=serial
esp-link.protocol=arduino
esp-link.program.protocol=arduino
esp-link.program.tool=avrdude
esp-link.program.extra_params=-Pnet:ESP-01-LINK:2323 -DV

Modificare il file di hosts nel sistema per risolvere il nome “ESP-01-LINK” con l’indirizzo IP del vostro ESP-LINK
C:\Windows\System32\drivers\etc\hosts

192.168.0.100 ESP-01-LINK

Andare su ESP-LINK tramite il browser web. Andare sulla pagina della Console del uC e settare il Baudrate a 115200 o la velocità che hai impostato nella configurazione del bootloader.

Riavvia l’IDE Arduino, scegli il tuo programmatore personalizzato ESP-Link dal menu Strumenti -> Programmatore

Prova a caricare lo sketch usando il programmatore. L’uso di UART tramite Wi-Fi non è una buona idea, è possibile abilitare il debug del caricamento IDE di Arduino nelle impostazioni di Arduino.

E’ una pessima idea usare la console seriale nei tuoi sketch con il Wi-Fi. Ritardi e bit che arrivano dopo che Arduino si è effettivamente resettato creano problemi con il flash degli sketch .

Ma ESP-LINK ha delle misure per trattare questi problemi.

4. ESP-LINK e programmatore “Curl”

Siamo in grado di caricare il nostro sketch tramite HTTP ed effettuare semplicemente una richiesta POST per resettare il nostro Arduino.

Il pacchetto ESP-LINK ha un buon script shell per Linux. Guardando dentro questo script, ho scritto una versione molto più semplice per Windows.

Prima di tutto installa Curl per Windows

Estrai e metti le directory nella directory di WinAVR, questo evita semplicemente di aggiungere PATH a una nuova directory ed infine riavvia.

Prova questo comando dalla command shell.
curl -v

Crea il file avrflash.cmd, per esempio in c:\Program Files (x86)\Arduino\hardware\arduino\avr\

@echo off
curl -m 10 -s -XPOST http://esp-01-link/pgm/sync
sleep 1
curl -m 10 -s http://esp-01-link/pgm/sync
echo.
curl -m 10 -s -g -d “@%*” “http://esp-01-link/pgm/upload”

 

Quindi aggiungi a c:\Program Files (x86)\Arduino\hardware\arduino\avr\platforms.txt il seguente listato:

######################
# ESP-LINK
tools.esplink.path={runtime.tools.avrdude.path}
tools.esplink.cmd.path={path}/bin/avrdude
tools.esplink.config.path={path}/etc/avrdude.conf

tools.esplink.upload.params.verbose=-v
tools.esplink.upload.params.quiet=-q -q
# tools.esplink.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.esplink.upload.verify=
tools.esplink.upload.params.noverify=-V
tools.esplink.upload.pattern=”c:\Program Files (x86)\Arduino\hardware\arduino\avr\avrflash.cmd” {build.path}/{build.project_name}.hex

tools.esplink.program.params.verbose=-v
tools.esplink.program.params.quiet=-q -q
# tools.esplink.program.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.esplink.program.verify=
tools.esplink.program.params.noverify=-V
tools.esplink.program.pattern=”{cmd.path}” “-C{config.path}” {program.verbose} {program.verify} -p{build.mcu} -c{protocol} {program.extra_params} “-Uflash:w:{build.path}/{build.project_name}.hex:i”

tools.esplink.erase.params.verbose=-v
tools.esplink.erase.params.quiet=-q -q
tools.esplink.erase.pattern=”{cmd.path}” “-C{config.path}” {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m

tools.esplink.bootloader.params.verbose=-v
tools.esplink.bootloader.params.quiet=-q -q
tools.esplink.bootloader.pattern=”{cmd.path}” “-C{config.path}” {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} “-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i” -Ulock:w:{bootloader.lock_bits}:m

In realtà abbiamo solo bisogno delle stringhe in grassetto, ma le altre sono solo per la compatibilità con Arduino.
Riavvia l’IDE di Arduino e prova a caricare lo sketch!

Inoltre puoi eseguire il debug della tua scheda aprendo telnet su esp-01-link sulla porta 23 o 2323.
telnet esp-01-link

oppure usa Putty o un altro terminale Telnet.

Grazie.

Comments (1)

  1. francesco

    Salve e buonasera, non ho capito una cosa, nel caso in cui volessi alimentare il mio sistema da banco, alla voce porta seriale non mi ritrovo più nulla. non mi è chiara questa cosa della porta seriale. Potete aiutarmi grazie in anticipo.

Lascia un commento

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

Close
Navigation

Categories