process-shell.ino

Arduino Yún · Archivo : process-shell.ino · Lenguaje : Arduino · Uso : Exécuter une commande shell côté Linux et lire sa sortie

La clase Process es el shell remoto del sketch: cat /proc/loadavg da la carga del Linux y la temperatura del SoC completa el cuadro. El MCU supervisa el sistema que lo acompaña, en diez líneas.

Hardware

Un Arduino Yun (ATmega32U4 + Linux Linino sobre un Atheros AR9331, Wi-Fi y Ethernet, ranura microSD). Ningún componente externo.

Cableado

Nada que cablear; el monitor serie USB muestra los resultados.

Funcionamiento

runShellCommand ejecuta la orden en el Linux vía el demonio bridge; readString lee stdout hasta el fin del proceso. running() sirve de barrera de sincronización.

Ejecución

Arduino IDE: selecciona el puerto serie para grabar y luego la placa Arduino Yun para el monitor. Por el lado Linux: ssh root@arduino.local (contraseña de la distribución). La app Yunwizard configura la red.

Variantes

runShellCommandAsynchronously + callback para no bloquear, o escribir en un archivo Linux con FileIO para registrar.

process-shell.ino

// Process : le croquis lance une commande Linux et recupere la sortie.
#include <Bridge.h>
#include <Process.h>

void setup() {
  Bridge.begin();
  Serial.begin(9600);
  while (!Serial);
}

void loop() {
  Process charge;
  charge.runShellCommand("cat /proc/loadavg");

  String ligne = charge.readString();   // 1re ligne = charge 1/5/15 min
  while (charge.running());             // attend la fin du flux

  Serial.print("charge systeme : ");
  Serial.println(ligne);

  // Autre exemple : temperature du SoC (varie selon la distribution)
  Process temp;
  temp.runShellCommand("cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null");
  String t = temp.readString();
  while (temp.running());
  if (t.length() > 4) {
    Serial.print("SoC : ");
    Serial.println(t.toFloat() / 1000.0);
  }

  delay(5000);
}

← Volver a la ficha