uart-commandes.py
Un mini servidor de órdenes en UART0 (GP0/GP1): los módulos serie clásicos (GPS, módem celular, otro microcontrolador) pueden alternar el LED, leer la temperatura o consultar la placa con líneas de texto simples.
Hardware
Una Raspberry Pi Pico 2 (RP2350 doble Cortex-M33 @ 150 MHz) con MicroPython instalado, alimentada por USB. Un módulo serie de 3,3 V o un cable USB-serie para probar (no superar 3,3 V en RX/TX).
Cableado
TX (GP0) al RX del módulo, RX (GP1) al TX, masas comunes. Alimentar el módulo a 3,3 V o prever un adaptador de nivel.
Funcionamiento
uart.any() informa de los bytes recibidos sin bloquear; el búfer se divide en líneas terminadas en . Cada orden devuelve una línea de respuesta, formato fácil de ampliar.
Ejecución
Instala la versión MicroPython « Pico 2 » (mantén BOOTSEL, conecta el USB, suelta el .uf2) y copia el script vía Thonny. Arranque automático con el nombre main.py.
Variantes
Sube el baudios (921600) para flujos de datos, o pasa a UART1 (GP4/GP5) para dejar el shell MicroPython en USB.
uart-commandes.py
# Serveur de commandes sur UART0 (GP0 = TX, GP1 = RX) a 115200 bauds.
# Permet de dialoguer avec un module serie (GPS, modem, autre carte).
from machine import UART, Pin
import machine
import time
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
led = Pin(25, Pin.OUT)
buffers = b""
print("UART0 pret : 'l' bascule, 't' temperature, 's' etat")
def temperature():
adc = machine.ADC(4)
v = adc.read_u16() * 3.3 / 65535.0
return 27.0 - (v - 0.706) / 0.001721
while True:
if uart.any(): # octets disponibles ?
buffers += uart.read(uart.any())
while b"
" in buffers: # decoupage en lignes
ligne, buffers = buffers.split(b"
", 1)
cmd = ligne.strip().decode("utf-8", "ignore").lower()
if cmd == "l":
led.value(not led.value())
uart.write("LED=%d
" % led.value())
elif cmd == "t":
uart.write("T=%.1f
" % temperature())
elif cmd == "s":
uart.write("OK uptime=%d
" % (time.ticks_ms() // 1000))
time.sleep_ms(10)