🛠 runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
Objetivos
El superpoder de la Yún: el microcontrolador controla un Linux real. La biblioteca Process y su método runShellCommandOnLinux lanzan un comando shell en el AR9331 y devuelven la salida al sketch, línea por línea. Caso de estudio: probar la conectividad (ping), leer la hora del sistema, consultar sensores del sistema — todo aquello que un microcontrolador de 8 bits no sabe hacer.
Material
- 1 Arduino Yún conectada a tu red (ver el tutorial de configuración WiFi)
- PC con Monitor serie (USB) para ver los resultados
- No se requiere cableado: todo ocurre entre los dos procesadores
Código completo
// 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 { }
Verificación esperada
El Monitor muestra la línea de uptime de Linino OS (promedios de carga), « INTERNET: OK » si la tarjeta tiene salida a la web, y el código de retorno del shell (0 = éxito, distinto de cero = fallo — la convención de Unix se transmite directamente). Desconecta el cable Ethernet / corta el WiFi: el ping pasa a KO y rc se vuelve distinto de cero. Tienes un microcontrolador que «piensa» con las herramientas de un SO.
Errores frecuentes
- Esperar la salida de ping en tiempo real: runShellCommandOnLinux espera al FINAL del comando; para streaming, usa runShellCommand + lectura de available en bucle.
- Olvidar leer la salida: si no consumes available/readString, el buffer se llena y el comando puede bloquearse.
- Inyección de comandos: nunca concatenes una entrada (sensor, petición HTTP) en una cadena pasada a runShellCommandOnLinux sin validación — es un shell real sobre un SO real.
- Creer que el comando se ejecuta en el 32U4: se ejecuta en Linux; el 32U4, por su parte, permanece bloqueado en setup durante la ejecución.
- Comandos no disponibles: Linino OS es un OpenWrt mínimo (busybox); algunos binarios habituales (curl según versiones, python completo) no están instalados por defecto — instálalos con opkg (ver el tutorial avanzado).
- Códigos de retorno: runShellCommandOnLinux devuelve el entero de finalización del comando; un -1 o un timeout suele significar que el Bridge ha perdido la conexión con Linux (reinicio, panic) — recupera el control con Bridge.connected.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino