Rpi Pico IO

Perspectiva

RpiPicoIO es una tarjeta diseñada por MCI Electronics, que contiene 4 relés y 4 optoacopladores para facilitar el control de elementos de alto requerimiento voltaico con un microordenador Raspberry Pi Pico y similares. Es ideal para ser usada en procesos industriales y automatización.

Características principales

Además, incluye otros headers conectados directamente a pins de la Raspberry Pi Pico, pero aproximados a los componentes compatibles de la tarjeta. Esto agiliza el cableado, manteniendo orden al acortar la distancia de las conexiones y permitiendo al usuario elegir si optar o no por estas.

Zoom a la conexión de pins

Componentes y conexiones

Foto conexiones

Tabla de pines

Empezando a usar la tarjeta Rpi Pico IO

Requerimientos de hardware

Requerimientos de software

Ejemplo

Conexiones

(Ver diagrama de conexiones en la sección anterior)

Código

from machine import Pin, ADC, UART
import time

# Entradas digitales con pull-up
inputs = {
    "IN1": Pin(10, Pin.IN, Pin.PULL_UP),
    "IN2": Pin(11, Pin.IN, Pin.PULL_UP),
    "IN3": Pin(12, Pin.IN, Pin.PULL_UP),
    "IN4": Pin(13, Pin.IN, Pin.PULL_UP)
}

# Entradas analógicas
analog_inputs = {
    "A0": ADC(26),
    "A1": ADC(27),
    "A2": ADC(28)
}

# Salidas digitales (relés y zumbador)
outputs = {
    "RELAY1": Pin(18, Pin.OUT),
    "RELAY2": Pin(19, Pin.OUT),
    "RELAY3": Pin(20, Pin.OUT),
    "RELAY4": Pin(21, Pin.OUT),
    "BUZZER": Pin(22, Pin.OUT)
}

# Configurar UART0 para RS485 en GP0 (TX), GP1 (RX)
uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
rs485_dir = Pin(2, Pin.OUT)
rs485_dir.value(0)

def test_digital_inputs():
    print("== Entradas Digitales ==")
    for name, pin in inputs.items():
        value = pin.value()
        print(f"{name}: {'PRESIONADO' if value == 0 else 'LIBRE'}")
    print()

def test_outputs():
    print("== Prueba de Salidas ==")
    for name, pin in outputs.items():
        print(f"Activando {name}")
        pin.value(1)
        time.sleep(0.5)
        pin.value(0)
        time.sleep(0.2)
    print()

def test_rs485():
    print("== Prueba RS485 ==")
    message = "Hola desde RS485\n"
    rs485_dir.value(1)
    uart.write(message)
    uart.flush()
    time.sleep(0.1)
    rs485_dir.value(0)
    print(f"Transmitido: {message.strip()}")
    time.sleep(0.5)
    if uart.any():
        received = uart.read().decode('utf-8')
        print(f"Recibido: {received.strip()}")
    else:
        print("No se recibió ningún dato.")
    print()

# Bucle principal
try:
    while True:
        test_digital_inputs()
        test_outputs()
        test_rs485()
        time.sleep(2)
except KeyboardInterrupt:
    print("Prueba interrumpida.")