uart-commandes.py
A mini command server on UART0 (GP0/GP1): classic serial modules (GPS, cellular modem, another microcontroller) can toggle the LED, read the temperature or poll the board with simple text lines.
Hardware
A generic RP2040 (dual Cortex-M0+) board programmed with MicroPython. A 3.3 V serial module or a USB-serial cable to test (never exceed 3.3 V on RX/TX).
Wiring
TX (GP0) to module RX, RX (GP1) to module TX, common grounds. Power the module at 3.3 V or add a level shifter.
How it works
uart.any() reports received bytes without blocking; the buffer is split on lines. Each command returns one reply line, a format that is easy to extend.
Running it
Flash MicroPython via BOOTSEL (.uf2 file), then copy the script to the board drive. Check your board's user LED pin (often GP25) and adapt if needed.
Variants
Raise the baud rate (921600) for data streams, or move to UART1 (GP4/GP5) to keep the MicroPython shell on 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)