Циљ вежбе:
Научити као се повезују уређаји на бази микроконтролера Arduino са Alterozoomom
Задатак вежбе:
1. Инсталирање библиотека које омогућавају контролисање Arduina и уређаја који су на њему повезани путем Alterozooma
2. Писање скеча
3. Управљање уређајем из Alterozooma
Инструменти које ћемо користити у вежби:
1. Рачунар који је повезан на интернет
2. Платформа Arduino са USB излазом (на пример Arduino Leonardo)
Теоријски део:
Ради упрошћавања креирања IoT уређаја и унификације њихових повезивања ка Alterozoomu у оквирима лабораторије ФОТБС био је створен прост протокол за узајамно повезивање рачунара и уређаја помоћу разних канала везе, који су предвиђени за наизменичну предају информација. Протокол је предвиђен за организацију узајамног деловања два уређаја (тачка-тачка) и то помоћу текстуалних порука. Коришћење текстуалних порука упрошћава стварање и контролисање уређаја, тиме што је дозвољено деловање на њега без специјалног ПО из командног реда. Опис протокола се налази на следећем линку: http://wl.unn.ru/ftp/public/IoT/Alterozoom/Alterozoom IoT protocol ptp.pdf
Такође је била креирана библиотека за Arduino IDE која реализује дани протокол. 
Израда вежбе:

1. Инсталирање библиотека које омогућавају контролисање Arduina и уређаја који су на њему повезани путем Alterozooma
Преузмимо архиву са библиотеком за Arduino IDE са линка: http://wl.unn.ru/ftp/public/IoT/Alterozoom/ARpc.zip . Инсталирајмо библиотеку путем менаџера библиотека (Скетч =>Управление библиотеками => Добавить .ZIP библиотеку).
2. Писање скеча
У току рада ће бити написан скеч који ће дозвољавати да управљамо диодом помоћу Alterozooma. За повезивање са рачунаром путем серијског порта креирамо објекат класе 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 је величина буфера за једну поруку. Немогуђе је послати контролеру поруку чија величина прекорачује задану.
Да би Alerozoom могао да прикаже интерфејс управљања уређајем потребно је направити 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() потребно је проверавати серијски порт и податке предавати објекту парсер. 

void loop()
{
    while(Serial.available())
        parser.putChar(Serial.read());
}

Пустите скеч на микроконтролер.

3. Управљање уређајем из Alterozooma
Уђите у Alterozoom и у горњем менију изаберите пункт "IoT Devices". У горњем левом делу отвореног прозора изаберите нужни порт и кликните на дугме "Identify". Ако је идентификација успешна доле је дужан да се појави ред са идентификованим уређајем. Притисните дугме "Control Device". Требало би да се појави дугме, којим када притискамо проузрокујемо ефекат треперења диоде.
 

Задатак: Додајте снимак екрана прозора упраљања уређајем

Формирајте утиске о лабараторијској вежби. Да ли у опису вежбе постоје нејасни делови?