Arduino:Знакомство с Arduino/Знакомство с Arduino Yún

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

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Знакомство с Arduino Yun[1]

Модель Arduino Yun не похожа на остальные Arduino. Хотя программируется она примерно так же, как Arduino Leonardo, да еще и использует такой же процессор (Atmel ATmega32U4), у нее есть еще один процессор – Atheros AR9331, работающий на Linux-дистрибутиве OpenWrt-Yun. Программирование 32U4 через USB осуществляется так же, как и на Arduino Leonardo. Кроме того, настроив Yun на подключение к WiFi-сети, 32U4 можно будет программировать и через WiFi.

Чтобы подключить Yun к компьютеру, потребуется USB-кабель Mini-B – с его помощью плату можно будет и питать, и программировать. Программируя Yun, в меню Инструменты > Плата (Tools > Board) нужно будет выбрать пункт Arduino Yun. Модель Yun поддерживается только IDE Arduino версии 1.5.4 и позже.

Отличия от Arduino Leonardo

YunParts.png

Вдобавок к чипу 32U4 у Yun имеется дополнительный процессор Atheros AR9331, который работает на Linux-дистрибутиве для встраиваемых систем под названием OpenWrt-Yun (основан на OpenWrt). Также в комплекте идет полная установка Python 2.7.

Кроме того, Yun отличается от Leonardo наличием и отсутствием целого ряда комплектующих. В частности – коннекторов: Yun оснащена SD-слотом, Ethernet-разъемом, а также коннектором USB-A (работает как USB-хост). Еще одно отличие в том, что на Yun нет разъема для питания – плата питается от коннектора micro-USB.

Также на Yun отсутствует 5-вольтовый стабилизатор напряжения. Поэтому если запитать Yun от источника, дающего более 5 вольт, это, скорее всего, приведет к порче платы. Кроме того, если вы не хотите питать Yun от micro-USB, это можно сделать от контактов VIN и 5V. При использовании VIN-контакта нельзя давать больше 5 вольт – это повредит плату. В общем, Yun, если есть возможность, лучше питать именно от micro-USB.

Коннекторы SD, Ethernet и USB-A не имеют физического соединения с процессором 32U4, но зато соединены с AR9331.

Функции 32U4 на Yun те же, что и на Leonardo, но за тем исключением, что вы не можете использовать Serial1. Он зарезервирован для использования с процессором AR9331.

Кроме того, на Yun имеется встроенный Wi-Fi-модуль, позволяющий подсоединиться к беспроводному роутеру или служить точкой доступа.

У всех процессоров Yun (32U4, AR9331 и для WiFi) имеются собственные кнопки сброса.

YunResetIllustrations.png

Также на Yun имеется несколько статусных LED-индикаторов: для питания, WLAN-соединения, WAN-соединения, USB и последовательной коммуникации (TX и RX). Кроме того, к одному из статусных светодиодов подсоединен 31-ый контакт.

YunStatusLEDs.png

OpenWrt-Yun

Модель Arduino Yun работает на Linux-дистрибутиве OpenWrt-Yun, в основе которого лежит дистрибутив OpenWrt. И хотя настройку системы можно осуществлять через командную строку, многие настройки можно менять при помощи специальной веб-страницы. Этот интерфейс называется LuCi, и он дает доступ почти ко всем настройкам, которые могут понадобиться для работы с WiFi-модулем.

Процесс доступа к веб-интерфейсу описан ниже.

Для того чтоб устанавливать на OpenWrt-Yun дополнительное ПО, вам понадобится пакетный менеджер opkg. Более подробно об opkg и самых распространенных командах к нему читайте на этой странице.

Для взаимодействия с системой OpenWrt-Yun необходимо использовать командную строку, доступ к которой можно получить либо через библиотеку Arduino Bridge, либо через SSH. Если вы никогда не пользовались командной строкой, то самые азы (включая информацию о паре самых распространенных команд) можно прочесть тут.

Система OpenWrt постоянно улучшается – благодаря активной творческой деятельности сообществ OpenWrt и Arduino – поэтому версия OpneWrt-Yun, стоящая на вашей Yun, может быть устаревшей. О том, как установить самую последнюю версию системы, читайте в этом руководстве.

Python

В комплекте с OpenWrt идет уже установленный Python 2.7 – с его помощью можно писать приложения и скрипты. Более подробно о Python читайте здесь.

Если вы никогда прежде не работали с Python, то в сети есть множество отличных ресурсов для изучения этого языка. Например, Learn Python the Hard Way – здесь есть все необходимое для того, чтобы научиться писать собственные скрипты.

Внешняя память на Yun

У встроенной долговременной памяти Yun есть ограничения на количество циклов записи, и если вас это не устраивает, вы можете подключить к плате внешнюю память в виде карты microSD или флэш-накопителя – на них можно будет хранить разнообразные данные, а также ваши собственные скрипты, веб-страницы и т.д.

Чтобы Yun получила доступ к этим накопителям и могла записывать на них информацию при помощи своего процессора 32u4, в их корне должна находиться папка под названием arduino.

Веб-сервисы

Для клиентов и серверов в OpenWrt используется REST – от «representational state transfer», что можно перевести как «передача состояния представления». Это тип архитектуры ПО, который позволяет отображать некоторые компоненты Arduino в виде URL’ов.

По умолчанию доступ к REST API защищен паролем, но это можно изменить. Для этого нужно открыть конфигурационную панель Yun – нужная секция будет в самом низу страницы:

YunRESTAccess 1.png

Неплохое введение в то, что такое REST, можно прочесть, например, тут:

Arduino Yun умеет распознавать три конечные точки REST:

  • /arduino
  • /data
  • /mailbox

В папке /arduino нет никаких заранее заданных параметров. Все, добавленное в URL после конечной точки, передается от веб-сервера в скетч, запущенный на 32u4. Таким образом, в скетче можно задать свой собственный API. О том, как с помощью этого метода получить доступ к контактам платы, читайте в уроке о скетче-примере с библиотекой Bridge.

Конечная точка /data используется для доступа к внутреннему хранилищу с параметрами «ключ/значение». Для нее доступны следующие запросы:

  • /put/KEY/VALUE – сохраняет значение в ключе
  • /get/KEY – возвращает значение из запрошенного ключа (в формате JSON)
  • /get – возвращает весь список значений из хранилища (в формате JSON)
  • /delete – удаляет все значения в хранилище

Конечная точка /mailbox используется для добавления сообщений в очередь под названием Mailbox. Эта очередь сообщений хранится внутри системы Linux и может быть считана микроконтроллером Arduino. Для нее используется следующая команда:

  • /mailbox/message

Перезапуск процессоров

Чтобы перезапустить AR9331 и тем самым перезагрузить OpenWrt-Yun, нажмите кнопку сброса YUN RST, которая находится на Yun рядом со светодиодами и аналоговыми контактами.

Чтобы перезапустить 32u4, а вместе с ним и запущенный в данный момент скетч, два раза нажмите на кнопку, находящуюся рядом с Ethernet-портом.

Кнопка сброса WiFi называется WLAN RST и располагается рядом с коннектором USB-A. Когда вы нажмете на эту кнопку, загорится светодиод WLAN.

Если вы перешли к другой сети и в результате потеряли беспроводной доступ к веб-интерфейсу Yun, у вас есть возможность сбросить сетевые настройки платы. Для этого нужно нажать на кнопку WLAN RST и удерживать ее в таком состоянии более 5, но менее 30 секунд – это перезагрузит процессор AR9331. Настройки WiFi будут сброшены, а Yun запустит собственную WiFi-сеть Arduino Yun-XXXXXXXXXXXX. Все остальные настройки и модификации останутся без изменений.

Чтобы сбросить OpenWrt-Yun (т.е. вернуть ее в состояние по умолчанию), нажмите на кнопку WLAN RST и удерживайте ее в таком положении как минимум 30 секунд. В результате плата вернется к исходным настройкам – как будто ее только-только вынули из коробки или к последнему апдейту образа OpenWrt, который вы перепрошили ранее. Помимо прочего, это действие удаляет все установленные файлы и сетевые настройки.

Сброс пароля

Пароль для доступа к веб-интерфейсу может быть сброшен и изменен. Подключите Arduino Yun к компьютеру при помощи USB-кабеля и загрузите скетч YunSerialTerminal. Его можно найти в IDE Arduino в примерах для библиотеки Bridge. Когда Yun загрузится, откройте монитор порта, в выпадающем меню выберите пункт «Новая строка», а затем нажмите  ↵ Enter . В ответ на это в мониторе порта должно появиться примерно следующее:

Yunresetpsw fixed 2.png

Теперь, чтобы поменять пароль, вам нужно выполнить команду passwd. Впишите ее в поле ввода (оно находится в верхней части монитора порта), а затем нажмите  ↵ Enter . Вас попросят вписать новый пароль, а затем еще раз – для подтверждения. Если хотите, ошибку о слабом пароле можно проигнорировать. Если оба введенных вами пароля совпадают, пароль системы будет изменен, а доступ к интерфейсу теперь можно будет получить только при помощи нового пароля.

Перезапись списка портов при сбросе

Поскольку у Yun нет отдельного чипа для обработки последовательной коммуникации, это значит, что ее последовательный порт – виртуальный. То есть это программная функция, работающая и на ОС, и на самой плате. Точно также, как компьютер создает экземпляр драйвера последовательного порта, когда вы подключаете к нему какую-либо Arduino, так и 32u4 создает подобный экземпляр всякий раз, когда запускается загрузчик. В итоге ОС компьютера видит плату как экземпляр USB-драйвера Connected Device Class (CDC).

Это значит что каждый раз, когда вы сбрасываете процессор 32u4, USB-соединение обрывается и устанавливается заново. Плата исчезает из списка последовательных портов, а сам список перезаписывается. Если у какой-то программы будет открыто соединение с Yun, то это соединение будет потеряно. Для сравнения – у Arduino Uno при сбросе главного процессора (ATmega328P) USB-соединение не закрывается (т.к. обрабатывается вспомогательным процессором – Atmega8U2 или ATmega16U2). Это отличие вносит некоторые коррективы в установку драйверов, загрузку скетчей и коммуникацию, но об этом ниже.

Нет сброса при открытии последовательного порта

Если вы откроете на компьютере последовательный порт, Arduino Yun не перезапустит ваш скетч. Это значит, что вы не увидите данных последовательной коммуникации, уже посланных платой компьютеру – включая, например, большинство данных, пересылаемых в функции setup().

То же самое касается и класса Console (о нем ниже).

Это значит, что если вы открыли монитор порта или Console-соединение и при этом используете в setup() функции print(), println() или write() (либо от Serial, либо от Console), то они отображаться не будут. Но для этой незадачи можно найти решение. Попробуйте вписать в скетч следующее...

// останавливает скетч до тех пор, пока не будет открыт «Монитор порта» 
   while (!Serial) ;

...или...

// останавливает скетч до тех пор, пока не будет запущено Console-соединение
   while (!Console) ;

Установка драйверов

OSX

  • Когда вы в самый первый раз подключите Yun к Mac, запустится программа Keyboard Setup Assistant. В случае Yun ничего настраивать не нужно, поэтому этот диалог можно спокойно закрыть, кликнув на красную кнопку в верхней левой части окна.
OSXKeyboardNotification 3.png

Windows

Для операционной системы Windows доступны драйверы и установщик для IDE Arduino.

  • Загружаем установщик Arduino IDE версии 1.5.4 (или выше) и делаем двойной щелчок по его иконке
WinYun1 4.png
  • Читаем лицензию и если согласны – кликаем по кнопке «I Agree»
WinYun2 5.png
  • По умолчанию будут выбраны все доступные компоненты. Среди них – IDE, драйвера и иконки
WinYun3 6.png
  • Выбираем место для установки IDE Arduino
WinYun4 7.png
  • Установщик покажет прогресс извлечения файлов в указанное место
WinYun5 8.png
  • Если в меню выбора компонентов для установки вы, помимо прочего, указали еще и драйверы, появится всплывающее окно, где вам нужно будет подтвердить свой выбор
WinYun6 9.png
  • Когда установка будет закончена, нажмите кнопку «Закрыть»

Примечание: Для автоматического обнаружения беспроводных сетей Yun использует сервис Bonjour, однако его нет в стандартной комплектации установщика IDE на Windows. Поэтому если у вас не установлен Bonjour, то загрузить его можно отсюда. Кроме того, нужно убедиться, что ваш антивирус (или какая-то другая программа для защиты компьютера) не блокирует коммуникацию на порте 5353.

Linux

На Ubuntu 10.0.4 и позже драйвера устанавливать не нужно. Надо лишь убедиться, что фаервол не блокирует порт 5353.

Конфигурация встроенного WiFi

Модель Yun имеет способность функционировать в качестве точки доступа, а также подключаться к уже существующей сети. Инструкции в этом разделе будут описывать подключение Yun к беспроводной сети. Arduino Yun может подключаться и к незашифрованным сетям, и к сетям, поддерживающим шифрование типа WEP, WPA и WPA2.

Включив Yun в самый первый раз, вы создадите WiFi-сеть под названием ArduinoYun- XXXXXXXXXXXX. Подключите компьютер к этой сети.

Получив IP-адрес, откройте браузер и введите в адресной строке http://arduino.local или 192.168.240.1. Спустя какое-то время в браузере откроется веб-страница с запросом пароля. Введите arduino и кликните по кнопке Log In.

YunWebPassword 10.png

Далее появится окно с некоторой диагностической информацией об имеющихся сетевых соединениях. Первое – это WiFi-интерфейс, второе – это Ethernet-соединение. Чтобы продолжить, нажмите на кнопку Configuration.

YunWebDiagnostic 11.png

На новой странице вам будет предложено настроить Yun, дай ей уникальное название и определить, к какой сети, вы хотите подключиться.

Название Yun вписывается в поле Yun NAME. Оно будет отображаться в меню Инструменты > Порт (Tools > Port).

Далее вбейте пароль – он должен содержать не менее 8 символов. Если оставить это поле пустым, система оставит пароль, установленный по умолчанию, т.е. «arduino».

При желании можно выставить страну и часовой пояс. Мы рекомендуем настроить эти опции, т.к. это может помочь в подключении к локальным WiFi-сетям. Выбрав часовой пояс, вы автоматически выбираете соответствующий регулятивный домен.

Введите название WiFi-сети, к которой хотите подключиться.

Далее выберите тип шифрования и введите пароль.

YunWebConfig 12.png

Когда вы нажмете кнопку Configure & Restart, Arduino сбросит сама себя и подключится к указанной сети. Спустя короткое время будет выключена сеть самой Arduino.

YunRebooting 13.png

Теперь вы можете подключиться к сети, которую вы назначили для Yun.

Программирование 32u4 через WiFi

Если Yun находится в той же сети, что и компьютер, то ее можно программировать удаленно – при помощи беспроводной связи.

Настроив Yun, подключитесь к сети, указанной в конфигурационных настройках. Откройте IDE Arduino.

В меню Инструменты > Порт (Tools > Port) должно быть название вашей Yun и ее IP-адрес. В меню Инструменты > Плата (Tools > Board) выберите пункт «Arduino Yun».

Откройте скетч-пример Blink (Файл > Примеры > 01.Basics > Blink) и загрузите его на плату. У вас попросят пароль администратора. Используйте тот, что вы ввели на конфигурационной странице.

Когда программа будет загружена, процессор 32u4 перезапустится, о чем сообщит мигание светодиода, подключенного к 13-ому контакту.

Использование встроенного Ethernet

Если Yun подключена к проводной сети (при помощи Ethernet-кабеля), то будет пытаться автоматически подключиться через DHCP. При этом в меню Инструменты > Порт (Tools > Port) плата будет отображаться так же, как и при WiFi-соединении.

Если вы хотите подключить Yun напрямую к компьютеру, то настройте компьютер, чтобы он либо имел статический IP-адрес, либо служил в качестве DHCP-сервера.

Примечание: Ethernet-интерфейс – это eth1, а не eth0.

Коммуникация при помощи OpenWrt-Yun через Bridge

Библиотека Bridge служит тому, чтобы Arduino и OpenWrt-Yun могли «общаться» друг с другом. Есть несколько вспомогательных классов, предназначенных для разных типов коммуникации между двумя этими компонентами, и некоторые из этих классов (Console и Process) будут описаны ниже. Более подробно читайте на странице о библиотеке Bridge.

BridgeBlockDiag.png

Интерфейсы WiFi и Ethernet, а также USB-хост и SD-карта – все это подключено к AR9331. Библиотека Bridge позволяет работать со всеми этими девайсами, а также запускать скрипты и осуществлять коммуникацию с веб-сервисами.

Класс Console

Класс Console, основанный на Bridge, позволяет отправлять информацию от Yun на компьютер, как если бы это осуществлялось через монитор порта, но посредством беспроводной связи. Он создает безопасное соединение между Yun и компьютером при помощи SSH.

Загрузите в Yun следующий скетч:

 1 #include <Console.h>
 2 
 3 const int ledPin = 13; // контакт, к которому подключен светодиод 
 4 int incomingByte;      // переменная, в которую считываются данные, приходящие через последовательное соединение
 5 
 6 void setup() {
 7   // инициализируем последовательную передачу данных:
 8   Bridge.begin();
 9   Console.begin(); 
10 
11   while (!Console){
12     ; // ждем, пока запустится Console-соединение.
13   }
14   Console.println("You're connected to the Console!!!!");  //  "Вы подключились к Консоли!»
15   // инициализируем светодиодный контакт как выходной контакт:
16   pinMode(ledPin, OUTPUT);
17 }
18 
19 void loop() {
20   // смотрим, пришли ли какие-нибудь данные:
21   if (Console.available() > 0) {
22     // считываем самый старый байт, находящийся в буфере последовательного порта:
23     incomingByte = Console.read();
24     // если это «H» (ASCII 72), включаем светодиод:
25     if (incomingByte == 'H') {
26       digitalWrite(ledPin, HIGH);
27     } 
28     // если это «L» (ASCII 76), выключаем светодиод:
29     if (incomingByte == 'L') {
30       digitalWrite(ledPin, LOW);
31     }
32   }
33   delay(100);
34 }

По сути, класс Console предназначен для коммуникации с Yun через монитор порта, как если бы это был терминал. Как правило, этот способ коммуникации именуется «консолью».

Чтобы увидеть эту консоль, проделайте следующие действия. Сначала откройте меню Инструменты > Порт (Tools > Port), а затем выберите там название вашей Yun и ее IP-адрес. Однако Yun появится в этом меню лишь в том случае, если будет находиться с компьютером в одной и той же сети. Теперь откройте «Монитор порта». Вас попросят ввести пароль от Yun.

Кроме того, консоль можно увидеть, открыв окно терминала и вписав туда

ssh root@yourYunsName.local 'telnet localhost 6571'

, а затем нажав  ↵ Enter .

Примечание: Если вы используете Windows, то вам надо будет установить эмулятор терминала. На наш взгляд, лучше воспользоваться PuTTY, однако две команды, указанные выше, нужно будет вводить раздельно.

А теперь проверяем, правильно ли все настроено. При нажатии на клавишу «H» светодиод должен загораться, при нажатии на «L» – тухнуть.

Класс Process

Команды класса Process позволяют через Arduino запускать на OpenWrt-Yun процессы Linux.

В примере ниже OpenWrt-Yun подключается к серверу при помощи curl, а затем загружает немного ASCII-текста. Текст выводится через последовательное соединение.

 1 #include <Process.h>
 2 
 3 void setup() {
 4   // инициализируем Bridge:
 5   Bridge.begin();
 6 
 7   // инициализируем Serial:
 8   Serial.begin(9600);
 9 
10   // ждем, пока не подключится монитор порта:
11   while (!Serial);
12 
13   // запускаем различные примеры процессов:
14   runCurl();
15 }
16 
17 void loop() {
18   // тут ничего не делаем.
19 }
20 
21 void runCurl() {
22   // запускаем команду "curl" и загружаем из интернета логотип Arduino, выполненный в виде ASCII-текста;
23   // curl – это утилита командной строки для передачи данных при помощи различных интернет-протоколов
24   Process p;        // создаем процесс и называем его «p»
25   p.begin("curl");  // процесс, вызывающий команду «curl»
26   p.addParameter("http://arduino.cc/asciilogo.txt"); // добавляем к «curl» параметр с URL
27   p.run();      // запускаем процесс и ждем его выполнения
28 
29   // передаем логотип через последовательный порт и показываем его;
30   // выходные данные этого процесса могут быть прочитаны с помощью потоков 
31   while (p.available()>0) {
32     char c = p.read();
33     Serial.print(c);
34   }
35   // Убеждаемся, что отправлен последний бит данных.
36   Serial.flush();
37 }

Использование Bridge для передачи информации между процессорами

Библиотека Bridge позволяет передавать информацию между двумя процессорами, и это осуществляется при помощи пары «ключ/параметр». Данный пример демонстрирует, как использовать Bridge для доступа к цифровым и аналоговым контактам на плате при помощи REST-запросов. Таким образом, вы сможете, пользуясь этими REST-запросами, передаваемыми через браузер, создать свой собственный API.

Запуская этот скетч, убедитесь, что компьютер и Yun находятся в одной и той же сети.

Запрограммировав плату, вы сможете, используя запросы, запрашивать значение контакта, записывать на контакт определенное значение, а также устанавливать состояние контакта – «входной/выходной».

Если REST-пароль отключен, в браузере можно использовать URL следующей конструкции:

Если вам более предпочтителен вызов команды curl через командную строку, а не через браузер, то можете спокойно пользоваться и этим методом.

Сначала вам надо будет подключить библиотеки Bridge, YunServer и YunClient:

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

Создаем экземпляр сервера, благодаря которому Yun сможет прослушивать подключенных клиентов.

YunServer server;

В блоке setup() запускаем последовательную коммуникацию (для отладочных целей), а затем включаем светодиод на 13-ом контакте – он будет гореть, пока будет запускаться библиотека Bridge. Функция Bridge.begin() является блокирующей, а на ее выполнение требуется около 2 секунд. После запуска Bridge выключаем светодиод.

1 void setup() {
2   Serial.begin(9600);
3   pinMode(13,OUTPUT);
4   digitalWrite(13, LOW);
5   Bridge.begin();
6   digitalWrite(13, HIGH);

Во второй части блока setup() говорим экземпляру YunServer прослушивать входящие соединения, но идущие только от локального хоста. Все подключения к OpenWrt-Yun будут перенаправлены к процессору 32u4 – для анализа и управления контактами. Это происходит на порте 5555. Запускаем сервер при помощи функции server.begin().

1 server.listenOnLocalhost();
2   server.begin();
3 }

В блоке loop() создаем экземпляр YunClient, который будет управлять соединением. Если клиент подключается, обрабатываем запросы в пользовательской функции (описана ниже) ,а когда обработка будет закончена, закрываем соединение.

В конце loop() ставим задержку. Тем самым мы оберегаем процессор от лишней работы.

 1 void loop() {
 2   YunClient client = server.accept();
 3 
 4   if (client) {
 5     process(client);
 6     client.stop();
 7   }
 8 
 9   delay(50); 
10 }

Создаем функцию под названием process, которая будет принимать YunClient в качестве аргумента. Считываем команду, создавая строку, которая будет хранить входящую информацию. Анализируем REST-запросы исходя из их функциональности (цифровые, аналоговые и состояние), а затем направляем информацию к соответствующей функции.

 1 void process(YunClient client) {
 2   String command = client.readStringUntil('/');
 3 
 4   if (command == "digital") {
 5     digitalCommand(client);
 6   }
 7   if (command == "analog") {
 8     analogCommand(client);
 9   }
10   if (command == "mode") {
11     modeCommand(client);
12   }
13 }

Создаем функцию для команд с цифровыми контактами. Принимаем клиент в качестве аргумента. Создаем несколько локальных переменных, чтобы хранить в них информацию, переданную в команде – о контакте и значении.

1 void digitalCommand(YunClient client) {
2   int pin, value;

Анализируем запрос клиента к контакту при помощи функции client.parselnt().

Если символ, стоящий после контакта – это «/», это значит, что в конце URL будет либо «0», либо «1». То есть это значение, которое будет присвоено контакту, чтобы поставить его либо в положение LOW, либо в положение HIGH. Если «/» нет, это значит, что функции нужно прочесть значение, которое в данный момент имеется на контакте.

1 pin = client.parseInt();
2 
3   if (client.read() == '/') {
4     value = client.parseInt();
5     digitalWrite(pin, value);
6   } 
7   else {
8     value = digitalRead(pin);
9   }

Показываем значение клиенту и обновляем ключ, хранящийся в базе данных, текущим значением контакта.

Если «обернуть» значение, которое будет показано клиенту, в конструкцию F(), то вывод сообщения будет выполнен из flash-памяти. Это позволит сэкономить место в SRAM, что полезно, когда вам приходится иметь дело с длинными строками вроде URL’ов.

Ключ – это номер контакта и его тип. Например, D2 означает «2-ой цифровой контакт». Соответственно, значением для этого ключа будет то значение, которое в данный момент присваивается или считывается с запрашиваемого контакта.

1 client.print(F("Pin D"));   "Контакту D"
2   client.print(pin);  // здесь будет указан номер контакта
3   client.print(F(" set to "));  " присвоено значение "
4   client.println(value);  // здесь будет указано присваиваемое значение
5 
6   String key = "D";
7   key += pin;
8   Bridge.put(key, String(value));
9 }

Функция для обработки запросов к аналоговым контактам создается примерно также, но за тем исключением, что вместо «D» в названии ключей теперь будет «А»:

 1 void analogCommand(YunClient client) {
 2   int pin, value;
 3 
 4   pin = client.parseInt();
 5 
 6   if (client.read() == '/') {
 7     value = client.parseInt();
 8     analogWrite(pin, value);
 9 
10     // отсылаем клиенту обратную связь:
11     client.print(F("Pin D"));   "Контакту D"
12     client.print(pin);  // здесь будет указан номер контакта
13     client.print(F(" set to analog "));  " присвоено аналоговое значение "
14     client.println(value);  // здесь будет указано присваиваемое значение
15 
16     String key = "D";
17     key += pin;
18     Bridge.put(key, String(value));
19   }
20   else {
21     value = analogRead(pin);
22 
23     client.print(F("Pin A"));  "С контакта A"
24     client.print(pin);  // здесь будет указан номер контакта
25     client.print(F(" reads analog "));  " считано аналоговое значение "
26     client.println(value);  // здесь будет указано считанное значение
27 
28     String key = "A";
29     key += pin;
30     Bridge.put(key, String(value));
31   }
32 }

Теперь создаем еще одну функцию – для обработки запросов, меняющих состояние контакта. Принимаем YunClient в качестве аргумента и создаем локальную переменную, в которой будем хранить номер контакта. Далее считываем значение контакта, как если бы это была функция для цифровых или аналоговых контактов.

1 void modeCommand(YunClient client) {
2   int pin;
3   pin = client.parseInt();
4 Проверяем, корректен ли URL:
5 if (client.read() != '/') {
6     client.println(F("error"));  "ошибка"
7     return;
8   }

Если URL корректен, сохраняем его в виде строки. Если переданное значение – «output» или «input», то присваиваем это значение контакту, а затем сообщаем об этом клиенту. Если строка этим значениям не соответствует, возвращаем сообщение об ошибке.

 1 String mode = client.readStringUntil('\r');
 2 
 3   if (mode == "input") {
 4     pinMode(pin, INPUT);
 5     // отсылаем клиенту обратную связь:
 6     client.print(F("Pin D"));  //  "Контакт D"
 7     client.print(pin);  // здесь будет указан номер контакта
 8     client.print(F(" configured as INPUT!"));  " сконфигурирован как входной"
 9     return;
10   }
11 
12   if (mode == "output") {
13     pinMode(pin, OUTPUT);
14     // отсылаем клиенту обратную связь:
15     client.print(F("Pin D"));  "Контакт D"
16     client.print(pin);  // здесь будет указан номер контакта
17     client.print(F(" configured as OUTPUT!"));  " сконфигурирован как выходной"
18     return;
19   }
20 
21   client.print(F("error: invalid mode "));  "ошибка: указано неправильное значение"
22   client.print(mode);
23 }

Более подробно об этом примере читайте на соответствующей странице.

Подключение к интернет-сервисам при помощи Temboo

TembooIllustrated.png

В модель Yun встроено множество коммуникационных функций, самая примечательная из которых – это, пожалуй, возможность работать с другими онлайн-платформами. Для того чтобы пользователь мог как можно проще подключиться к своим любимым онлайн-сервисам, Arduino начала сотрудничать с Temboo. Это сервис, который обеспечивает нормализированный доступ ко множеству различных API (всего – свыше ста) из одной единственной точки, позволяя смешивать и сопоставлять данные из различных платформ (например, из Twitter, Facebook, Foursquare и даже FedEx и PayPal).

В папке Файл > Примеры > Temboo (File > Examples > Temboo) есть множество скетчей-примеров, которые будут хорошей отправной точкой, чтобы научиться работать с Yun и облачными хранилищами. Более подробно об интеграции Arduino и Temboo можно прочесть в обучающем разделе на сайте Temboo.

Spacebrew

Программный инструментарий Spacebrew – это, как пишут его разработчики, «простой способ подключения интерактивных устройств друг к другу». Он работает на модели «клиент/сервер», причем этот сервер запускается на Yun, и делается это при помощи Python-скриптов. Для коммуникации между двумя устройствами Spacebrew использует WebSockets.

Примеры использования Spacebrew для Arduino Yun идут в комплекте с самим Spacebrew. Более подробно читайте на сайте проекта.

Установка дополнительного ПО на Linux

В комплекте с Arduino Yun уже идет система OpenWrt-Yun с предустановленным ПО вроде «curl» и «python», но при желании на Yun можно установить и другое программное обеспечение. На системах Linux дополнительное ПО может быть установлено при помощи инструмента под названием «система управления пакетами». Более подробно о нем читайте в соответствующей статье.

Что дальше

Теперь, когда вы знакомы с азами, можно приступить к углубленному изучению темы – по этой ссылке можно найти более подробное описание библиотеки Yun и скетчи-примеры к ней. Кроме того, дополнительную информацию можно найти на странице с аппаратным описанием Arduino Yun.

См.также

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