Arduino UNO Q - Communication entre Linux et le MCU
L'Arduino UNO Q dispose de deux processeurs : un MCU STM32 exécutant des programmes Arduino et un MPU Linux Qualcomm exécutant Python. Dans ce tutoriel, vous apprendrez comment ces deux processeurs se parlent en utilisant le Bridge — le mécanisme clé qui rend l'Arduino UNO Q unique.
Dans ce tutoriel, vous apprendrez :
- Comment le Bridge fonctionne et ce que fait la bibliothèque Arduino_RouterBridge
- Comment le côté Linux (Python) peut appeler des fonctions côté MCU
- Comment le côté MCU peut renvoyer des données au côté Linux
- Comment passer des arguments et recevoir des valeurs de retour via le Bridge

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Fonctionnement du Bridge
L'Arduino UNO Q utilise une liaison série interne entre les deux processeurs — cela est géré automatiquement par la bibliothèque Arduino_RouterBridge. Vous n'ouvrez jamais cette liaison directement dans votre code.
※ Note:
/dev/ttyHS1 (côté Linux) et Serial1 (côté MCU) sont réservés par le bridge routeur. Ne les ouvrez jamais dans votre code — cela briserait la communication Bridge.
La communication suit un modèle requête → réponse — comme un appel téléphonique :
- Linux (Python) fait toujours l'appel — il demande au MCU de faire quelque chose ou demande une valeur.
- Le MCU répond toujours — il exécute la fonction demandée et peut renvoyer une valeur comme réponse.
- Le MCU n'appelle jamais Linux de lui-même — il répond seulement quand Linux demande.
| Qui | Ce qu'il fait | API |
|---|---|---|
| Linux (Python) | Envoie une requête au MCU | Bridge.call("fn") |
| MCU (C/C++) | Reçoit la requête, exécute la fonction, répond | Bridge.provide_safe("fn", fn) |
Cela signifie que les données peuvent circuler dans les deux sens — mais Linux commence toujours la conversation :
- Linux → MCU : Linux envoie une commande (ex. "allume la LED") et le MCU l'exécute.
- MCU → Linux : Linux demande "quelle est la valeur du capteur ?" et le MCU répond avec les données.
Le MCU ne peut pas démarrer une conversation de lui-même. Si le MCU doit rapporter quelque chose (ex. un bouton a été appuyé), la solution est l'interrogation : le MCU sauvegarde l'événement dans une variable, et Python vérifie cette variable en appelant régulièrement une fonction Bridge.call("get_event").
À Propos du Moniteur vs Série
Sur Arduino UNO Q, il existe deux façons d'afficher des sorties depuis le MCU :
| Méthode | Visible dans la Console App Lab | Bibliothèque requise |
|---|---|---|
| Monitor.println() | ✅ Oui | Arduino_RouterBridge |
| Serial.println() | ❌ Non | Aucune (intégrée) |
Utilisez Monitor.println() quand vous voulez voir la sortie MCU dans Arduino App Lab. La sortie Serial va aux broches UART uniquement et n'est pas visible dans App Lab.
Exemple 1 : Linux Appelle le MCU (Linux → MCU)
C'est le modèle le plus courant. Le script Python appelle une fonction sur le MCU — par exemple, pour allumer ou éteindre une LED.
Code MCU
Code Python
Étapes Rapides
Première utilisation de l'Arduino UNO Q ? Suivez le tutoriel Démarrer avec Arduino UNO Q avant de continuer.
- Connecter : Branchez le câble USB-C sur l'Arduino UNO Q.
- Ouvrir Arduino App Lab : Lancez Arduino App Lab et attendez qu'il détecte votre carte.
- Créer une nouvelle application : Cliquez sur le bouton Créer une nouvelle application.

- Donnez un nom à l'application, par exemple : LinuxMcuComm1
- Cliquez sur Créer pour confirmer.

- Coller le programme MCU : Copiez le code MCU ci-dessus et collez-le dans sketch/sketch.ino.
- Coller le code Python : Copiez le code Python ci-dessus et collez-le dans le fichier Python de l'application.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- Téléverser : Cliquez sur le bouton Exécuter dans Arduino App Lab.

Sortie de la Console App Lab
Fonctionnement
- Le MCU enregistre une fonction set_led via Bridge.provide_safe().
- Le script Python appelle Bridge.call("set_led", 1) — cela envoie une requête RPC au MCU.
- Le MCU exécute set_led(1) et affiche une confirmation via Monitor.println().
- Bridge.call() retourne "OK" quand la fonction se termine.
Exemple 2 : Le MCU Envoie des Données à Linux (MCU → Linux via valeur de retour)
Dans ce modèle, le côté Python demande une lecture de capteur au MCU. Le MCU lit le capteur et retourne la valeur à Python via le Bridge.
Code MCU
Code Python
Sortie de la Console App Lab
Fonctionnement
- La fonction MCU lit un capteur (ici simulé avec analogRead(A0)) et retourne la valeur sous forme de chaîne.
- Côté Python, Bridge.call("get_value") retourne cette chaîne — Python peut ensuite l'analyser et l'utiliser.
- C'est le modèle standard pour lire n'importe quel capteur MCU depuis le côté Linux.
Exemple 3 : Passage d'Arguments de Linux au MCU
Le côté Python peut passer des arguments à la fonction MCU. C'est utile pour les commandes qui incluent des paramètres — par exemple, définir un angle cible, un seuil ou une valeur de vitesse.