Візуальнае праграмаванне для 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

Дадаць каментар