Impariamo a leggere un valore analogico in MicroPython, adoperando una ESP32

Una volta presa la mano nel inviare e nel ricevere un segnale digitale, andiamo a imparare a programmare la nostra Lolin32 Lite con chip ESP32, adoperando i MicroPython. Nell’esempio di oggi adopereremo un potenziometro da 10k Ω, così da poter regolare meglio il segnale, tuttavia il codice che andremo a vedere è perfettamente applicabile per ogni sensore analogico.

Collegamenti

I collegamenti sono essenzialmente semplici: il pin centrale del potenziometro va connesso al pin 35 della Lolin32 Lite, mentre gli altri due pin ai 3,3V e al GND.

analogico

Nel caso volessimo collegare altri sensori analogici, eccovi il pinout della Lolin32 Lite. Per nostra praticità, abbiamo utilizzato il pin 35, tuttavia sentitevi liberi di adoperare qualsiasi altro pin.

analogico



Codice

Prima di passare al codice, vi ricordiamo che la scheda va configurata per la programmazione in MicroPython, per cui se non l’avete ancora fatto, andate a questo LINK, in cui troverete un tutorial su come installare il firmware corretto. Passando all’analisi del codice, che potete scaricare a questo LINK,  inseriamo le librerie machine e time, la prima per la gestione del PIN, e a differenza della scorsa volta, richiederemo anche di utilizzare il pin come analogico, mentre la seconda per la gestione dei timer bloccanti, rammentandovi che sono espressi in secondi.


from machine import Pin, ADC
from time import sleep

Andiamo a creare un oggetto che chiameremo sensor, il quale sarà adoperato per ricevere il segnale analogico al pin 35.

sensor = ADC(Pin(35))

Tale segnale avrà un valore compreso tra 0 e 4095, che corrisponde all’intervallo compreso tra gli 0 e i 3,3V. Esso va specificato come segue:

sensor.atten(ADC.ATTN_11DB)

Tale scrittura prende il nome di attenuazione, ossia esplichiamo i valori validi per la lettura del segnale. Tuttavia, sarà possibile modificare tale attenuazione, come riportato di seguito.

SCRITTURAATTENUAZIONETENSIONE
ADC.ATTN_0DB0db100mV - 950mV
ADC.ATTN_2_5DB2,5db100mV - 1250mV
ADC.ATTN_6DB6db150mV - 1750mV
ADC.ATTN_11DB11db(150mV - 2450mV



Avviamo a questo punto il ciclo while True e creiamo una variabile (valore) che ospiterà il segnale letto dall’oggetto sensor.


while True:
valore = sensor.read()

Concludiamo stampando sulla shell la variabile valore ogni mezzo secondo.


print(valore)
sleep(0.5)