Entradas y Salidas Digitales con MicroPython - pensactius/Tutoriales GitHub Wiki
Información extraída de RANDOM NERD TUTORIALS
En este tutorial veremos cómo controlar los GPIOs del ESP8266 y ESP32 como entradas y salidas digitales usando MicroPython. Como ejemplo, veremos cómo leer el valor de un pulsador y encender un led.
Pre-requisitos
Para seguir este tutorial se asume que el firmware de MicroPython ya está instalado en la placa ESP8266 o ESP32. También necesitarás un editor y herramienta para cargar el código a la placa. Para más información lee este artículo:
Resumen del Proyecto
Para mostrar cómo usar las entradas y salidas digitales, construiremos un ejemplo muy básico con un pulsador y un LED. Leeremos el estado del pulsador y encenderemos el LED como se muestra en la figura:
Entradas Digitales
Antes de poder acceder a ningún pin debemos importar el módulo machine
. Este módulo contiene funciones relacionadas con el hardware de cada placa en particular. Un módulo en MicroPython no es más que un fichero que contiene definiciones y código; normalmente para proporcionar funcionalidades que el MicroPython por sí sólo no ofrece.
import machine
Para obtener el valor de un GPIO, primero hay que crear un objeto Pin
y configurarlo como ENTRADA. Por ejemplo:
pulsador = machine.Pin(4, machine.Pin.IN)
Podemos evitar tener que estar escribiendo el nombre del módulo constantemente importando el elemento que queremos usar del módulo:
from machine import Pin
pulsador = Pin(4, Pin.IN)
Una vez configurado el pin como entrada podemos obtener su valor con el método value()
sin argumentos. Un método no es más que una función asociada a un objeto. En este caso value()
es una función asociada al objeto Pin
. Por ejemplo, para obtener el estado del pulsador usaríamos la siguiente expresión:
pulsador.value()
Salidas digitales
Para establecer un GPIO a 1 o 0 (HIGH/LOW, True/False) primero debemos configurarlo como SALIDA:
from machine import Pin
led = Pin(5, Pin.OUT)
Para controlar el valor del GPIO podemos usar el método value()
y pasarle el valor 1
o 0
como argumento. Por ejemplo, el siguiente comando pone el estado del led a HIGH:
from machine import Pin
led = Pin(5, Pin.OUT)
led.value (1)
Alternativamente, también podemos usar los métodos on()
y off()
:
from machine import Pin
led = Pin(5, Pin.OUT)
led.on() # enciende el led
Esquema - ESP32
Si usas una placa ESP32 monta el circuito como se muestra en el siguiente esquema:
Esquema - ESP8266
Si usas una placa ESP8266 (nodeMCU o WeMos D1 Mini) sigue el siguiente esquema:
En el ESP8266, el pin marcado como D1 corresponde al GPIO 5
y el pin marcado como D2 corresponde al GPIO 4
.
Código
El siguiente código lee el estado del pulsador y enciende el LED de forma adecuada. El código es el mismo tanto para ESP32 como ESP8266:
#
# basic-io.py
#
# Lee el estado de un pulsador y enciende un LED de forma correspondiente.
#
from machine import Pin
from time import sleep_ms
# Configura 'led' como salida y 'pulsdor' como entrada
led = Pin(5, Pin.OUT)
pulsador = Pin(4, Pin.IN)
# Bucle infinito: lee el estado del pulsador y enciende el led si está pulsado
while True:
led.value(pulsador.value())
sleep_ms(100)
Cómo funciona
Comenzamos importando la clase Pin
del módulo machine
, y sleep_ms
del módulo time
.
from machine import Pin
from time import sleep_ms
Creamos a continuación un objeto Pin
asociado al GPIO5
y lo asignamos a una variable con el nombre led
. Los LEDs son salidas, así que lo configuramos usando Pin.OUT
.
También cramos un objeto llamado pulsador
asociado al GPIO 4
. Los pulsadores son entradas, así que lo configuramos usando Pin.IN
.
# Configura 'led' como salida y 'pulsdor' como entrada
led = Pin(5, Pin.OUT)
pulsador = Pin(4, Pin.IN)
Usamos pulsador.value()
para devolver/leer el estado del boton. Usamos este valor devuelto como argumento a led.value()
para establecer el valor del LED.
# Bucle infinito: lee el estado del pulsador y enciende el led si está pulsado
while True:
led.value(pulsador.value())
sleep_ms(100)