🛠 runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
Objectifs
Le superpouvoir de la Yún : le microcontrôleur pilote un vrai Linux. La bibliothèque Process et sa méthode runShellCommandOnLinux lancent une commande shell côté AR9331 et renvoient la sortie au sketch, ligne par ligne. Cas d'école : tester la connectivité (ping), lire l'heure système, interroger des capteurs système — tout ce qu'un 8 bits ne sait pas faire.
Matériel
- 1 Arduino Yún connectée à votre réseau (voir le tuto configuration WiFi)
- PC avec Moniteur série (USB) pour voir les résultats
- Aucun câblage nécessaire : tout se passe entre les deux processeurs
Code complet
// Lancer « ping » côté Linux et afficher le résultat dans le sketch.
#include <Bridge.h>
#include <Process.h>
void setup {
Bridge.begin;
Console.begin;
while (!Console) { } // patiente sur certains environnements
// 1) Commande simple : connaître l'uptime de Linux
Process uptime;
uptime.runShellCommandOnLinux("uptime");
Console.println(F("--- uptime ---"));
while (uptime.available) {
String ligne = uptime.readStringUntil('\n');
Console.println(ligne);
}
// 2) Test de connectivité : ping 1 fois google.com, analyse du résultat
Process ping;
ping.begin("ping");
ping.addParameter("-c");
ping.addParameter("1");
ping.addParameter("google.com");
ping.runShellCommandOnLinux(ping);
String sortie = ping.readString;
bool enLigne = sortie.indexOf("bytes from") >= 0;
Console.println(enLigne ? F("INTERNET: OK") : F("INTERNET: KO"));
// 3) La valeur de retour d'une commande shell (code de sortie)
Process test;
int rc = test.runShellCommandOnLinux("ping -c 1 -W 2 1.1.1.1");
Console.print(F("code retour ping 1.1.1.1 = ")); Console.println(rc);
}
void loop { }
Vérification attendue
Le Moniteur affiche la ligne d'uptime de Linino OS (charges moyennes), « INTERNET: OK » si la carte sort sur le web, et le code retour shell (0 = succès, non-zéro = échec — la convention Unix remonte directement). Débranchez le câble Ethernet / coupez le WiFi : le ping passe à KO et rc devient non nul. Vous avez un microcontrôleur qui « réfléchit » avec les outils d'un OS.
Erreurs fréquentes
- Attendre la sortie de ping en temps réel : runShellCommandOnLinux attend la FIN de la commande ; pour du streaming, utilisez runShellCommand + lecture available en boucle.
- Oublier de lire la sortie : si vous ne consommez pas available/readString, le buffer se remplit et la commande peut bloquer.
- Injection de commande : ne jamais concaténer une entrée (capteur, requête HTTP) dans une chaîne passée à runShellCommandOnLinux sans validation — c'est du shell réel sur un OS réel.
- Croire que la commande tourne sur le 32U4 : elle tourne sur Linux ; le 32U4, lui, reste bloqué dans setup pendant l'exécution.
- Commandes indisponibles : Linino OS est un OpenWrt minimal (busybox) ; certains binaires usuels (curl selon les versions, python complet) ne sont pas installés par défaut — installez-les avec opkg (voir le tuto avancé).
- Codes de retour : runShellCommandOnLinux renvoie l'entier de fin de commande ; un -1 ou un timeout signifie souvent que le Bridge a perdu Linux (redémarrage, panic) — reprenez la main avec Bridge.connected.
Autres tutoriels pour cette carte
- Premiers pas sur la Yún : Bridge, Console et LED
- Connecter la Yún au WiFi et piloter une broche depuis le navigateur
- Envoyer un capteur analogique sur le réseau : potentiomètre et Bridge REST
- L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
- Alerte email : bouton sur la Yún et envoi via sendmail
- Serveur web embarqué : YunServer, YunClient et pages dynamiques
Exemples de code pour cette carte
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino