process-shell.ino

Arduino Tian (id : tian) · Fichier : process-shell.ino · Langage : Arduino · Usage : Exécuter une commande shell côté Linux et lire sa sortie

La classe Process est le shell à distance du croquis : cat /proc/loadavg donne la charge du Linux, la température du SoC complète le tableau. Le MCU surveille ainsi le système qui l'accompagne, en dix lignes.

Matériel requis

Une Arduino Tian (Microchip SAM3X8E + Linux TianOS sur Atheros AR9344, double port USB, Ethernet et Wi-Fi). Aucun composant externe.

Câblage

Rien à câbler ; le moniteur série USB affiche les résultats.

Fonctionnement

runShellCommand exécute la commande dans le Linux via le démon bridge ; readString lit stdout jusqu'à la fin du processus. running() sert de barrière de synchronisation.

Exécution

Arduino IDE avec la carte Arduino Tian : téléversement par le port USB « Native ». Côté Linux : ssh root@arduino.local. La bibliothèque Bridge est identique à celle de la Yun.

Variantes

runShellCommandAsynchronously + callback pour ne pas bloquer, ou écrire dans un fichier Linux avec FileIO pour journaliser.

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);
}

← Retour à la fiche