python-gpio.py
Le script applicatif type sur le Linux de la X8 : entrée, sortie et journal CSV horodaté avec python3-gpiod. La carte devient un compteur autonome côté Linux, pendant que le core Arduino garde le temps réel.
Matériel requis
Une Arduino Portenta X8 (module ST STM32MP1 : quad Cortex-A7 Linux + double cœur Cortex-M4 temps réel, 8 Go eMMC, 2 Go LPDDR4, Wi-Fi/BT embarqués, option LTE). 1 LED + 330 Ω, 1 bouton (vers la broche, pull à définir selon le schéma).
Câblage
LED et bouton sur les broches du connecteur (carrier board), masses communes. Vérifier le niveau logique max de chaque broche.
Fonctionnement
Le script scrute la ligne bouton à 50 Hz, allume la LED et append une ligne ISO au CSV sur front montant ; finally libère les lignes du noyau.
Exécution
Côté Linux : accès SSH (USB-C routed ou réseau) sur l'image Portenta Linux, scripts bash/Python. Côté temps réel : Arduino IDE avec le core « Arduino Mbed OS Portenta X8 Boards », cœur M7 applicatif, flash via mboot depuis Linux.
Variantes
Remplacer la boucle par une attente d'événement (gpiod edge event), ou pousser le CSV vers le cloud via un service systemd.
python-gpio.py
#!/usr/bin/env python3
# Bouton + LED + trace CSV en Python avec python3-gpiod (API 1.x).
# sudo apt install python3-gpiod
import gpiod
from time import sleep
from datetime import datetime
PUCE = "gpiochip0" # gpiodetect
LED = 27 # broche carrier (exemple, voir schema)
BTN = 23
chip = gpiod.Chip(PUCE)
led = chip.get_line(LED)
led.request(consumer="app", type=gpiod.LINE_REQ_DIR_OUT, default_val=0)
btn = chip.get_line(BTN)
btn.request(consumer="app", type=gpiod.LINE_REQ_DIR_IN)
print("Appuis sur le bouton -> LED + /tmp/appuis.csv")
try:
dernier = btn.get_value()
while True:
etat = btn.get_value()
if etat != dernier and etat == 1:
led.value(1)
with open("/tmp/appuis.csv", "a") as f:
f.write(f"{datetime.now().isoformat()},appui\n")
print("appui enregistre")
else:
led.value(0)
dernier = etat
sleep(0.02)
finally:
led.release()
btn.release()