Ir al contenido
← Volver a Formación Arduino Avanzado

26. Nodo de sensores con Raspberry Pi Pico (MicroPython)

Da el salto de Arduino C++ a MicroPython con la Pico RP2040: lee un sensor y muéstralo en OLED. Aprende otra plataforma y otro lenguaje.

Dificultad: Avanzado · Tiempo: 90 min · Cerebro: Raspberry Pi Pico

🧰 Lista de materiales

sin foto
Raspberry Pi Pico (RP2040)
MCU RP2040 con MicroPython
sin foto
Sensor ultrasónico HC-SR04
Sensor de ejemplo
sin foto
Pantalla OLED I2C 0,96" (SSD1306)
Pantalla I2C
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

A trabajar con la Raspberry Pi Pico y MicroPython, una alternativa moderna a Arduino: lógica de 3,3 V, REPL interactivo y Python en lugar de C++. Montarás un nodo que lee un sensor y lo muestra en OLED.

⚠ AtenciónLa Pico trabaja a 3,3 V, no 5 V. El HC-SR04 emite 5 V en Echo: necesitas un divisor de tensión (p. ej. 1 kΩ + 2 kΩ) en el pin Echo para no dañar la Pico. La OLED de 3,3 V se conecta directa.

📚 Teoría: Pico, MicroPython y niveles lógicos

El RP2040 es un microcontrolador de doble núcleo a 3,3 V. MicroPython es Python compilado para microcontroladores: editas con Thonny, ejecutas al vuelo y no compilas como en Arduino. Los pines GP0–GP28 son configurables.

Diferencia crítica con Arduino Uno: tolerancia de 3,3 V. Cualquier sensor que dé 5 V en una salida hacia la Pico necesita adaptación de nivel.

🔌 Conexiones

ComponentePin Pico
HC-SR04 VCCVBUS (5 V)
HC-SR04 GNDGND
HC-SR04 TrigGP14
HC-SR04 EchoGP15 (vía divisor a 3,3 V)
OLED VCC / GND3V3 / GND
OLED SDA / SCLGP0 / GP1

💻 Código completo (MicroPython)

Instala MicroPython en la Pico (arrastra el .uf2 en modo BOOTSEL) y usa Thonny. Sube también la librería ssd1306.py.

# Nodo de distancia con Pico + HC-SR04 + OLED (MicroPython)
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time

# OLED por I2C
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)

trig = Pin(14, Pin.OUT)
echo = Pin(15, Pin.IN)

def medir_cm():
    trig.low()
    time.sleep_us(2)
    trig.high()
    time.sleep_us(10)
    trig.low()
    # espera flanco de subida
    t0 = time.ticks_us()
    while echo.value() == 0:
        if time.ticks_diff(time.ticks_us(), t0) > 30000:
            return -1
    inicio = time.ticks_us()
    while echo.value() == 1:
        if time.ticks_diff(time.ticks_us(), inicio) > 30000:
            return -1
    fin = time.ticks_us()
    return time.ticks_diff(fin, inicio) * 0.0343 / 2

while True:
    d = medir_cm()
    oled.fill(0)
    oled.text("Distancia:", 0, 0)
    if d < 0:
        oled.text("--- cm", 0, 20)
    else:
        oled.text("{:.1f} cm".format(d), 0, 20)
        # barra
        ancho = min(int(d), 128)
        oled.fill_rect(0, 45, ancho, 10, 1)
    oled.show()
    time.sleep(0.2)

🛠️ Montaje paso a paso

  1. Flashea MicroPython en la Pico (botón BOOTSEL + arrastrar .uf2).
  2. Abre Thonny y selecciona el intérprete MicroPython (Pico).
  3. Sube ssd1306.py al sistema de archivos de la Pico.
  4. Cablea OLED y HC-SR04 (¡divisor en Echo!).
  5. Ejecuta el script y observa la distancia en la OLED.

🧩 Resolución de problemas

SíntomaCausaSolución
Pico no detecta sensorEcho a 5 V sin divisorAñade el divisor de tensión
ImportError ssd1306Falta la libreríaSúbela al filesystem de la Pico
OLED en blancoI2C malVerifica GP0/GP1 y dirección 0x3C

🚀 Para ir más lejos

  • Si tienes Pico W, publica los datos por Wi-Fi/MQTT.
  • Aprovecha el panel solar USB-C para alimentarlo (proyecto 27).
← Volver a Formación Arduino