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 carte générique à microcontrôleur RP2040 (double Cortex-M0+) programmée en MicroPython. 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
Flasher MicroPython via BOOTSEL (fichier .uf2), puis copier le script sur le lecteur de la carte. Vérifier la broche de la LED utilisateur de votre carte (souvent GP25) et l'adapter si besoin.
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)