Лабораторные работы        Технологии+Бизнес

 

Цель работы

Научиться подключать устройства на базе микроконтролеров Arduino к приложению Alterozoom.

Задачи работы

  1. Установка библитеки для протокола взаимодействия с приложением Alterozoom.
  2. Разработка скетча.
  3. Управление разработанным устройством из приложения Alterozoom.

Инструменты для выполения работы

  1. Компьютер с подключением к сети Internet.
  2. Плата Arduino с USB выходом (например, Arduino Leonardo).

Теоретическая часть

Для упрощения разработки устройств IoT и унификации их подключения к платформе Alterozoom в рамках лаборатории ФОТБС был разработан простой текстовый протокол для взаимодействия устройства с компьютером через различные каналы связи, предназначенные для последовательной передачи информации. Протокол предназначен для организации взаимодействия двух устройств (точка-точка) посредством обмена простыми текстовыми сообщениями. Использование текстовых сообщений упрощает разработку и отладку устройства, так как позволяет взаимодействовать с ним без специализированного ПО из командной строки. Описание протокола можно найти по ссылке: http://wl.unn.ru/ftp/public/IoT/Alterozoom/Alterozoom IoT protocol ptp.pdf
Так же была разработана библиотека для Arduino IDE, реализующая данный протокол. 
 

Выполнение работы

Установка библитеки для протокола взаимодействия с приложением Alterozoom


Скачиваем архив с библиотекой для Arduino IDE по ссылке: http://wl.unn.ru/ftp/public/IoT/Alterozoom/ARpc.zip Устанавливаем библиотеку через менеджер библиотек (Скетч -> Управление библиотеками -> Добавить .ZIP библиотеку).

Разработка скетча


В рамках работы будет создан скетч, позволяющий мигать светодиодом из интерфейса приложения Alterozoom. Для взаимодействия с компьютером через последовательный порт мы создадим объект класса ARpc и определим для него две callback-функции - одна для обработки комманд, вторая для отправки сообщений на компьютер. Для однозначной идентификации устройства так же необходимо указать идентификатор и имя устройства. А для обеспечения возможность управления устройством необходимо разработать xml-описание панели управления устройством.
Создаем новый скетч. Подключаем к нему библиотеку (Скетч -> Подключить библиотеку -> ARpc). В начале файла должен был появиться нужный #include <ARpc.h>. Генерируем уникальный идентификатор в формате UUID (например, можно воспользоваться сервисом https://www.uuidgenerator.net/version4). Добавляем две глобальных переменных для идентификатора и имени устройства:
const char *deviceName="led_blink_test";
const char *deviceId="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}";
Определяем функцию обработки команд, передаваемых устройству. Эта функция принимает команду, аргументы команды и указатель на объект класса ARpc, от которого пришла команда:
void processCommand(const char *cmd,const char *args[],int argsCount,ARpc *parser)
{
    if(strcmp(cmd,"blink")==0)
    {
        digitalWrite(13,HIGH);
        delay(200);
        digitalWrite(13,LOW);
        delay(200);
        parser->writeOk();
    }
    else parser->writeErr("Unknown cmd");
}
Здесь мы обрабатываем одну команду - "blink", при приходе которой мигаем штатным светодиодом на 13 порту.
Далее определяем функцию для передачи сообщений к ПК через последовательный порт:
void arpcWriteCallback(const char *str)
{
    Serial.print(str);
}
Обратите внимание, что не используется println, так как эта функция добавляет лишний перевод строки, который будет мешать нормальной обработке сообщений.
Далее мы объявляем объект класса ARpc и передаем ему ссылки на созданные выше переменные и функции:
ARpc parser(300,&processCommand,&arpcWriteCallback,deviceId,deviceName);
300 - размер буфера для одного сообщения. Невозможно передать на контроллер сообщение размера больше указанного.
Для того, чтобы приложение Alterozoom могло показать интерфейс управления устройством, необходимо разработать xml-описание. Подробно про это можно почитать в pdf-описании (ссылка из теоретической части). Для нашего сценария необходима одна кнопка, передающая на контроллер команду "blink", которая описывается следующим образом:
const char *controls="<controls><group title=\"Device controls\"><control sync=\"0\" title=\"Blink\" command=\"blink\"/></group></controls>";
Далее необходимо провести инициальзацию пина и последовательного порта в функции setup():
void setup()
{
    Serial.begin(9600);
    pinMode(13,OUTPUT);
    parser.setControlsInterface(controls);
}
И наконец, в функции loop() необходимо проверять последовательный порт на наличие новых данных и передавать их объекту parser.
void loop()
{
    while(Serial.available())
        parser.putChar(Serial.read());
}
Загружаем полученный скетч на микроконтроллер.
 

Управление разработанным устройством из приложения Alterozoom

Запустите приложение Alterozoom и выберите в верхнем меню пункт "IoT Devices". В левой верхней части открывшегося окна выберите нужный порт и нажмите кнопку "Identify". В случае успешной идентификации ниже должна появиться строка с идентифицированным устройством. Нажмите кнопку "Control device". Должно появиться окно с одной кнопкой, при нажатии на которую мигает светодиод.
 

Задание: вставьте скриншот окна управления устройством
 
 
 

Сформулируйте замечания к лабораторной работе. Есть ли в описании работы  непонятные места? 

 

Лабораторные работы        Технологии+Бизнес