Визуално програмиране за Sonoff Basic

Визуално програмиране за Sonoff Basic
Статия за това как да създадете програмируем логически контролер от евтино китайско устройство. Такова устройство ще намери своето приложение както в домашната автоматизация, така и като практически часове по училищна информатика.
За справка, по подразбиране програмата Sonoff Basic работи с мобилно приложение чрез китайска облачна услуга; след предложената модификация цялото по-нататъшно взаимодействие с това устройство ще бъде възможно в браузъра.

Раздел I. Свързване на Sonoff към услугата MGT24

Стъпка 1: Създайте контролен панел

Регистрирайте се в сайта mgt24 (ако вече не сте регистрирани) и влезте с вашия акаунт.
ВходВизуално програмиране за Sonoff Basic

За да създадете контролен панел за ново устройство, щракнете върху бутона „+“.
Пример за създаване на панелВизуално програмиране за Sonoff Basic

След като панелът бъде създаден, той ще се появи в списъка ви с панели.

В раздела „Настройка“ на създадения панел намерете полетата „Идентификатор на устройството“ и „Ключ за упълномощаване“; в бъдеще тази информация ще се изисква при настройка на устройството Sonoff.
Пример за разделВизуално програмиране за Sonoff Basic

Стъпка 2. Презаредете устройството

Използване на помощната програма XTCOM_UTIL изтеглете фърмуера PLC Sonoff Basic към устройството, за това ще ви трябва USB-TTL конвертор. Тук инструкция и Видео инструкция.

Стъпка 3. Настройка на устройството

Подайте захранване на устройството, след като светодиодът светне, натиснете бутона и го задръжте натиснат, докато светодиодът започне да мига периодично равномерно.
В този момент ще се появи нова wi-fi мрежа, наречена „PLC Sonoff Basic“, свържете компютъра си към тази мрежа.
Обяснение на светодиодната индикация

LED индикация
Състояние на устройството

периодично двойно мигане
няма връзка с рутер

свети непрекъснато
установена връзка с рутера

периодично равномерно мигане
режим на Wi-Fi точка за достъп

загасени
Няма захранване

Отворете интернет браузър и въведете текста „192.168.4.1“ в адресната лента, отидете на страницата с настройки на мрежовите настройки на устройството.

Попълнете полетата както следва:

  • „Име на мрежата“ и „Парола“ (за свързване на устройството към вашия домашен Wi-Fi рутер).
  • “Device ID” и “Authorization Key” (за оторизиране на устройството в услугата MGT24).

Пример за настройка на мрежови параметри на устройствотоВизуално програмиране за Sonoff Basic

Запазете настройките и рестартирайте устройството.
Тук Видео инструкция.

Стъпка 4. Свързване на сензори (по избор)

Текущият фърмуер поддържа до четири температурни сензора ds18b20. Тук Видео инструкция за монтаж на сензори. Очевидно тази стъпка ще бъде най-трудната, тъй като ще изисква прави ръце и поялник.

Раздел II. Визуално програмиране

Стъпка 1: Създаване на скриптове

Използва се като среда за програмиране Блочно, средата е лесна за научаване, така че не е необходимо да сте програмист, за да създавате прости скриптове.

Добавих специализирани блокове за запис и четене на параметри на устройството. Всеки параметър е достъпен по име. За параметри на отдалечени устройства се използват съставни имена: “parameter@device”.
Падащ списък с опцииВизуално програмиране за Sonoff Basic

Примерен сценарий за циклично включване и изключване на товара (1Hz):
Визуално програмиране за Sonoff Basic

Пример за скрипт, синхронизиращ работата на две отделни устройства. А именно, релето на целевото устройство повтаря работата на релето на отдалеченото устройство.
Визуално програмиране за Sonoff Basic

Сценарий за термостат (без хистерезис):
Визуално програмиране за Sonoff Basic

За да създадете по-сложни скриптове, можете да използвате променливи, цикли, функции (с аргументи) и други конструкции. Няма да описвам всичко това подробно тук, вече има доста в мрежата. образователен материал за Blockly.

Стъпка 2: Ред на скриптовете

Скриптът работи непрекъснато и щом достигне своя край, започва отново. В този случай има два блока, които могат временно да поставят на пауза скрипта, „закъснение“ и „пауза“.
Блокът "закъснение" се използва за закъснения от милисекунди или микросекунди. Този блок стриктно поддържа интервала от време, блокирайки работата на цялото устройство.
Блокът „пауза“ се използва за секунди (или по-малко) забавяния и не блокира изпълнението на други процеси в устройството.
Ако самият скрипт съдържа безкраен цикъл, чието тяло не съдържа „пауза“, интерпретаторът самостоятелно инициира кратка пауза.
Ако разпределеният стек памет е изчерпан, интерпретаторът ще спре да изпълнява такъв енергоемък скрипт (бъдете внимателни с рекурсивните функции).

Стъпка 3: Отстраняване на грешки в скриптове

За отстраняване на грешки в скрипт, който вече е зареден в устройството, можете да изпълните програмно проследяване стъпка по стъпка. Това може да бъде изключително полезно, когато поведението на скрипта се окаже различно от предвиденото от автора. В този случай проследяването позволява на автора бързо да намери източника на проблема и да коригира грешката в скрипта.

Сценарий за изчисляване на факториел в режим на отстраняване на грешки:
Визуално програмиране за Sonoff Basic

Инструментът за отстраняване на грешки е много прост и се състои от три основни бутона: „старт“, „една стъпка напред“ и „стоп“ (да не забравяме и режима за отстраняване на грешки „влизане“ и „изход“). В допълнение към проследяването стъпка по стъпка, можете да зададете точка на прекъсване на всеки блок (като щракнете върху блока).
За да покажете текущите стойности на параметрите (сензори, релета) в монитора, използвайте блока „печат“.
Тук прегледно видео относно използването на програмата за отстраняване на грешки.

Раздел за любопитните. Какво има под капака?

За да работят скриптовете на целевото устройство, са разработени интерпретатор на байт код и асемблер с 38 инструкции. Изходният код на Blockly има вграден специализиран кодов генератор, който преобразува визуални блокове в инструкции за асемблиране. Впоследствие тази асемблерна програма се преобразува в байт код и се прехвърля към устройството за изпълнение.
Архитектурата на тази виртуална машина е доста проста и няма смисъл да се описва, в интернет ще намерите много статии за проектиране на най-простите виртуални машини.
Обикновено отделям 1000 байта за стека на моята виртуална машина, което е достатъчно, за да спестя. Разбира се, дълбоките рекурсии могат да изчерпят всеки стек, но е малко вероятно да имат някаква практическа полза.

Полученият байт код е доста компактен. Като пример, байт кодът за изчисляване на същия факториел е само 49 байта. Това е неговата визуална форма:
Визуално програмиране за Sonoff Basic

А това е неговата програма за асемблер:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Ако сглобената форма на представяне няма практическа стойност, тогава разделът „javascrit“, напротив, дава по-познат вид от визуалните блокове:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Относно изпълнението. Когато стартирах най-простия скрипт за мигане, получих 47 kHz квадратна вълна на екрана на осцилоскопа (при тактова честота на процесора от 80 MHz).
Визуално програмиране за Sonoff BasicВизуално програмиране за Sonoff Basic
Мисля, че това е добър резултат, поне тази скорост е почти десет пъти по-бърза от Lua и Еспруино.

В последната част

Обобщавайки, ще кажа, че използването на скриптове ни позволява не само да програмираме логиката на работа на отделно устройство, но също така прави възможно свързването на няколко устройства в един механизъм, където някои устройства влияят върху поведението на други.
Също така отбелязвам, че избраният метод за съхраняване на скриптове (директно в самите устройства, а не на сървъра) опростява превключването на вече работещи устройства към друг сървър, например към домашен Raspberry, тук инструкция.

Това е всичко, ще се радвам на съвети и градивна критика.

Източник: www.habr.com

Добавяне на нов коментар