serial-core-mcu.py
El dúo de cerebros de la X8 se comunica por un puerto serie interno: este script envía la hora de Linux al core Arduino y decodifica sus mensajes JSON línea a línea. El protocolo de texto es el común denominador de los dos mundos.
Hardware
Un Arduino Portenta X8 (módulo ST STM32MP1: quad Cortex-A7 Linux + doble núcleo Cortex-M4 de tiempo real, 8 GB eMMC, 2 GB LPDDR4, Wi-Fi/BT integrados, opción LTE). Ninguno: el enlace es interno al módulo.
Cableado
Nada que cablear. Identificar el dispositivo /dev/tty* correcto del enlace MCU (dmesg tras el arranque).
Funcionamiento
pyserial abre el puerto interno a 115200; el script envía un JSON con marca de tiempo por segundo y readline() lee las respuestas del core, decodificadas si son válidas.
Ejecución
Lado Linux: acceso SSH (USB-C routed o red) sobre la imagen Portenta Linux, scripts bash/Python. Lado tiempo real: Arduino IDE con el core « Arduino Mbed OS Portenta X8 Boards », núcleo M7 de aplicación, grabado vía mboot desde Linux.
Variantes
Montar un protocolo de órdenes (encender LED, leer sensor lado MCU), o retransmitir a MQTT por el lado Linux.
serial-core-mcu.py
#!/usr/bin/env python3
# Pont Linux <-> core Arduino : trames texte sur le lien serie interne.
# sudo apt install python3-serial
# Lister les ports : ls /dev/tty* puis dmesg pour trouver le lien MCU.
import serial
import time
import json
PORT = "/dev/ttyMCU" # nom du port interne : voir dmesg/ls /dev
lien = serial.Serial(PORT, 115200, timeout=1)
print("Lien serie vers le core Arduino ouvert", PORT)
try:
while True:
# 1) Envoyer l'heure Linux au core.
trame = json.dumps({"t": int(time.time())}) + "\n"
lien.write(trame.encode())
# 2) Lire les messages du core (JSON par ligne).
ligne = lien.readline().decode(errors="ignore").strip()
if ligne:
try:
print("core dit :", json.loads(ligne))
except json.JSONDecodeError:
print("core (brut) :", ligne)
time.sleep(1)
except KeyboardInterrupt:
lien.close()
# Cote Arduino (X8-M7) : lire/ecouter le lien serie interne
# expose par le core (documente dans la doc Portenta X8).