Артыкул аб тым, як з таннай кітайскай прылады стварыць праграмуемы лагічны кантролер. Такая прылада знойдзе сваё ўжыванне як у хатняй аўтаматызацыі, так і ў якасці практычных заняткаў па школьнай інфарматыцы.
Для даведкі, па змаўчанні праграма Sonoff Basic працуе з мабільным дадаткам праз кітайскі хмарны сэрвіс, пасля прапанаванай пераробкі, усё далейшае ўзаемадзеянне з гэтай прыладай стане магчымым у браўзэры.
Раздзел I. Падлучэнне Sonoff да сэрвісу MGT24
Крок 1. Стварэнне панэлі кіравання
Зарэгіструйцеся на сайце
Уваход у сістэму
Каб стварыць панэль кіравання для новай прылады націсніце на кнопку «+».
Прыклад стварэння панэлі
Пасля таго, як панэль будзе створана, яна з'явіцца ў спісе вашых панэляў.
Ва ўкладцы "Усталёўка", створанай панэлі, знайдзіце палі "ID прылады" і "Ключ аўтарызацыі", у далейшым, гэтая інфармацыя запатрабуецца пры налады Sonoff прылады.
Прыклад укладкі
Крок 2. Перапрашыўка прылады
З дапамогай утыліты
Крок 3. Настройка прылады
Падайце на прыладу сілкаванне, пасля таго як загарыцца святлодыёд, націсніце на кнопку і ўтрымлівайце яе ў націснутым стане датуль, пакуль святлодыёд не пачне перыядычна раўнамерна міргаць.
У гэты момант з'явіцца новая wi-fi сетка з назвай "PLC Sonoff Basic", падключыце свой кампутар да гэтай сеткі.
Расшыфроўка святлодыёднай індыкацыі
Святлодыёдная індыкацыя
Стан прылады
перыядычнае падвойнае мігценне
няма сувязі з роўтэрам
бесперапынна свеціць
усталявана сувязь з роўтэрам
перыядычнае раўнамернае мігценне
рэжым wi-fi кропкі доступу
патушаны
няма харчавання
Адкрыйце інтэрнэт-браўзэр і ўвядзіце ў адрасны радок тэкст "192.168.4.1", перайдзіце на старонку настроек параметраў сеткі прылады.
Запоўніце палі наступным чынам:
- "Імя сеткі" і "Пароль" (для прывязкі прылады да хатняга wi-fi роўтара).
- "ID прылады" і "Ключ аўтарызацыі" (для аўтарызацыі прылады на сэрвісе MGT24).
Прыклад наладкі параметраў сеткі прылад
Захавайце настройкі і перазагрузіце прыладу.
Тут
Крок 4. Падлучэнне датчыкаў (апцыянальна)
Бягучая прашыўка падтрымлівае да чатырох датчыкаў тэмпературы ds18b20. Тут
Раздзел ІІ. Візуальнае праграмаванне
Крок 1. Стварэнне сцэнарыяў
У якасці асяроддзя праграмавання выкарыстоўваецца
Я дадаў спецыялізаваныя блокі для запісу і чытання параметраў прылады. Доступ да любога параметры ажыццяўляецца па імені. Для параметраў выдаленых прылад выкарыстоўваюцца складовыя імёны: "параметр @ прылада".
Выпадальны спіс параметраў
Прыклад сцэнара цыклічнага ўключэння і выключэнні нагрузкі (1Гц):
Прыклад сцэнара сінхранізавальнага працу двух асобных прылад. У прыватнасці, рэле мэтавай прылады паўтарае працу рэле выдаленай прылады.
Сцэнар для тэрмастата (без гістарэзісу):
Каб ствараць больш складаныя сцэнары, можна выкарыстоўваць зменныя, цыклы, функцыі (з аргументамі) і іншыя канструкцыі. Не буду тут усё гэта распісваць падрабязна, у сетцы ўжо ёсць даволі шмат
Крок 2. Парадак выканання сцэнарыяў
Сцэнар працуе ў бесперапынным рэжыме, і як толькі ён даходзіць да свайго заканчэння ён запускаецца зноў. Пры гэтым ёсць два блокі, якія могуць часова прыпыніць працу сцэнара, "delay" і "pause".
Блок "delay" выкарыстоўваецца для мілісекундных або мікрасекундных затрымак. Гэты блок строга вытрымлівае часавы інтэрвал, блакуючы працу ўсёй прылады.
Блок "pause" выкарыстоўваецца для секундных (можна і менш) затрымак, і ён не блакуе выкананне іншых працэсаў у прыладзе.
Калі сцэнар усярэдзіне сябе ўтрымоўвае бясконцы цыкл, у целе якога не варта "pause", інтэрпрэтатар самастойна ініцыюе маленькую паўзу.
У выпадку вычарпання выдзеленага стэка памяці, інтэрпрэтатар спыніць выкананне такога пражэрлівага сцэнара (будзьце асцярожныя з рэкурсіўнымі функцыямі).
Крок 3. Адладка сцэнарыяў
Для адладкі ўжо загружанага ў прыладу сцэнара, можна запусціць трасіроўку праграмы па кроках. Гэта бывае вельмі карысна, калі паводзіны сцэнарыя аказаліся не такімі, як задумваў аўтар. У гэтым выпадку, трасіроўка дазваляе аўтару хутка знайсці крыніцу праблемы і выправіць памылку ў сцэнары.
Сцэнар вылічэнні фактарыяла ў адладкавым рэжыме:
Інструмент адладкі вельмі просты і складаецца з трох асноўных кнопак: "пуск", "адзін крок наперад" і "спынаў" (таксама не забудземся пра "ўваход" і "выхад" з рэжыму адладкі). Акрамя пакрокавай трасіроўкі можна ўсталяваць кропку супыну на любым блоку (пстрычкай мышы над блокам).
Каб вывесці ў манітор бягучыя значэнні параметраў (датчыкі, рэле) выкарыстоўвайце блок "print".
Тут
Раздзел для дапытлівых. А што ж пад капотам?
Для таго каб сцэнары працавалі на мэтавым прыладзе быў распрацаваны інтэрпрэтатар байт-кода і асэмблер на 38 інструкцый. У зыходны код blockly быў убудаваны спецыялізаваны генератар кода, які канвертуе візуальныя блокі ў асэмблерныя інструкцыі. У далейшым гэтая асэмблерная праграма пераўтворыцца ў байт-код і перадаецца ў прыладу на выкананне.
Архітэктура гэтай віртуальнай машыны даволі простая і апісваць яе асаблівага сэнсу няма, у сетцы вы знойдзеце шмат артыкулаў аб праектаванні найпростых віртуальных машын.
Пад стэк сваёй віртуальнай машыны я звычайна вылучаю 1000 байт, гэтага хапае з запасам. Вядома, глыбокія рэкурсіі могуць вычарпаць любы стэк, але ці наўрад ім знойдзецца практычнае ўжыванне.
Выніковы байт-код атрымліваецца даволі кампактным. Як прыклад, байт-код вылічэння таго ж факторыялу складае ўсяго 49 байт. Гэта яго візуальная форма прадстаўлення:
А гэта яго асэмблерная праграма:
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Мгц).
Лічу гэта нядрэнным вынікам, прынамсі, гэтая хуткасць амаль у дзесяць разоў хутчэй чым у
Заключная частка
Падводзячы вынік, скажу, што ўжыванне сцэнараў дазваляе нам не толькі запраграмаваць логіку працы асобнай прылады, але і дае магчымасць звязаць некалькі прылад у адзіны механізм, дзе адны прылады ўплываюць на паводзіны іншых.
Таксама адзначу, што абраны спосаб захоўвання сцэнараў (непасрэдна ў саміх прыладах, а не на серверы), спрашчае пераключэнне ўжо якія працуюць прылад на іншы сервер, напрыклад на хатні Raspberry, тут
На гэтым усё, буду рады пачуць парады і канструктыўную крытыку.
Крыніца: habr.com