Візуальне програмування для Sonoff Basic

Візуальне програмування для Sonoff Basic
Стаття про те, як з дешевого китайського пристрою створити програмований логічний контролер. Такий пристрій знайде своє застосування як у домашній автоматизації, так і як практичні заняття з шкільної інформатики.
Для довідки, за умовчанням програма Sonoff Basic працює з мобільним додатком через китайський хмарний сервіс, після пропонованої переробки, вся подальша взаємодія з цим пристроєм стане можливим у браузері.

Розділ I. Підключення Sonoff до сервісу MGT24

Крок 1. Створення панелі керування

Зареєструйтесь на сайті mgt24 (якщо ще не зареєстровані) і увійдіть до системи під своїм обліковим записом.
Вхід в системуВізуальне програмування для Sonoff Basic

Щоб створити панель керування для нового пристрою, натисніть кнопку «+».
Приклад створення панеліВізуальне програмування для Sonoff Basic

Після того, як панель буде створена, вона з'явиться у списку панелей.

У вкладці «Установка», створеній панелі, знайдіть поля «ID пристрою» та «Ключ авторизації», надалі ця інформація буде потрібна при налаштуванні Sonoff пристрою.
Приклад вкладкиВізуальне програмування для Sonoff Basic

Крок 2. Перепрошивка пристрою

За допомогою утиліти XTCOM_UTIL завантажте прошивку ПЛК Sonoff Basic у пристрій, для цього вам знадобиться USB-TTL конвертер. Тут інструкція и відеоінструкція.

Крок 3. Налаштування пристрою

Подайте на пристрій живлення, після того як засвітиться світлодіод, натисніть кнопку і утримуйте її в натиснутому стані до тих пір, поки світлодіод не почне періодично рівномірно блимати.
У цей момент з'явиться нова wi-fi мережа під назвою «PLC Sonoff Basic», підключіть свій комп'ютер до цієї мережі.
Розшифрування світлодіодної індикації

індикація
Состояние пристрою

періодичне подвійне миготіння
немає зв'язку з роутером

безперервно світить
встановлений зв'язок з роутером

періодичне рівномірне миготіння
режим wi-fi точки доступу

згашена
немає харчування

Відкрийте веб-браузер і введіть в адресний рядок текст «192.168.4.1», перейдіть на сторінку установок параметрів мережі пристрою.

Заповніть поля наступним чином:

  • "Ім'я мережі" та "Пароль" (для прив'язки пристрою до домашнього wi-fi роутера).
  • "ID пристрою" та "Ключ авторизації" (для авторизації пристрою на сервісі MGT24).

Приклад налаштування параметрів мережі пристроюВізуальне програмування для Sonoff Basic

Збережіть налаштування та перезавантажте пристрій.
Тут відеоінструкція.

Крок 4. Підключення датчиків (опціонально)

Поточна прошивка підтримує чотири датчики температури ds18b20. Тут відеоінструкція з монтажу датчиків. Очевидно, це крок буде непростим, оскільки вимагатиме від вас прямих рук і паяльника.

Розділ ІІ. Візуальне програмування

Крок 1. Створення сценаріїв

Як середовище програмування використовується Блочно, середовище просте в освоєнні, тому для створення простих сценаріїв не потрібно бути програмістом.

Я додав спеціалізовані блоки для запису та читання параметрів пристрою. Доступ до будь-якого параметра здійснюється на ім'я. Для параметрів віддалених пристроїв використовуються складові імена: параметр@пристрій.
Список параметрів, що випадаютьВізуальне програмування для Sonoff Basic

Приклад сценарію циклічного включення та вимкнення навантаження (1Гц):
Візуальне програмування для 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

Якщо асемблерна форма уявлення не має будь-якої практичної цінності, то вкладка «javascrit», навпаки, дає більш звичний вигляд ніж візуальні блоки:

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

Додати коментар або відгук