uart-commandes.py

RP2350 (générique / cartes basées sur le RP2350) · Fichier : uart-commandes.py · Langage : Python · Usage : Servir des commandes sur un port UART (module série, GPS...)

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 RP2350 (double Cortex-M33) 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 le MicroPython « RP2350 » via BOOTSEL (.uf2), puis copier le script sur le lecteur. La broche de la LED utilisateur varie selon le fabricant : vérifier la documentation de la carte.

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)

← Retour à la fiche