pont_serie.py
Le 32U4 reste un Arduino autonome : ce sketch de commande PWM, piloté par pyserial depuis l'hôte, montre le duo dans sa forme brute — sans bibliothèque, protocole au choix. Le pont que tout projet finit par utiliser.
Matériel requis
Une LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 ou Linux) avec son coprocesseur ATmega32U4 compatible Arduino Leonardo sur les connecteurs 50 broches. 1 actionneur sur D9 (LED + 330 Ω, ou transistor + lampe).
Branchement
Le port série interne MCU apparaît comme COM3 (Windows) ou un tty interne (Linux) — le vérifier dans le gestionnaire de périphériques ou dmesg.
Fonctionnement
Le sketch MCU lit une ligne entière, mappe 0-100 vers le PWM 8 bits et accuse réception ; Python écrit/lit en vis-à-vis. Le sleep de 2 s couvre le reset USB du 32U4 à l'ouverture du port. L'ATmega32U4 est un vrai Leonardo : brochez-le en « Arduino Leonardo » dans l'IDE via son port COM interne. Côté hôte, la bibliothèque DFRobot lattepanda (Python) dialogue avec lui par série.
Pour aller plus loin
Protocole JSON sur ce canal, ou watchdog : si plus de consigne depuis 5 s, le MCU coupe le PWM.
pont_serie.py
#!/usr/bin/env python3
# Cote MCU (a televerser d'abord, carte « Arduino Leonardo ») :
# void setup(){ Serial.begin(9600); }
# void loop(){
# if (Serial.available()){
# int v = Serial.readString().toInt();
# analogWrite(9, map(v, 0, 100, 0, 255)); // consigne 0-100 -> PWM D9
# Serial.print("recu "); Serial.println(v);
# }
# }
# Cote hote : envoyer des consignes et lire les accusés.
import serial, time
port = serial.Serial("COM3", 9600, timeout=1) # port du MCU (Linux : /dev/ttyS*)
time.sleep(2) # le 32U4 se reinitialise a l'ouverture
for consigne in range(0, 101, 10):
port.write(f"{consigne}\n".encode())
reponse = port.readline().decode().strip()
print(f"consigne {consigne:3d} -> MCU: {reponse}")
time.sleep(0.3)
port.close()