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)