IoT Basic Installazione Espruino su ESP8266 e ESP32 (Windows)

Rolfini Alberto
5 min readDec 7, 2022

--

Uno dei sistemi con cui ho iniziato a programmare dispositivi connessi e intelligenti (IoT) è proprio Espruino installato su Microcontrollori ESP con wifi integrato. La cosa che subito mi ha incuriosito e abbastanza intrigato è la possibilità di poter programmare un dispositivo hardware tramite linguaggio javascript, linguaggio che fino a quel momento è stato impiegato principalmente per progetti Web-based.

Fondamentalmente Espruino non è altro che un compilatore installato su MCU che interpreta il linguaggio javascript in linguaggio C.

Senza una guida però il primo approccio a questo nuovo sistema di programmazione può essere abbastanza frustrante, complice la scarsa documentazione presente sul web, soprattutto per chi non volesse subito investire in MCU proprietari ( ad un costo abbastanza elevato 30/40€) ,ma in hardware meno costosi come ESP8266 ed ESP32 (7/10€).

Photo by Vishnu Mohanan on Unsplash

Entriamo nel vivo e proviamo ad impostare un primo e semplice progetto di IoT.

Cosa serve per iniziare?

1. Installazione

  • Colleghiamo il nostro MCU tramite USB al nostro PC e Impostiamo i baud rate a 115200 Importante! (se il nostro pc non dovesse riconoscere il dispositivo c’è bisogno di installare il suo driver compatibile, descritto nelle istruzioni all’acquisto)
(Windows) Pannello di Controllo-> Gestione Dispositivi -> Porte COM ->

->(COM Relativa alla nostra scheda)-> Proprietà -> Impostiamo i Baud Rate a 115200
  • Creiamo una cartella sul desktop e chiamiamola Espruino (qui andremo a inserire il nostro firmware appena scaricato)
  • Apriamo il nostro Prompt dei Comandi in modalità Amministratore e posizioniamoci sulla nostra cartella Espruino
cd desktop/Espruino
  • Resettiamo il nostro dispositivo alle impostazioni di fabbrica (se dovesse fallire, scolleghiamo e ricolleghiamo il nostro MCU dalla porta USB)
python -m esptool --port COM(numero com assegnata dal pc) erase_flash

es. python -m esptool --port COM3 erase_flash
  • Installiamo il Firmware appena scaricato digitando il seguente comando, diverso in base al modello di MCU scelto

ESP8266

python -m esptool --port COM(numero porta assegnata al pc) --baud 115200 write_flash --flash_size=detect -fm dio 0 espruino_2v(versione scaricata)_esp8266_4mb_combined_4096.bin

es. python -m esptool --port COM3 --baud 115200 write_flash --flash_size=detect -fm dio 0 espruino_2v09_esp8266_4mb_combined_4096.bin

ESP32

python -m esptool --chip esp32 --port COM(numero porta assegnata al pc) --baud 115200 write_flash -z --flash_mode dio --flash_freq 40m 0x1000 bootloader.bin 0x10000 espruino_esp32.bin 0x8000 partitions_espruino.bin

es. python -m esptool --chip esp32 --port COM3 --baud 115200 write_flash -z --flash_mode dio --flash_freq 40m 0x1000 bootloader.bin 0x10000 espruino_esp32.bin 0x8000 partitions_espruino.bin

Abbiamo installato Espruino sul nostro Microcontrollore!

2. Primo Progetto

Con Espruino possiamo programmare in due modi diversi:

ESPRUINO IDE
ESPRUINO IDE

Colleghiamo l’ESP al WIFI (Utilizzeremo l’estensione Chrome per comodità)

  • Prima di procedere al collegamento wifi è necessario impostare anche sul nostro IDE i baud rate corretti
Ingranaggio -> Communications -> Baud Rate ->115200
  • Colleghiamo l’IDE alla COM del del nostro MCU tramite il pulsante in altro a sinistra
  • Nell’editor di destra inseriamo il seguente codice
var wifi = require("Wifi");
wifi.connect("Nome tuo Wifi (SSID)", {password:"(password wifi)"}, function(err){
console.log("connected? err=", err, "info=", wifi.getIP());
});
wifi.save();
  • Inviamo la configurazione al nostro MCU tramite il pulsate RAM (salvataggio con memoria persistente)
  • Nella console sarà visualizzato l’effettivo collegamento e l’indirizzo IP assegnato al nostro MCU (ci servirà per collegarci via TCP e programmare comodamente )

Colleghiamo l’MCU tramite protocollo TCP

  • Impostiamo l’indirizzo IP nel IDE
Ingranaggio -> Communications -> Connect over TCP Address -> (nostro indirizzo IP):23
-> es. 192.168.12.118:23
(possiamo impostare più indirizzi ip separati da ; es. 192.168.12.118:23;192.168.12.123:23)
  • Apriamo una nuova connessione con il pulsante in alto a sinistra.
    A questo punto dovremmo vedere il nostro indirizzo IP
  • Inseriamo questo semplice codice che farà lampeggiare il nostro Led e inviamo tramite il pulsante RAM
function onInit() {
var on = false;
setInterval(function() {
on = !on;
LED1.write(on);
}, 500);
}
save();//Per renderlo persistente anche dopo lo spegnimento

Abbiamo creato il nostro primo IoT!

API Espruino ESP8266

API Espruino ESP32

3. Pro e Contro

Espruino a primo acchito può sembrare molto potente e versatile ma, a mi e spese, ho scoperto che ha delle forti limitazioni e per progetti di grosse entità non è fortemente consigliato.

Ultimamente preferisco utilizzare Cylon.js ( ne parlerò in un’altra storia …)

Pro:

  • Utilizzo del linguaggio javascript per programmare MCU
  • MCU proprietari molto potenti e versatili
  • IDE Online ben strutturato
  • Libreria gestione protocollo MQTT molto per sviluppata
  • Libreria gestione MySql molto efficiente

Contro:

  • Se non si vogliono utilizzare MCU proprietari c’è scarsa documentazione
  • Molto pesate e limita la quantità di codice che possiamo scrivere
  • Libreria per la Connessione Wifi non bel sviluppata
  • Errori poco documentati (bisogna letteralmente impazzire per trovare qualcosa online)
  • Limitato a pochi MCU non proprietari
  • Limite sull’utilizzo di ciclo For, Foreach e While

4. Errori Comuni e Consigli

  • Attenzione alla quantità di codice che scrivete potrebbe compariti l’errore Buffer Overflow (minimizzate il più possibile)
  • Non utilizzate cicli For, Foreach e While,ma utilizzate setIntervall (Espruino non gradisce un’interruzione continua)
  • Ricordatevi sempre di resettare ed eliminare i Timeout e gli Intervall prima di richiamarli
  • Errore auth_expire sulla connessione wifi può essere evitato compilando prima il nostro codice di configurazione Wifi e poi il codice completo (come nell’esempio Primo Progetto sopra)
  • Se il programma smette di funzionare quando lo scolleghiamo dall’USB inserire il seguente codice nella funzione onInit
LoopbackA.setConsole();
  • Non perfette tutte le funzionalità di ES6
  • Ricordatevi di settare l’orario tramite la funzione
setInterval(function () { wifi.setSNTP("indirizzo server", "0"); }, 3600 * 1000)

Per qualsiasi consiglio sono a disposizione nei commenti!

Photo by Howie R on Unsplash

--

--