Els sensors digitals proporcionen informació al microcontrolador en forma de senyals digitals d'entrada (0, False quan estan en repós, i 1, True quan estan activats), que en el cas de l'ESP32 corresponen a dos valors de tensió: 0V i 3.3V.
Entrades digitals de l'ESP32
Tots els GPIO de l'ESP32 es poden utilitzar com a entrades digitals, excepte els 6 a 11 (connectats a la memòria flash). Tot i això hi ha una sèrie de pins que proposo evitar com a entrades digitals, i reservar-los per altres usos.
El sensor digital més senzill és el polsador. Aquest és un dispositiu mecànic amb un sistema de retorn automàtic.
Quan s'exerceix pressió sobre ell, canvia d'estat. Si deixem d'exercir aquesta pressió, el polsador tornarà a l'estat de repòs de manera automàtica.
Nosaltres utilitzarem un mòdul polsador KY-004. Feu atenció a la serigrafia dels pins, perquè indica com s'ha de connectar a l'ESP32.
Pautes de connexió
L'exemple utilitza un botó connectat al pin 12 per controlar l'encesa d'un LED connectat al pin 13.
Per llegir una entrada digital cal:
Importar la classe Pin del mòdul machine de MicroPython, que permet interactuar amb els pins
Crear un objecte Pin, definint el GPIO i configurant-lo com a entrada amb el mètode Pin.IN
Desar la lectura del pin en una variable i definir les accions en funció del valor d'aquesta variable (0 o 1)
Som-hi, llegim l'estat d'un polsador:
from machine import Pin
from time import sleep
boto = Pin(12, Pin.IN) # configuracio del pin com a entrada
while True:
lectura = boto.value() # desa el valor en la variable lectura
print(lectura) # mostra el valor a la consola
sleep(0.01) # pausa mínima per comoditat de lectura
Si utilitzem un polsador estandar, per evitar distorsions en el senyal, haurem d'afegir una resistència externa (10 kΩ) connectada a GND, o programar la resistència interna del pin en mode pull-down o pull-up:
boto = Pin(12, Pin.IN, Pin.PULL_DOWN)
El mode pull-down provoca senyal 1 en prèmer el botó / pull-up provoca senyal 0 en prèmer el botó
Control de l'encesa d'un LED
Utilitzant l'estructura condicional if/else podem controlar el funcionament d'un LED o qualsevol altre actuador amb un polsador o qualsevol altre sensor digital.
Som-hi, fem que un LED s'encengui en prèmer el polsador, i s'apagui quan es deixi anar.
Polsador com a interruptor
Fem un botó multiestat per controlar actuadors.
Es tracta que, en prémer el polsador un LED canviï d'estat, és a dir s'encengui si estava apagat i s'apagui si estava encès.
Fem-ho utilitzant una variable booleana estat_led i cada cop que premem el polsador invertir el seu valor: not estat_led
Ara només caldrà definir que el valor de la sortida sigui == al valor de l'estat del led: led.value (estat_led)
Solucionem el problema dels rebots
Adoneu-vos que la resposta és aleatòria, perquè la entrada no canvia immediatament de valor (pels rebots, bounce).
La majoria de polsadors reboten: quan els premem i els deixem anar, les parts mecàniques oscil·len i produeixen diverses puntes de pujada i baixada. Per tant, si volem precisió de resposta, haurem de posar el controlador a dormir durant la fase dels rebots.
.
Utilitzant polsadors (o qualsevol altre sensor digital) podem ...