Learning   Examples | Foundations | Hacking | Links

Examples > ShellCommands

Shell Commands

This sketch demonstrates running Linux shell commands on an Arduino Yún.

It runs the wifiCheck script (located at /usr/bin/pretty-wifi-info.lua) on the Linux processor, then uses grep to get the signal strength.

On the 32U4, parseInt() is called to read the WiFi signal strength as an integer, and uses that number to fade an LED with analogWrite().

Hardware Required

  • Arduino Yún
  • Yún connected to a wireless network
  • 220-0hm resistor
  • LED

Circuit

LED connected to digital pin 9 through a 220-ohm resistor.

Code

Include the Process class in your sketch. #include <Process.h>

In setup(), you'll want to initialize Bridge and start a serial connection. Before running the rest of the sketch, wait for a serial connection to become active.

void setup() {
  Bridge.begin();
  Serial.begin(9600);

  while (!Serial);
}

Create a named Process with which you'll use to run the WiFi status script and grep.

void loop() {
  Process p;

Pass runShellCommand() the path of the script you wish to run, along with any additional commands. In this case, you'll call "grep Signal" to pull out just the signal strength of the WiFi connection.

p.runShellCommand("/usr/bin/pretty-wifi-info.lua | grep Signal");

Wait until the process finishes so you get the entire output

while(p.running());

Once the process has finished running, use parseInt() to look for an integer that represents the signal strength. It should be in the range of 0 - 100. Map the result to a value between 0 and 255 with map() and use that value to adjust the brightness of the LED on pin 9 with analogWrite(). Print the signal strength to the serial monitor and wait for a few seconds before starting again.

while (p.available()) {
    int result = p.parseInt();         
    int signal = map(result, 0, 100, 0, 255);  
    analogWrite(9, signal);    
    Serial.println(result);    
  }
  delay(5000);
}

The LED should change its brightness as the WiFi signal strength fluctuates.

/*
  Running shell commands using Process class.

 This sketch demonstrate how to run linux shell commands
 using an Arduino Yún. It runs the wifiCheck script on the linux side
 of the Yún, then uses grep to get just the signal strength line.
 Then it uses parseInt() to read the wifi signal strength as an integer,
 and finally uses that number to fade an LED using analogWrite().

 The circuit:
 * Arduino Yún with LED connected to pin 9

 created 12 Jun 2013
 by Cristian Maglie
 modified 25 June 2013
 by Tom Igoe

 This example code is in the public domain.

 */


#include <Process.h>

void setup() {
  Bridge.begin();   // Initialize the Bridge
  Serial.begin(9600);   // Initialize the Serial

  // Wait until a Serial Monitor is connected.
  while(!Serial);
}

void loop() {
  Process p;
  // This command line runs the WifiStatus script, (/usr/bin/pretty-wifi-info.lua), then
  // sends the result to the grep command to look for a line containing the word
  // "Signal:"  the result is passed to this sketch:
  p.runShellCommand("/usr/bin/pretty-wifi-info.lua | grep Signal");

  // do nothing until the process finishes, so you get the whole output:
  while(p.running());  

  // Read command output. runShellCommand() should have passed "Signal: xx&":
  while (p.available()) {
    int result = p.parseInt();          // look for an integer
    int signal = map(result, 0, 100, 0, 255);   // map result from 0-100 range to 0-255
    analogWrite(9, signal);         // set the brightness of LED on pin 9
    Serial.println(result);         // print the number as well
  }
  delay(5000);  // wait 5 seconds before you do it again
}


 

Share