Micropython e ESP8266 (NodeMcu)

Ho un nuovo progetto, un termostato per caldaia a gas dell’impianto di termosifoni, ma non il solito termostato, quello che voglio realizzare io non l’ho trovato in commercio.

A me serve accendere la caldaia per un periodo preciso, mezz’ora, un’ora o qualsiasi altro valore. La accendo e voglio che si spenga sola senza che ci debba pensare io. Ma ogni volta un valore diverso e un orario diverso, altrimenti andrebbe bene un temporizzatore.

Quindi mi serve un timer che accenda appena parte, faccia un conto alla rovescia e spegna raggiunto lo zero. Essendo un amante del linguaggio python ho scartato subito arduino e dopo un veloce giro ho optato per il modulo ESP8266.

Questo microcontrollore ha tutto on-board, non c’è nulla da saldare e la maggior parte è alimentabile con qualsiasi fonte di corrente continua da 5V a 20V, io ho optato per una batteria da 9V.

Prepariamo l’ambiente

Ma andiamo con ordine, per prima cosa dobbiamo programmare la nostra scheda, per farlo e per gestirlo dobbiamo scaricare le funzioni esptool, da riga di comando dos date il seguente comando: pip install esptool naturalmente dovete prima aver installato il python sul vostro pc, se non lo avete fatto trovate le istruzioni per Windows QUI.

Esptool permette di gestire il NodeMcu da riga di comando, per avere l’elenco delle funzioni basta lanciarlo da riga di comando scrivendo semplicemente esptool.py.

Ora per far vedere a Windows il vostro ESP8266 dovete installare il driver ch341 seriale, facile da trovare in internet, io l’ho scaricato da QUI. Attenti che il primo bottone di download, quello con un [AD] blu accanto, é pubblicità. Una volta scaricato estraetelo in una cartella.

Colleghiamo l’ESP8266

Ora collegate con un normale cavo USB il microcontrollore, sentirete il solito suono di Windows quando si collegano nuovi dispositivi. A questo punto premente il tasto bandierina(fra CTR e ALT sulla sinitra) e scrivete dispositivi, vedrete windows che vi suggerisce Gestione Dispositivi, fatelo partire.

Se trovate nell’elencto (è in ordine alfabetico) Dispositivi sconosciuti, selezionate e aggiornate il driver puntanto a quello appena scaricato ed estratto. Se non lo trovate vuol dire che il driver è già installato.

Il dispositivo viene visto come una porta seriale, le porte seriali hanno un nome che inizia con COM e si completa con il numero della porta quindi COM1, COM2 ecc., per vedere il numero che ha assunto il vostro andate sempre in Gestione Dispositivi e cliccate su Porte(COM e LPT) e vedrete lo vedrete, nel mio caso come potete vedere sull’immagine qui a lato il dispositivo viene visto come COM4.

Proviamolo

Come prima cosa vediamo le caratteristiche del nostro dispositivo, dopo averlo collegato al computer aver scoperto il suo nome diamo il comando esptool.py –port com4 chip_id, ricordatevi di sostituire COM4 con il nome del vostro dispositivo.

Se tutto è andato bene appariranno delle scritte che vi daranno informazioni sul vostro ESP8266, vedrete il modello, le feature, la velocità e l’ID del chip.

Dobbiamo ora caricare su ESP8266 l’interprete python in questo caso Micropython, una versione ridotta ma molto efficiente. Lo potete scaricare da QUI. Una volta scaricato il file bin che contiene il binario possiamo procedere con il caricamento.

Carichiamo l’interprete

Conviene sempre prima di caricare un nuovo sistema su un microcontrollore, ripulire la memoria per non rischiare che vecchie informazioni possano andare in conflitto con il nuovo. Per pulire la memoria del ESP8266 questo è il comando: esptool.py –port com4 erase_flash come sempre ricordatevi di cambiare il parametro port.

Ora con il comando esptool.py –port com4 –baud 460800 write_flash –flash_size=detect 0 esp8266-20200911-v1.13.bin carichiamo l’interprete. In questo caso dovrete adattare il parametro port e anche il nome del file con quello che avete scaricato voi.

Il dispositivo è pronto

Ora per provare il nostro dispositivo con l’interprete utilizziamo un semplice programma terminale, io utilizzo Putty, lo trovate QUI, ma potete utilizzare qualsiasi altro programma, configuratelo per il collegamento seriale sulla porta dove avete il vostro dispositivo a una velocità di 115.200 e connettete, dovreste vedere il prompt dell’interprete >>>

Provate a scrive 7 * 7 e l’interprete vi darà il risultato. Ora proviamo a fare lampeggiare il led sulla scheda. Sempre dal teminale date il comando import machine per attivare le funzioni di gestione dei pin e poi il comando led = machine.Pin(2, machine.Pin.OUT) per impostare il pin 2 (quello a cui è collegato il led della scheda) come pin di output assegnandogli il nome led.

Ora date il comando led.off() per accenderlo e il comando led.on() per spegnerlo, devo capire perché funziona al contrario di come la logica ci farebbe pensare.

Primo programma

Per essere sicuri che il tutto funziona con un programma ho scritto il seguente sorgente nominando main.py. Quando l’ESP8266 si avvia esegue il sorgente boot.py e subito dopo se presente il main.py. Nel boot si mettono tutte le istruzioni di configurazione del dispositivo, il main invece è il programma che vogliamo fargli eseguire.

import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
for x in range(0, 50):
   led.value(0)
   print(x)
   time.sleep_ms(1000)
   led.value(1)
   time.sleep_ms(1000)

La prima istruzione permette di utilizzare le funzioni per la gestione dei pin e la seconda per la gestione del tempo (nel nostro caso la funzione sleep). La terza riga come abbiamo già visto definisce il led onboard.

Per non rischiare un loop ho creato un ciclo di 50 accensioni e spegnimenti del led, in pratica il led lampeggia ogni due secondi per 50 volte e poi il programma si interrompe. Avevo il dubbio che creando un loop non sarei più riuscito a prendere il controllo del chip. Poi vi dico come fare se dovesse capitare.

Per comunicare più semplicemente con l’interprete e caricare i file da eseguire o eseguirli senza caricarli dovete installare su python il pacchetto ampy con il comando pip install adafruit-ampy

Una volta installato ampy poitete caricare il programma con il seguente comando ampy -p com4 put main.py e poi resettate il dispositivo con l’apposito tastino, se non presente staccatelo dalla USB e riattaccatelo. Vedrete il led lampeggiare a intervalli di due secondi e fermarsi dopo 50 lampeggi.

Ampy ha numerosi comandi utili, basta digitarlo senza paramenti (ampy.py) e vedrete tutto quello che può fare.

Alimentazione indipendente

Ultima prova per essere certo che il dipositivo fosse utilizzabile in maniera indipendente era alimentarlo. Finora il dispositivo lo abbiamo alimentato tramite USB, ma per funzionare quando sarà pronto il progetto deve avere un’alimentazione indipendente.

Con la maggior parte degli ESP8266 basta una pila da 9V collegata al piedino VIN, che accetta fino a 20V, alcune versioni non hanno questo piedino (sostituito da un 5V) in quel caso va trovata una soluzione diversa.

Guardate l’immagine e vedete com’è semplice. Basta collegare la pila da 9V e l’ESP8266 inizia a lampeggiare.

Bloccare esecuzione

Se perdete il controllo del dispositivo o volete bloccare il programma in corso è sufficiente premere i tasti CTRL e C dal terminale e riavrete il controllo.

Dopo aver fatto tanto lavoro con la riga di comando ho scoperto che c’è un software che fa tutto in maniera semplice, un ambiente integrato che permette di scrivere i programmi e caricarli sul ESP8266 ed eseguirli e tante altre attività da un unico programma.

Cerca nel sito upycraft e vedrai gli articoli dedicati a questo programma.

Maurizio

Vuoi acquistare un ESP8266? Lo trovi su Qui su Amazon.

2 commenti su “Micropython e ESP8266 (NodeMcu)”

    • Ciao, sono contento che l’articolo ti sia stato utile. In realtà quel progetto non l’ho mai finito ma l’articolo per il programma che ti permette di gestire il nodemcu l’ho fatto, clicca QUI e avrai l’elenco degli articoli che ne parlano, con l’occasione ho anche aggiornato l’articolo e in fondo adesso al posto del riferimento al prossimo articolo c’è il link per vedere gli articoli per upcraft.
      Ti auguro una buona giornata.
      Maurizio

I commenti sono chiusi.