uart-commandes.py
Un mini-serveur de commandes sur UART0 (GP0/GP1) : les modules série classiques (GPS, modem cellulaire, autre microcontrôleur) peuvent basculer la LED, lire la température ou interroger la carte avec des lignes texte simples.
Matériel requis
Une Raspberry Pi Pico (RP2040 double Cortex-M0+ @ 133 MHz) avec MicroPython installé, alimentée par USB. Un module série 3,3 V ou un câble USB-série pour tester (ne pas dépasser 3,3 V sur RX/TX).
Câblage
TX (GP0) vers RX du module, RX (GP1) vers TX, masses communes. Alimenter le module en 3,3 V ou prévoir un adaptateur de niveau.
Fonctionnement
uart.any() indique les octets reçus sans bloquer ; le tampon est découpé en lignes terminées par . Chaque commande renvoie une ligne de réponse, format simple à étendre.
Exécution
Installer MicroPython si besoin (maintenir BOOTSEL, brancher l'USB, déposer le fichier .uf2), puis copier le script sur le lecteur de la carte ou via Thonny. Le script démarre seul s'il s'appelle main.py.
Variantes
Augmenter le débit (921600) pour un flux de données, ou passer sur UART1 (GP4/GP5) pour laisser le shell MicroPython sur 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)