sabato 23 gennaio 2021

RSHELL un ottimo sistema per gestire ESP32 da terminale

Nel mio percorso di approfondimento della conoscenza dell'ESP32, ho incontrato questo interessante programma per Python; RSHELL  che consente una connessione tra una macchina Linux ed il nostro ESP32 tramite cavo USB e gestisce alla perfezione l'upload ed il download dei file sulla scheda.

Attraverso RSHELL si potranno caricare i file di programma sulla scheda ESP e scaricare eventuali file o log registrati sulla scheda stessa, direttamente da shell attraverso una macchina Linux.

Abbiamo gia' visto come connettere la ESP via WiFi attraverso WebRepl nel precedente post, adesso vediamo come poter fare lo stesso attraverso una semplice shell Linux. Sulla mia macchina in questo momento ho il sistema Win10,  e l'ambiente virtuale WSL che ho costruito per utilizzare Linux con i programmi per la programmazione in Python, non gestisce le porte seriali della macchina, o almeno non lo fa nelle impostazioni di base che attualmente girano sul mio sistema, quindi per poter testare RSHELL ho dovuto "passare" da una Raspberry Pi che, attraverso una shell remota, mi consente di "parlare" con l'ESP via seriale.

Quindi ho collegato ESP32 con il cavo USB alla Raspberry Pi. Ho connesso la Raspberry Pi via WiFi in SSH, ed ho cosi' ottenuto quando necessario per funzionare.


Installato rshell sul sistema Linux con 

$ pip install rshell

Collegato la ESP32 alla presa USB della Raspberry Pi  bisogna trovare il nome della seriale che e' stato assegnato al device, semplicemente leggendo con il comando:

$ ls /dev/tty*

Nel mio sistema il nome assegnato e' il solito  ttyUSB0

Quindi basta chiamare con il comando sotto, la connessione con il parametro -p e se tutto e' andato regolarmente, ci troviamo connessi alla nostra ESP32 

$  rshell -p /dev/ttyUSB0





Il manuale onlne del programma spiega con dovizia di particolari l'utilizzo di ogni comando, e se ne volete sapere di piu' vi consiglio di andare a leggere

Io per fare conoscenza ho testato il comando -d  che mette  RSHELL in modalita' debug, quindi la connessione e' molto piu' verbose, ma consente di capire meglio cosa succede dopo ogni comando

Adesso vediamo come mettere su il sistema in modo da far connettere in automatico il nostro ESP32 al router di casa, senza utilizzare il metodo gia' spiegato nel post precedente.

La prima cosa connettere con RSHELL e questi comandi:

$ rshell -p /dev/ttyUSB0 --buffer-size 30 -a -e nano

Il comando -e nano consente di scegliere l'editor nano anziche' il predefinito vi che come sappiamo e' molto piu' ostico !!

A questo punto possiamo andare a leggere il contenuto  della flash dell'ESP32 con il comando 

$ ls /pyboard     

nb. pytboard e' il nome che viene dato in automatico all'ESP se non e' settato in maniera differente dentro il file board.py  che contenga un attributo simile a :  name = "myboard"

A questo punto possiamo editare il file boot.py che risiede gia' di default sulla ESP32 con l'editor che abbiamo definito con il parametro -e (cioe' nano)

> edit /pyboard/boot.py    





Le istruzioni da inserire nel file sono le stesse del precedente post, cioe':

# This file is executed on every boot (including wake-boot from deepsleep)
import esp
esp.osdebug(None)
import webrepl
webrepl.start()
def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('XXXXXXXXXXXXXXXXX''XXXXXXXXXXX')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())
do_connect()

Al posto delle X dovete inserire i dati relativi al vostro router, naturalmente.

Per uscire e salvare da nano, i comandi sono Ctrl-X  e poi confermare il salvataggio delle modifiche effettuate.

Con queste semplici modifiche il ESP32 al successivo riavvio si colleghera' al router ed entrera' nella vostra rete locale.

Un'altra cosa che si puo' fare e' far partire REPL, chiamandolo direttamente dal prompt:

> repl pyboard         
 nb. il nome della scheda puo' essere omesso, serve solo se abbiamo piu' schede insieme, che possono essere collegate  chiamandole per nome

Qui ci troviamo direttamente nell'ambiente MicroPython del nostro ESP32


Buon divertimento.

TecnoGeppetto







ESP32 gestione di striscia Led indirizzabile Neopixel WS2812

 I miei test sul sistema MicroPython ed ESP32 vanno avanti di gran lena, oggi ho completato il montaggio di un semplice circuito con un ESP32 ed una barretta di Led WS2812 molto comoda e facilmente inseribile nei vari circuiti che possiamo costruire "sulla scrivania".

Ho montato il circuito come da schema qui sotto, ma ho avuto dei problemi allo startup del ESP, che "sente" il GPIO basso, e si mette in Dounload mode, cioe' pronto a ricevere il firmware, e non entra in posizione lavoro. Quindi ho deciso di utilizzare un'altra porta (ce ne sono tante!) per evitare l'inconveniente


La verisone di ESP sulla quale sto lavorando, probabilmente ha dei problemi di circuito, infatti non funziona il Pin dei 5V (il Vin, cioe' il pin che e' collegato all'alimentazione proveniente  dalla USB, di conseguenza sono sato costretto a collegarmi alla 3,3V per alimentare la barretta di Led ( siamo un po' sotto il limite della minima tensione ammessa, che e' di 4V, ma dai testi funziona ugualmente!!). Con questa configurazione pero' devo stare attento ad accendere i Led mai alla massima potenza, in quanto assorbirebbero tropo per il componente stabilizzatore di tensione installato sulla scheda (infatti , se funzionasse!, sarebbe certamente meglio usare l'alimentazione diretta dalla USB per alimentare la barretta di LED, questo modo che ho scelto io, passa attraverso lo stabilizzatore di tensione che si occupa di alimentare il microcontrollore ed il wifi, quindi ha gia' il suo bel da fare!)

Di seguito il codice uploadato sull ESP che fa accendere i led di un colorino arancione uno per volta fino ad accendere tutta la barretta, poi fa il percorso inverso e spenge tutti uno alla volta. Fa' questo di continuo, fino a che non riceve un break (Ctrl-C) da terminale.

from machine import Pin
from neopixel import NeoPixel
import time

pin = Pin(16, Pin.OUT)   # set GPIO16 to output to drive NeoPixels
np = NeoPixel(pin, 8)   # create NeoPixel driver on GPIO0 for 8 pixels
while True:
    for i in range(8):
        np[i] = (2555)      # set the first pixel to orange
        np.write()              # write data to all pixels
        time.sleep_ms(500)
    for i in range(80, -1):
        np[i-1] = (000)      # set the first pixel to orange
        np.write()              # write data to all pixels
        time.sleep_ms(500)


Buon divertimento 

TecnoGeppetto




venerdì 22 gennaio 2021

ESP32Cam gestione dei Led della scheda

 Continua la serie di articoli sulla scheda ESP32Cam che inquesto periodo e' sotto i miei riflettori; Con questo articolo parliamo della attivazione e della gestione del LED principale e del Led di servizio. Infatti la scheda ha un bel Led 5050 sulla parte frontale, molto luminoso, che risponde al GPIO 4 ed un Led Rosso sulla scheda interna, vicino al modulo ESP vero e proprio, che viene utilizzato anche dal sistema per messaggi di stato.

Il MicroPython ci consente di gestire piuttosto facilmente questi due led semplicemente alzando o abbassando il livello dei Pin relativi. Bisogna comunque fare attenzione al fatto che il GPIO 4 al quale e' collegato il Led principale Bianco, e' anche utilizzato per la gestione della scheda MicroSD, infatti sul GPIO 4 e' collegata anche il segnale DATA1 della comunicazione tra il microcontrollore e la MicroSD, quindi non e' possibile utilizzare le due periferiche contemporaneamente.


Per il LED Bianco

from machine import Pin
import time

LEDb = Pin(4, Pin.OUT) 
while True:
    LEDb.value(1)
    time.sleep_ms(500)
    LEDb.value(0)
    time.sleep_ms(500)


Per il LED Rosso

#gestione del LED di servizio Rosso della scheda sul GPIO33
LEDr = Pin(33, Pin.OUT) 
while True:
    LEDr.value(1)
    time.sleep_ms(500)
    LEDr.value(0)
    time.sleep_ms(500)

Nota che il LED Rosso funziona alla rovescia rispetto all'altro quindi si accendera' con il Pin 33 basso, mentre si spengera' con il Pin 33 tenuto alto.


Buoni esperimenti

TecnoGeppetto