
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 (kui pole veel registreerunud) ja logi sisse oma kontoga.
Sisselogimine
Uue seadme jaoks juhtpaneeli loomiseks vajutage nuppu „+”.
Juhtpaneeli loomise näidis
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äidis
Samm 2. Seadme ümberprogrammeerimine
Kasutades utiliiti laadige alla seadmepärane USB-TTL konverter. Siin ja .
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 seadistamisest
Salvestage seaded ja taaskäivitage seade.
Siit .
Samm 4. Sensorite ühendamine (valikuline)
Praegune püsivara toetab kuni nelja temperatuurisensori ds18b20. Siin 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 , 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üü
Näide skriptist, mis lülitab koormust tsükliliselt sisse ja välja (1 Hz):

Näide skriptist, mis sünkroniseerib kahe eraldi seadme tööd. Nimelt, sihesseadme relee kordab kaugseadmest tuleva relee tööd.

Skript termostaadi jaoks (ilus ei toimu):

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 .
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:

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 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:

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).


Pean seda suhteliselt hea tulemuseks, vähemalt see kiirus on peaaegu kümme korda kiiremini kui ja .
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 .
Sellega on kõik, olen avatud soovitustele ja konstruktiivsele kriitikale.
Allikas: habr.com
