🛠 Avoir une console série sur une carte sans pont USB (UART0)
Objectifs
Une carte RP2040 minimaliste (Zero, Pico-clone sans pont) n'a pas de puce USB-série dédiée : le REPL MicroPython ou printf passent par l'USB natif du RP2040. Mais quand l'USB est occupé (mode device HID, alimentation sur batterie) ou que les broches USB ne sont pas soudées, la solution est l'UART : le RP2040 possède deux UART routables sur n'importe quelle GPIO (datasheet RP2040). Tu vas câbler un adaptateur USB↔TTL et obtenir une console de debug indépendante.
Matériel
- 1 × carte RP2040 générique
- 1 × adaptateur USB↔UART TTL (FTDI Friend, CP2102, CH340…) réglé sur 3,3 V si sélectable — le RP2040 est en logique 3,3 V
- 3 × câbles : GP0 (TX0) → RX de l'adaptateur, GP1 (RX0) → TX, GND ↔ GND (les deux masses doivent être reliées !)
- Ne relie pas le VCC de l'adaptateur au VSYS/3V3 de la carte si elle est déjà alimentée par ailleurs
Code complet
# main.py — REPL et print sur UART0 (GP0=TX, GP1=RX), 115200 bauds
from machine import UART, Pin
import time
# Sur le port rp2, l'UART0 matériel est déjà écoûté par le REPL :
# un simple reset suffit souvent à obtenir le REPL sur GP0/GP1.
# Pour un flux applicatif dédié :
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
uart.write('Carte RP2040 prete (UART0 115200 8N1)\r\n')
compteur = 0
while True:
compteur += 1
uart.write('tick %d\r\n' % compteur)
if uart.any: # données reçues du PC
data = uart.read
uart.write('recu: %s\r\n' % data.decode(errors='replace'))
time.sleep_ms(500)
Vérification attendue
Dans ton terminal série (115200 8N1, picocom, PuTTY, Thonny), les lignes tick N défilent ; un caractère tapé est renvoyé en écho. Ouvre ensuite le REPL MicroPython sur cet UART (Ctrl-C) : import machine fonctionne — tu as un shell complet sans USB. Le REPL UART du port rp2 tourne par défaut à 115200 (MicroPython RP2 quickref).
Erreurs fréquentes
- TX relié à TX au lieu de croiser : TX vers RX, l'adaptateur écoute pendant que la carte parle.
- Oublier la masse commune : rien, ou des caractères parasites.
- Adaptateur en 5 V sur une broche 3,3 V : le RP2040 n'est pas 5 V tolérant, vérifie le niveau logique avant de câbler — risque de dommage.
- Mauvais port série côté PC : sous Linux
ttyUSB0/ttyACM0, sous Windows le port COM de l'adaptateur (Gestionnaire de périphériques). - Confondre l'UART applicatif et le REPL : les deux se partagent UART0 ; si ton script monopolise l'UART, le REPL ne répond plus — relâche le bus (
uart.deinit). - Broches GP0/GP1 déjà utilisées par ton montage : l'UART du RP2040 est mappable sur toute GPIO, choisis d'autres broches (
UART(1, tx=Pin(4), rx=Pin(5))).
Autres tutoriels pour cette carte
- Piloter la LED RGB embarquée WS2812 d'une carte RP2040 générique
- Jouer une mélodie avec un buzzer passif et le PWM
- Afficher sur un OLED I2C SSD1306 et déboguer le bus
- Logger sur carte microSD en SPI (mode carte)
- Interruptions GPIO et alarmes matérielles avec le Pico SDK
- Transformer la carte en clavier USB HID avec TinyUSB
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython