Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/ShellCommands

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Shell-команды[1]

Этот пример демонстрирует запуск shell-команд Linux на Arduino Yun.

Он запускает на процессоре Linux скрипт wifiCheck (расположен по пути /usr/bin/pretty-wifi-info.lua), а затем при помощи команды grep извлекает информацию об уровне сигнала.

Кроме того, на процессоре 32U4 скетч использует функцию parseInt() для того, чтобы сосчитать данные об уровне WiFi-сигнала в целочисленную переменную. Далее эти данные при помощи функции analogWrite() передаются на светодиод.

Необходимое оборудование

  • Плата Arduino Yun;
  • 220-омовый резистор;
  • Светодиод;

Цепь

Yun подключена к беспроводной сети. Светодиод через 220-омовый резистор подключен к 9-ому цифровому контакту.

Код

Подключаем к скетчу класс Process.

  1. #include <Process.h>

В секции setup() инициализируем Bridge и начинаем последовательную передачу данных. Перед тем, как заняться оставшейся частью скетча, ждем активации последовательного соединения.

  1. void setup() {
  2.   Bridge.begin();
  3.   Serial.begin(9600);
  4.  
  5.   while (!Serial);
  6. }

Создаем процесс под названием «p» – для запуска скрипта, проверяющего WiFi-статус, и команды grep.

  1. void loop() {
  2.   Process p;

В функции runShellCommand() указываем путь к скрипту, который вы хотите запустить, а также дополнительную команду. В данном случае это «grep Signal» – команда, извлекающая информацию об уровне сигнала WiFi-соединения.

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

Ждем завершения процесса, чтобы получить весь результат полностью.

  1. while(p.running());

После завершения процесса вписываем функцию parseInt() для поиска целого числа, отвечающего за уровень сигнала – оно должно быть в диапазоне от 0 до 100. Затем при помощи функции map() адаптируем этот результат под диапазон от 0 до 255, чтобы передать это значение на светодиод при помощи функции analogWrite(). Далее выводим информацию об уровне сигнала на Serial Monitor и ждем несколько секунд, чтобы начать снова.

  1. while (p.available()) {
  2.     int result = p.parseInt();          
  3.     int signal = map(result, 0, 100, 0, 255);  
  4.     analogWrite(9, signal);    
  5.     Serial.println(result);    
  6.   }
  7.   delay(5000);
  8. }

В результате светодиод должен поменять свою яркость в соответствии с изменением уровня WiFi-сигнала.

  1. /*
  2. Запуск shell-команд при помощи класса Process
  3. Этот скетч демонстрирует, как при помощи Arduino Yun запускать shell-команды Linux.
  4. Он запускает скрипт WifiCheck на Linux-части Yun, а затем использует команду grep,
  5. чтобы извлечь информацию о мощности сигнала.
  6. После этого он использует функцию parseInt(),
  7. чтобы записать данные об уровне сигнала в целочисленную переменную и,
  8. наконец, использует это число, чтобы изменить яркость светодиода при помощи функции analogWrite().
  9.  
  10. Цепь:
  11. * Светодиод, подключенный к 9-ому цифровому контакту
  12.  
  13. Создан 12 июня 2013 Кристианом Мэгли (Cristian Maglie),
  14. модифицирован 26 июня 2013 Томом Иго (Tom Igoe).
  15.  
  16. Этот код не защищен авторским правом.
  17.  
  18.  */
  19.  
  20. #include <Process.h>
  21.  
  22. void setup() {
  23.   Bridge.begin();   // инициализируем Bridge
  24.   Serial.begin(9600);   // инициализируем последовательную передачу данных
  25.  
  26.   // Ждем подключения Serial Monitor:
  27.   while(!Serial);
  28. }
  29.  
  30. void loop() {
  31.   Process p;
  32.   // Эта команда запускает скрипт WifiStatus (/usr/bin/pretty-wifi-info.lua),
  33.   // а затем отсылает результат команде grep,
  34.   // которая будет искать строку со словом «Signal:»
  35.   p.runShellCommand("/usr/bin/pretty-wifi-info.lua | grep Signal");
  36.  
  37.   // Ничего не делаем, пока процесс не завершится, чтобы получить весь результат полностью:
  38.   while(p.running());  
  39.  
  40.   // Считываем результат, извлеченный командой grep.
  41.   // Он должен выглядеть примерно так: «Signal: xx&»:
  42.   while (p.available()) {
  43.     int result = p.parseInt();          // ищем целое число
  44.     int signal = map(result, 0, 100, 0, 255);   // адаптируем диапазон 0-100 под диапазон 0-255
  45.     analogWrite(9, signal);         // задаем яркость для светодиода, подключенного к 9-ому цифровому контакту
  46.     Serial.println(result);         // выводим результат на Serial Monitor
  47.   }
  48.   delay(5000);  // ждем 5 секунд до того, как начать снова
  49. }

См.также

Внешние ссылки

  1. Arduino - Shell Commands