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

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

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

Стъпка 1. Създаване на контролен панел

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

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

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

В раздела «Инсталация» на създадения панел, намерете полетата «ID на устройството» и «Ключ за удостоверяване», тази информация ще е необходима при настройка на Sonoff устройството.
Пример на разделаВизуално програмиране за Sonoff Basic.

Стъпка 2. Препрограмиране на устройството

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

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

Подайте захранване на устройството, след като индикаторът светне, натиснете бутона и го задръжте натиснат, докато индикаторът започне периодично да мига.
В този момент ще се появи нова Wi-Fi мрежа с името «PLC Sonoff Basic», свържете компютъра си с тази мрежа.
Разглеждане на LED индикацията

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

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

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

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

изключено
няма захранване

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

Попълнете полетата по следния начин:

  • «Име на мрежата» и «Парола» (за свързване на устройството с домашния Wi-Fi рутер).
  • «ID на устройството» и «Ключ за удостоверяване» (за удостоверяване на устройството на услугата MGT24).

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

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

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

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

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

Стъпка 1. Създаване на сценарии

Като среда за програмиране се използва Blockly, средата е лесна за усвояване, затова за създаване на прости сценарии не е необходимо да сте програмист.

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

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

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

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

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

Стъпка 2. Ред на изпълнение на сценарии

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

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

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

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

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

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

За да работят сценарии на целевото устройство, е разработен интерпретатор на байт-код и асемблер с 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

Ако асемблерната форма на представяне няма практическа стойност, то разделът «javascript» предлага по-привикнaта форма в сравнение с визуалните блокове:

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

window.alert(factorial(10));

Що се отнася до производителността. При стартиране на най-простия сценарий на мигача, на екрана на осцилоскопа получих меандр 47 кХц (при тактова честота на процесора от 80 МХц).
Визуално програмиране за Sonoff Basic.Визуално програмиране за Sonoff Basic.
Смятам, че това е добър резултат, понеже тази скорост е почти десет пъти по-бърза от Lua и Espruino.

Заключителна част

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

На това е всичко, ще се радвам да чуя съвети и конструктивна критика.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster