Arduino:Примеры/FileWriteScript
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Запись в файл shell-скрипта[1]
Этот пример показывает, как при помощи класса FileIO записывать данные в файл, находящийся в файловой системе Yun. Скетч сначала создаст файл shell-скрипта (в директории «tmp»), а затем запустит его выполнение.
Необходимое оборудование
- Плата Arduino Yun;
Цепь
Для этого примера цепи строить не нужно.
Код
Подключаем класс FileIO – для коммуникации с файловой системой.
#include <FileIO.h>
В секции setup() инициализируем Bridge, FileSystem и Serial (последовательную передачу данных). Ждем активации соединения, а затем вызываем пользовательскую функцию uploadScript(), которая загрузит ваш файл.
void setup() {
Bridge.begin();
Serial.begin(9600);
while(!Serial); // ждем подключения последовательного порта
Serial.println("File Write Script example\n\n"); // "Пример создания и записи в файл для shell-скрипта"
FileSystem.begin();
uploadScript();
}
Секция loop() будет просто выполнять ваш скрипт каждые 5 секунд. Это будет осуществляться при помощи другой пользовательской функции – runScript().
void loop() {
runScript();
delay(5000);
}
Функция uploadScript() создаст в файловой системе shell-скрипт, который будет следить за сетевым трафиком WiFi-интерфейса. Создаем файл, а затем открываем его – посредством создания экземпляра класса File и вызова функции FileSystem.open(), где указывается, в каком месте нужно создать скрипт. Этим местом будет директория «tmp», находящаяся в RAM – для того, чтобы сэкономить места в ограниченной FLASH-памяти, занимающейся циклами считывания/записи.
void uploadScript() {
File script = FileSystem.open("/tmp/wlan-stats.sh", FILE_WRITE);
Записываем содержимое скрипта в файл при помощи функции File.print(). Начинаем с заголовка «#!/bin/s», а затем вписываем ifconfig – это утилита командной строки для управления сетевыми интерфейсами. Вам нужен будет WiFi-интерфейс, поэтому далее вписываем «wlan0». Затем вписываем grep – это утилита, которая будет выискивать результат ifconfig. Вам нужно количество полученных байтов, поэтому будем искать слова «RX bytes». Теперь закрываем файл.
script.print("#!/bin/sh\n");
script.print("ifconfig wlan0 | grep 'RX bytes'\n");
script.close(); // закрываем файл
Создаем экземпляр класса Process, который будет отвечать за выполнение скрипта. Для этого воспользуемся командой chmod, задачей которой является изменение прав доступа к файлам. Пишем эту команду вместе с путем к файлу – благодаря этому shell-скрипт запустится как приложение.
Process chmod;
chmod.begin("chmod"); // chmod – меняем право доступа к файлу
chmod.addParameter("+x"); // «x» означает «выполнение»
chmod.addParameter("/tmp/wlan-stats.sh");
chmod.run();
}
В функции runScript() создаем еще один экземпляр класса Process – он запустит скрипт, а затем выведет результат на Serial Monitor. Затем запускаем его при помощи функций Process.begin(путь к файлу) и Process.run().
void runScript() {
Process myscript;
myscript.begin("/tmp/wlan-stats.sh");
myscript.run();
Создаем строку, в которой будем хранить результат. Далее считываем результат в эту строку.
String output = "";
while (myscript.available()) {
output += (char)myscript.read();
}
Удаляем пустые места в начале и конце строки, а затем выводим результат на Serial Monitor.
output.trim();
Serial.println(output);
Serial.flush();
}
Весь скетч полностью – ниже:
/*
Запись в файл при помощи класса FileIO
Этот скетч демонстрирует как записывать данные в файл, находящийся в файловой системе Yun.
В директории «tmp» создается файл shell-скрипта, а затем запускается его выполнение.
Создан 7 июня 2010 Кристианом Мэгли (Cristian Maglie).
Этот пример не защищен авторским парвом.
*/
#include <FileIO.h>
void setup() {
// Инициализируем Bridge (будет требоваться каждый раз при коммуникации с Arduino Yun):
Bridge.begin();
// Инициализируем последовательную передачу данных:
Serial.begin(9600);
while(!Serial); // ждем подключения последовательного порта
Serial.println("File Write Script example\n\n"); // "Пример создания и записи в файл для shell-скрипта"
// Инициализируем FileIO
FileSystem.begin();
// Загружаем скрипт для сбора статистики о работе сети
uploadScript();
}
void loop() {
// Делаем так, чтобы этот скрипт запускался каждые 5 секунд:
runScript();
delay(5000);
}
// Эта функция создает в процессоре Linux файл с shell-скриптом,
// который следит за сетевым трафиком WiFi-интерфейса.
void uploadScript() {
// Сохраняем наш shell-скрипт в директорию «tmp».
// Таким образом, мы помещаем его в RAM,
// благодаря чему экономим место во FLASH-памяти.
File script = FileSystem.open("/tmp/wlan-stats.sh", FILE_WRITE);
// Заголовок для shell-скрипта:
script.print("#!/bin/sh\n");
// Команды скрипта:
// «ifconfig» – это утилита командной строки для управления сетевыми интерфейсами,
// а «wlan0» – как раз тот самый интерфейс, который нам нужен.
// «grep» – поиск в выдаче команды ifconfig на предмет слов «RX bytes»,
// а затем извлечение строки, содержащей необходимые данные.
script.print("ifconfig wlan0 | grep 'RX bytes'\n");
script.close(); // закрываем файл
// Описываем выполнение скрипта:
Process chmod;
chmod.begin("chmod"); // chmod – команда для изменения прав доступа к файлам
chmod.addParameter("+x"); // «x» – это «выполнение»
chmod.addParameter("/tmp/wlan-stats.sh"); // путь к файлу со скриптом, который нужно выполнить
chmod.run();
}
// Эта функция запускает скрипт и считывает итоговые данные
void runScript() {
// Запускаем скрипт:
Process myscript;
myscript.begin("/tmp/wlan-stats.sh");
myscript.run();
String output = "";
// Считываем данные выдачи скрипта:
while (myscript.available()) {
output += (char)myscript.read();
}
// Удаляем пустые места в начале и конце строки:
output.trim();
// Показываем результаты в Serial Monitor:
Serial.println(output);
Serial.flush();
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino