🛠 Pont série entre le MCU Arduino et le SoC x86

LattePanda 3 Delta (id: lattepanda-3) · intermediaire · Schéma : IMG-lattepanda-3-intermediaire-1-pont-serie.svg — Diagramme du port série interne : l'ATmega32U4 envoie des trames vers le port COM virtuel lu par un script Python sur le Celeron N5105.

Objetivos

Comprender el canal de comunicación interno de la placa: el ATmega32U4 es un verdadero Arduino Leonardo que se enumera en un puerto COM virtual conectado al procesador x86. Este es el canal que utiliza pinpong/Firmata internamente; aquí lo redirigimos con nuestro propio protocolo: un sketch de C++ en el lado del MCU que envía medidas con marca de tiempo, y un script de Python en el lado de Linux que las lee con pyserial. Al final, dominarás los dos lenguajes de la placa (C++ en el MCU, Python en el SoC) y su puente.

Material

Código completo

Lado del MCU — sketch de Arduino IDE (placa «Arduino Leonardo», puerto del MCU):

// Pont série : envoie une trame horodatée vers le SoC x86.
const uint8_t LED = 13;
unsigned long last = 0;
bool on = false;

void setup {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);            // USB série interne vers le CPU hôte
}

void loop {
  if (millis - last >= 1000) {
    last = millis;
    on = !on;
    digitalWrite(LED, on ? HIGH : LOW);
    // Trame simple : LED=<etat>;T=<millis>
    Serial.print("LED=");
    Serial.print(on ? 1 : 0);
    Serial.print(";T=");
    Serial.println(millis);
  }
}

Lado del SoC — pont_serie.py (Linux: /dev/ttyACM0):

import serial

port = serial.Serial("/dev/ttyACM0", 9600, timeout=1)
print("Écoute du MCU... (Ctrl+C pour quitter)")
try:
    for ligne in port:
        texte = ligne.decode("utf-8", errors="replace").strip
        if not texte:
            continue
        champs = dict(p.split("=") for p in texte.split(";"))
        etat = "ALLUMÉE" if champs.get("LED") == "1" else "éteinte"
        print(f"MCU: LED {etat} depuis {champs.get('T')} ms")
finally:
    port.close

Verificación esperada

La terminal del SoC muestra cada segundo «MCU: LED ENCENDIDA desde … ms» de forma alternante, sincronizado con el LED D13. Las dos mitades de la placa se comunican sin ningún cable externo.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales