Visuaalne programmeerimine Sonoff Basic'ile

Visuaalne programmeerimine Sonoff Basic'ile
Artikkel sellest, kuidas odav hiinlane muutub programmeeritavaks loogikakontrolleriks. Selline seade leiab rakendust nii koduautomaatikas kui ka praktilistes kooliprojektides.
Teadaolevalt töötab Sonoff Basic vaikimisi rakendusega, mis on ühendatud Hiina pilveteenusega, kuid pärast kavandatud ümberehitust saab järgmine suhtlemine seadmega toimuda brauseris.

Jagamine I. Sonoffi ühendamine MGT24 teenusega

Samm 1. Juhtpaneeli loomine

Registreeru veebilehel mgt24 (kui pole veel registreerunud) ja logi sisse oma kontoga.
SisselogimineVisuaalne programmeerimine Sonoff Basic'ile

Uue seadme jaoks juhtpaneeli loomiseks vajutage nuppu „+”.
Juhtpaneeli loomise näidisVisuaalne programmeerimine Sonoff Basic'ile

Kui paneel on loodud, kuvatakse see teie paneelide loendis.

Juhtpaneeli „Paigaldamine” vahekaardil leidke väljad „Seadmese ID” ja „Autorizatsiooni võti”, seda teavet vajate Sonoff seadme seadistamisel.
Vahekaart näidisVisuaalne programmeerimine Sonoff Basic'ile

Samm 2. Seadme ümberprogrammeerimine

Kasutades utiliiti XTCOM_UTIL laadige alla Sonoff Basic PLC tarkvara seadmepärane USB-TTL konverter. Siin juhend ja videoinstruktsioon.

Samm 3. Seadme seadistamine

Toitke seadet, pärast LED-i süttimist vajutage nuppu ja hoidke seda all, kuni LED hakkab perioodiliselt ühtlaselt vilkuma.
Sel hetkel ilmub uus wi-fi võrk nimega «PLC Sonoff Basic», ühendage oma arvuti sellele võrgule.
LED-indikatsiooni dešifreerimine

LED-indikatsioon
Seisund

perioodiline topelt vilkumine
ühendust ruuteriga pole

pidevalt süttib
ühendust ruuteriga on

perioodiline ühtlane vilkumine
wi-fi pääsupunkti režiim

kustutatud
toit puudub

Avage veebibrauser ja sisestage aadressiriba tekst «192.168.4.1», minge seadme võrgusettingute lehele.

Täita väljad järgmiselt:

  • «Võrgu nimi» ja «Parool» (seadmise sidumiseks koduse wi-fi ruuteriga).
  • «Seadmise ID» ja «Autoriseerimissõti» (seadmise autoriseerimiseks MGT24 teenuses).

Näide seadme võrguseadete seadistamisestVisuaalne programmeerimine Sonoff Basic'ile

Salvestage seaded ja taaskäivitage seade.
Siit videoinstruktsioon.

Samm 4. Sensorite ühendamine (valikuline)

Praegune püsivara toetab kuni nelja temperatuurisensori ds18b20. Siin videoinstruktsioon on sensori paigaldamise kohta. Tundub, et see samm on kõige keerulisem, kuna see nõuab otsekäsi ja jootmispuuri.

Jagunemine II. Visuaalne programmeerimine

Samm 1. Skriptide loomine

Programmeerimisena kasutatakse Blockly, keskkond on lihtne ning seega ei pea lihtsate skriptide loomiseks olema programmeerija.

Olen lisanud spetsialiseeritud plokid seadme parameetrite lugemiseks ja salvestamiseks. Iga parameetrile pääseb ligi nime kaudu. Kaugseadmete parameetrite puhul kasutatakse koosnimesid: «parameeter@seade».
Parameetrite rippmenüüVisuaalne programmeerimine Sonoff Basic'ile

Näide skriptist, mis lülitab koormust tsükliliselt sisse ja välja (1 Hz):
Visuaalne programmeerimine Sonoff Basic'ile

Näide skriptist, mis sünkroniseerib kahe eraldi seadme tööd. Nimelt, sihesseadme relee kordab kaugseadmest tuleva relee tööd.
Visuaalne programmeerimine Sonoff Basic'ile

Skript termostaadi jaoks (ilus ei toimu):
Visuaalne programmeerimine Sonoff Basic'ile

Kasutamiseks keerukamate skriptide loomisel on võimalik kasutada muutujaid, silmuseid, funktsioone (argumentidega) ja muid konstruktsioone. Ei hakka siin kõike detailselt kirjeldama, internetis on juba piisavalt õppematerjale Blockly kohta.

Samm 2. Skriptide täitmise järjekord

Skript töötab pidevas režiimis ja kui see jõuab oma lõppu, käivitub see uuesti. On kaks plokki, mis võivad ajutiselt peatada skripti töö, "delay" ja "pause".
Plokk "delay" kasutatakse millisekundiliste või mikrosekundiliste viivituste jaoks. See plokk järgib rangelt ajavahemikku, blokeerides kogu seadme töö.
Plokk "pause" kasutatakse sekundi (võib ka vähem) viivituste jaoks ning see ei blokeeri teiste protsesside täitmist seadmes.
Kui skript sisaldab endas lõpmatut silmust, mille kehas ei ole "pause", algatab interpretor iseseisvalt väikese pausi.
Kui ettenähtud mälu tase on ammendunud, peatab interpretor sellise nälgiva skripti täitmise (olge ettevaatlikud rekursiivsete funktsioonidega).

Samm 3. Skriptide tõrkeotsing

Kohandatud skripti tõrkeotsingu abil saab programmi siluda samm-sammult. See on äärmiselt kasulik, kui skripti käitumine ei vasta autori kavatsustele. Sel juhul võimaldab silumine autoril kiiresti leida probleemiallika ja parandada skriptis vea.

Faktoriaali arvutamise skript tõrkeotsingurežiimis:
Visuaalne programmeerimine Sonoff Basic'ile

Tõrkeotsingu tööriist on väga lihtne ja sisaldab kolme põhiennust: 'algus', 'ühe sammu edasi' ja 'peatamine' (ära unusta ka 'sisse' ja 'välja' tõrkeotsingu režiimist). Lisaks samm-sammule silumisele saab peatamise punktide seadmiseks klõpsata igal plokil.
Praeguste parameetrite väärtuste (andurid, releed) jälgimiseks kasutage plokki 'print'.
Siit ülevaatav video tõrkeotsingu kasutamisest.

Sektsioon uudishimulikele. Aga mis toimub kapoti all?

Selleks, et skriptid töötaksid sihtseadmest, on välja töötatud 38 käsust koosnev byte-koodi tõlk ja assembler. Blockly lähtekoodi on integreeritud spetsialiseeritud koodigeneraator, mis konverteerib visuaalsed plokid assembleri käskudeks. Edasi muudetakse see assembleriprogramm byte-koodiks ja edastatakse seadmele täitmiseks.
Selle virtuaalmasina arhitektuur on üsna lihtne ning pole mõtet seda põhjalikult kirjeldada, internetis on palju artikleid lihtsaimate virtuaalmasinate projekteerimise kohta.
Oma virtuaalmasina jaoks eraldan tavaliselt 1000 baiti, sellest piisab. Loomulikult võivad sügavad rekursioonid ammendada mis tahes steki, kuid tõenäoliselt pole neil praktilist rakendust.

Lõplik byte-kood osutub üsna kompaktseks. Näiteks sama faktoriumi arvutamise byte-kood koosneb vaid 49 baitist. See on tema visuaalne esitus:
Visuaalne programmeerimine Sonoff Basic'ile

Ja see on tema assembleri programm:

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

Kui assembleri esitusviisil ei ole mingit praktilist väärtust, siis vahekaart „javascrit“ vastupidi, pakub tuttavamat välimust kui visuaalsed plokid:

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

window.alert(factorial(10));

Mis puutub jõudlusesse. Kui jooksin lihtsaimat vilkuvat skripti, siis osilloskoobi ekraanil sain 47kHz meanderi (protsessori taktsagedus 80MHz).
Visuaalne programmeerimine Sonoff Basic'ileVisuaalne programmeerimine Sonoff Basic'ile
Pean seda suhteliselt hea tulemuseks, vähemalt see kiirus on peaaegu kümme korda kiiremini kui Lua ja Espruino.

Lõppsõna

Kokkuvõttes ütlen, et skriptide kasutamine võimaldab meil mitte ainult programmeerida üksiku seadme tööloogikat, vaid annab ka võimaluse siduda mitu seadet ühiseks mehhanismiks, kus üks seade mõjutab teiste käitumist.
Toon välja ka, et valitud skriptide salvestamise viis (otse seadmetes, mitte serveris) lihtsustab juba töötavate seadmete üleviimist teisele serverile, näiteks kodusele Raspberry'le, siin juhend.

Sellega on kõik, olen avatud soovitustele ja konstruktiivsele kriitikale.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster