Visual programming para sa Sonoff Basic

Visual programming para sa Sonoff Basic
Isang artikulo tungkol sa kung paano lumikha ng isang programmable logic controller mula sa isang murang Chinese device. Ang nasabing aparato ay makikita ang paggamit nito kapwa sa home automation at bilang mga praktikal na klase sa computer science ng paaralan.
Bilang sanggunian, bilang default, gumagana ang Sonoff Basic program sa isang mobile application sa pamamagitan ng Chinese cloud service; pagkatapos ng iminungkahing pagbabago, lahat ng karagdagang pakikipag-ugnayan sa device na ito ay magiging posible sa browser.

Seksyon I. Pagkonekta ng Sonoff sa serbisyo ng MGT24

Hakbang 1: Gumawa ng control panel

Magrehistro sa site mgt24 (kung hindi pa nakarehistro) at mag-log in gamit ang iyong account.
Pag-loginVisual programming para sa Sonoff Basic

Upang lumikha ng control panel para sa isang bagong device, mag-click sa "+" na buton.
Halimbawa ng paggawa ng panelVisual programming para sa Sonoff Basic

Kapag nalikha na ang panel, lalabas ito sa iyong listahan ng mga panel.

Sa tab na "Setup" ng ginawang panel, hanapin ang mga field na "Device ID" at "Authorization Key"; sa hinaharap, kakailanganin ang impormasyong ito kapag nagse-set up ng Sonoff device.
Halimbawa ng tabVisual programming para sa Sonoff Basic

Hakbang 2. I-reflash ang device

Gamit ang utility XTCOM_UTIL i-download ang firmware PLC Sonoff Basic sa device, para dito kakailanganin mo ng USB-TTL converter. Dito pagtuturo ΠΈ Video na pagtuturo.

Hakbang 3. Pag-setup ng device

Ilapat ang power sa device, pagkatapos umilaw ang LED, pindutin ang button at pindutin nang matagal ito hanggang sa magsimulang mag-flash ang LED nang pana-panahon nang pantay-pantay.
Sa sandaling ito, lilitaw ang isang bagong wi-fi network na tinatawag na "PLC Sonoff Basic", ikonekta ang iyong computer sa network na ito.
Paliwanag ng indikasyon ng LED

LED na indikasyon
Status ng Device

panaka-nakang double flashing
walang koneksyon sa router

patuloy na kumikinang
naitatag ang koneksyon sa router

panaka-nakang unipormeng kumikislap
mode ng access point ng wi-fi

napatay
Walang power supply

Magbukas ng Internet browser at ipasok ang text na "192.168.4.1" sa address bar, pumunta sa pahina ng mga setting ng network setting ng device.

Punan ang mga patlang tulad ng sumusunod:

  • "Pangalan ng network" at "Password" (upang i-link ang device sa iyong home wi-fi router).
  • β€œDevice ID” at β€œAuthorization key” (upang pahintulutan ang device sa serbisyo ng MGT24).

Halimbawa ng pagtatakda ng mga parameter ng network ng deviceVisual programming para sa Sonoff Basic

I-save ang mga setting at i-reboot ang device.
Dito Video na pagtuturo.

Hakbang 4. Pagkonekta ng mga sensor (opsyonal)

Sinusuportahan ng kasalukuyang firmware ang hanggang apat na ds18b20 temperature sensors. Dito Video na pagtuturo para sa pag-install ng mga sensor. Tila, ang hakbang na ito ang magiging pinakamahirap, dahil mangangailangan ito ng mga tuwid na armas at isang panghinang na bakal.

Seksyon II. Visual programming

Hakbang 1: Gumawa ng Mga Script

Ginamit bilang isang kapaligiran sa programming Makipot, ang kapaligiran ay madaling matutunan, kaya hindi mo kailangang maging isang programmer upang lumikha ng mga simpleng script.

Nagdagdag ako ng mga espesyal na bloke para sa pagsusulat at pagbabasa ng mga parameter ng device. Ang anumang parameter ay ina-access sa pamamagitan ng pangalan. Para sa mga parameter ng mga malalayong device, ginagamit ang mga pangalan ng tambalan: "parameter@device".
Dropdown na listahan ng mga opsyonVisual programming para sa Sonoff Basic

Halimbawang senaryo para sa cyclic switching on at off ang load (1Hz):
Visual programming para sa Sonoff Basic

Isang halimbawa ng script na nagsi-synchronize sa pagpapatakbo ng dalawang magkahiwalay na device. Ibig sabihin, inuulit ng relay ng target na device ang operasyon ng relay ng remote device.
Visual programming para sa Sonoff Basic

Sitwasyon para sa termostat (nang walang hysteresis):
Visual programming para sa Sonoff Basic

Upang lumikha ng mas kumplikadong mga script, maaari kang gumamit ng mga variable, loop, function (na may mga argumento) at iba pang mga construct. Hindi ko ilalarawan ang lahat ng ito nang detalyado dito; marami na sa net. materyal na pang-edukasyon tungkol sa Blockly.

Hakbang 2: Pagkakasunud-sunod ng mga Script

Tuloy-tuloy na tumatakbo ang script, at sa sandaling maabot nito ang dulo, magsisimula itong muli. Sa kasong ito, mayroong dalawang bloke na maaaring pansamantalang i-pause ang script, "antala" at "i-pause".
Ang "delay" block ay ginagamit para sa millisecond o microsecond delays. Ang block na ito ay mahigpit na nagpapanatili ng agwat ng oras, na hinaharangan ang pagpapatakbo ng buong device.
Ang "pause" block ay ginagamit para sa pangalawang (o mas kaunting) pagkaantala, at hindi nito hinaharangan ang pagpapatupad ng iba pang mga proseso sa device.
Kung ang script mismo ay naglalaman ng isang walang katapusang loop, ang katawan nito ay hindi naglalaman ng "pause", ang interpreter ay nakapag-iisa na nagpasimula ng isang maikling pag-pause.
Kung ang inilalaan na memory stack ay naubos na, ang interpreter ay hihinto sa pagsasagawa ng naturang power hungry na script (mag-ingat sa mga recursive function).

Hakbang 3: Pag-debug ng Mga Script

Upang i-debug ang isang script na na-load na sa device, maaari kang magpatakbo ng isang pagsubaybay sa programa nang sunud-sunod. Maaari itong maging lubhang kapaki-pakinabang kapag ang pag-uugali ng script ay naging iba sa kung ano ang nilayon ng may-akda. Sa kasong ito, ang pagsubaybay ay nagbibigay-daan sa may-akda na mabilis na mahanap ang pinagmulan ng problema at itama ang error sa script.

Sitwasyon para sa pagkalkula ng factorial sa debug mode:
Visual programming para sa Sonoff Basic

Ang tool sa pag-debug ay napaka-simple at binubuo ng tatlong pangunahing mga pindutan: "simulan", "isang hakbang pasulong" at "ihinto" (huwag din nating kalimutan ang tungkol sa "enter" at "exit" debug mode). Bilang karagdagan sa sunud-sunod na pagsubaybay, maaari kang magtakda ng breakpoint sa anumang block (sa pamamagitan ng pag-click sa block).
Upang ipakita ang kasalukuyang mga halaga ng mga parameter (sensor, relay) sa monitor, gamitin ang "print" block.
Dito pangkalahatang-ideya ng video tungkol sa paggamit ng debugger.

Seksyon para sa mausisa. Ano ang nasa ilalim ng talukbong?

Upang gumana ang mga script sa target na device, binuo ang isang bytecode interpreter at isang assembler na may 38 mga tagubilin. Ang source code ng Blockly ay may espesyal na generator ng code na nakapaloob dito na nagko-convert ng mga visual block sa mga tagubilin sa pagpupulong. Kasunod nito, ang assembler program na ito ay na-convert sa bytecode at inilipat sa device para sa pagpapatupad.
Ang arkitektura ng virtual machine na ito ay medyo simple at walang partikular na punto sa paglalarawan nito; sa Internet makikita mo ang maraming mga artikulo tungkol sa pagdidisenyo ng pinakasimpleng virtual machine.
Karaniwan akong naglalaan ng 1000 bytes para sa stack ng aking virtual machine, na sapat na upang matitira. Siyempre, ang mga malalim na recursion ay maaaring maubos ang anumang stack, ngunit ang mga ito ay malamang na hindi magkaroon ng anumang praktikal na paggamit.

Ang resultang bytecode ay medyo compact. Bilang halimbawa, ang bytecode para sa pagkalkula ng parehong factorial ay 49 bytes lamang. Ito ang visual na anyo nito:
Visual programming para sa Sonoff Basic

At ito ang kanyang assembler program:

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

Kung ang form ng pagpupulong ng representasyon ay walang anumang praktikal na halaga, kung gayon ang tab na "javascrit", sa kabaligtaran, ay nagbibigay ng mas pamilyar na hitsura kaysa sa mga visual na bloke:

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

window.alert(factorial(10));

Tungkol sa pagganap. Noong pinatakbo ko ang pinakasimpleng flasher script, nakakuha ako ng 47 kHz square wave sa oscilloscope screen (sa processor clock speed na 80 MHz).
Visual programming para sa Sonoff BasicVisual programming para sa Sonoff Basic
Sa tingin ko ito ay isang magandang resulta, hindi bababa sa bilis na ito ay halos sampung beses na mas mabilis kaysa Lua ΠΈ Espruino.

Ang pangwakas na bahagi

Upang ibuod, sasabihin ko na ang paggamit ng mga script ay nagbibigay-daan sa amin hindi lamang upang i-program ang lohika ng pagpapatakbo ng isang hiwalay na aparato, ngunit ginagawang posible upang ikonekta ang ilang mga aparato sa isang solong mekanismo, kung saan ang ilang mga aparato ay nakakaimpluwensya sa pag-uugali ng iba.
Napansin ko rin na ang napiling paraan ng pag-iimbak ng mga script (direkta sa mga device mismo, at hindi sa server) ay pinapasimple ang paglipat ng mga gumagana nang device sa isa pang server, halimbawa sa isang home Raspberry, dito pagtuturo.

Iyon lang, ikalulugod kong makarinig ng mga payo at nakabubuo na pagpuna.

Pinagmulan: www.habr.com

Magdagdag ng komento