🛠 Pont série SoC ↔ MCU : le tunnel x86 vers ATmega32U4
Objectifs
Mettre en place le motif central de la LattePanda Alpha : le pont série entre le PC x86 (Core m3-7Y30) et son propre coprocesseur ATmega32U4, reliés par un USB interne invisible de l'extérieur. Le MCU émet des trames de mesure sur Serial, un script Python côté hôte les lit ligne par ligne. C'est exactement le schéma du tutoriel officiel « python_arduino_bridge » de DFRobot, sans Firmata.
Matériel
- LattePanda Alpha (Windows ou Linux) + alimentation conforme 12 V/3 A
- IDE Arduino (côté MCU) et Python 3 avec pyserial côté hôte :
pip install pyserial - Sous Linux : ajouter l'utilisateur au groupe
dialout(sudo usermod -aG dialout $USER, puis reconnexion) - Éventuellement un potentiomètre entre 5 V, A0 et GND pour voir des valeurs varier (réf. ADC 5 V implicite Leonardo)
Code complet
Côté firmware (IDE Arduino, carte « Arduino Leonardo ») :
// stream_analog.ino — envoie A0 au PC hôte à 10 Hz
void setup { Serial.begin(9600); }
void loop {
Serial.println(analogRead(A0)); // valeur ADC 10 bits : 0..1023
delay(100);
}
Côté hôte (sur l'Alpha elle-même, Windows ou n'importe quelle distribution Linux) :
# host_reader.py — pas besoin de Firmata, tramage série simple
import serial # pip install pyserial
# Windows : 'COM5' | Linux : '/dev/ttyACM0' (utilisateur dans le groupe 'dialout')
with serial.Serial('COM5', 9600, timeout=1) as ser:
for line in ser:
try:
raw = int(line.strip)
print(f'ADC={raw} ({raw * 5.0 / 1023:.2f} V en supposant une référence 5 V)')
except ValueError:
pass # ignorer les lignes partielles au démarrage
Vérification attendue
Le terminal de l'hôte affiche environ 10 lignes par seconde : ADC=0 (0.00 V) au repos, et des valeurs qui montent vers 1023 si un potentiomètre est câblé sur A0. Ctrl+C arrête le script sans toucher au firmware, qui continue d'émettre en autonomie.
Erreurs fréquentes
- Mauvais port : sous Windows, vérifier le numéro COM dans le gestionnaire de périphériques ; sous Linux,
ls /dev/ttyACM*. - Lignes incomplètes au premier octet après ouverture du port : le
try/except ValueErrorest indispensable. - Deux programmes connectés au même port (moniteur série de l'IDE ouvert en parallèle du script) : le script ne reçoit plus rien.
- Oublier le
delay(100)côté MCU : l'hôte est inondé et l'affichage devient illisible.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton.pyPythonservo.pyPythonanalogique.pyPythonrespiration.pyPythonneopixel.pyPython