Pines GPIO Digitales
Los pines GPIO (Entradas y salidas de propósito general), no todos los pines se pueden usar, los que se utilizan son 0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16.
Pines de comunicación
Los pines 1
y 3
son de la comunicación serial UART
(Tx
, Rx
); es decir, comunicación con la computadora. Si cambias su configuración pierdes comunicación por USB.
Niveles lógicos
Tenemos que dar las indicaciones para mandar a nivel alto las salidas del microcontrolador; es decir, mandar a un nivel lógico 1
o alto
o True
, esto lo que hará será que a la salida del pin tenga un nivel de voltaje de 5V
, en caso de mandarlo a 0
o bajo
o False
, es equivalente a 0V
.
Programación | Nivel lógico | Digital | Voltaje |
---|---|---|---|
False | 0 | Low | 0V |
True | 1 | High | 3.3V |
Relación de pines
La serigrafía que viene en la placa no coincide con los valores que podemos asignar, aquí están los valores correspondientes a la serigrafía y el numero que debemos pasar para indicar lo que queremos controlar.
Micropython | Físico | Consideraciones |
---|---|---|
0 | D3 | |
1 | Rx | No usar |
2 | D4 | Led incorporado, enciende en bajo |
3 | Tx | No usar |
4 | D2 | |
5 | D1 | |
6 | X | No usar |
7 | X | No usar |
8 | X | No usar |
9 | X | No usar |
10 | X | No usar |
11 | X | No usar |
12 | D6 | |
13 | D7 | |
14 | D5 | |
15 | D8 | |
16 | D0 | Tiene varias limitaciones |
Por ejemplo si colocamos el valor de
Control pines
Primer paso para utilizar los pines, se debe importar el modulo machine
from machine import Pin # importamos el modulo para pines
pin = Pin(0) #configuramos un pin y se guarda en una variable (D3)
import machine #importamos el modulo machine
pin = machine.Pin(0) #configuramos un pin y se guarda en una variable (D3)
Configurar I/O
Configurar pines como entrada o salida.
machine.Pin(numero_pin, modo,r_pull_up, value=level)
numero_pin
: El numero del pin: 0, 2, 4, 5, 12, 13, 14, 15, y 16modo
: definir como entrada o salidaPin.IN
: Define comoentrada
Pin.OUT
: Define comosalida
r_pull_up
: activar resistencia pull-up interna del microcontrolador. Solo para cuando es entrada.value
: Se puede indicar al crearlo, el nivel que tendrá a la salidalevel
:0
- Bajo (0V)level
:1
- Alto (3.3V)
Configurando entradas
import machine #importamos
pin = machine.Pin(0, machine.Pin.IN) #configuramos un pin 0 como entrada
Podemos activar la resistencia PULL_UP
a la entrada
import machine #importamos
pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP) #configuramos un pin 0 como entrada y su resistencia pull up
Nota: GPIO16 no tiene el modo pull-up
Configurando salidas
import machine #importamos
pin = machine.Pin(0, machine.Pin.OUT) #configuramos un pin 0 como salida
Escribiendo y Leyendo el Pin
Leer el valor de entrada, solo retorno 0
o 1
pin.value(0)
pin.value(1)
Asignar un valor a la salida, solo se puede asignar 0
o 1
pin.off() # equivalente a pin.value(0)
pin.on() # equivalente a pin.value(1)
Con nivel asignado al crearlo
p5 = Pin(5, Pin.OUT, value=1) # Al crearlo se le da el valor de 1 a la salida
Interrupciones externas
Todos los pines pueden tener configurado la interrupción externa, excepto el GPIO16, esto se activa cuando cambia el valor de la entrada. Se asigna una función callback
que se ejecuta en el disparo (trigger).
Primero se define el función callback
, el cual debe recibir un argumento, debe ser el pin el cual que dispara la función:
def callback(pin):
print('pin change', pin)
El siguiente paso es configurar como entrada el pin:
from machine import Pin
p0 = Pin(0, Pin.IN)
p2 = Pin(2, Pin.IN)
Por ultimo se necesita decirle a los pines cuando se dispararan, y la función que se llamara cuando este evento sea detectado:
p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
p0
solo se dispara cuando sea un flanco de bajada; es decir, que pase la señal de un alto
a bajo
(de 1 a 0), mientras que para p2
se activada en flanco de bajada y de subida; es decir, que pase de alto
a bajo
(de 1 a 0) y cambio de bajo
a alto
(de 0 a 1). Mas información en la documentación oficial
Nota: Algunas secciones son traducciones directas del sitio de Micropython, realizadas por mí