Straipsnis apie tai, kaip iš pigaus kiniško įrenginio sukurti programuojamą loginį valdiklį. Toks įrenginys bus naudojamas tiek namų automatizavime, tiek kaip praktinės informatikos pamokos mokykloje.
Pagal numatytuosius nustatymus „Sonoff Basic“ programa veikia su mobiliąja programa per Kinijos debesies paslaugą; po siūlomo pakeitimo visa tolesnė sąveika su šiuo įrenginiu bus įmanoma naršyklėje.
I skyrius. Sonoff prijungimas prie MGT24 paslaugos
1 veiksmas: sukurkite valdymo skydelį
Registruokitės svetainėje
Prisijunkite prie sistemos
Norėdami sukurti valdymo skydelį naujam įrenginiui, spustelėkite mygtuką „+“.
Skydelio kūrimo pavyzdys
Kai skydelis bus sukurtas, jis bus rodomas skydelių sąraše.
Sukurto skydelio skirtuke „Sąranka“ raskite laukus „Įrenginio ID“ ir „Autorizacijos raktas“, ateityje šios informacijos reikės nustatant „Sonoff“ įrenginį.
Skirtuko pavyzdys
2 veiksmas. Iš naujo paleiskite įrenginį
Naudodami naudingumą
3 veiksmas. Įrenginio sąranka
Įjunkite įrenginį, kai užsidegs šviesos diodas, paspauskite mygtuką ir laikykite nuspaustą, kol šviesos diodas pradės periodiškai tolygiai mirksėti.
Šiuo metu atsiras naujas „Wi-Fi“ tinklas pavadinimu „PLC Sonoff Basic“, prijunkite kompiuterį prie šio tinklo.
LED indikacijos paaiškinimas
LED indikacija
Įrenginio būsena
periodiškas dvigubas mirksėjimas
nėra ryšio su maršrutizatoriumi
nuolat šviečia
užmegztas ryšys su maršrutizatoriumi
periodiškas vienodas mirksėjimas
„Wi-Fi“ prieigos taško režimas
užgeso
Nėra maitinimo
Atidarykite interneto naršyklę ir adreso juostoje įveskite tekstą „192.168.4.1“, eikite į įrenginio tinklo nustatymų puslapį.
Laukus užpildykite taip:
- „Tinklo pavadinimas“ ir „Slaptažodis“ (įrenginiui susieti su namų „Wi-Fi“ maršruto parinktuvu).
- „Įrenginio ID“ ir „Autorizacijos raktas“ (įrenginiui autorizuoti naudojant MGT24 paslaugą).
Įrenginio tinklo parametrų nustatymo pavyzdys
Išsaugokite nustatymus ir iš naujo paleiskite įrenginį.
Čia
4 veiksmas. Jutiklių prijungimas (pasirinktinai)
Dabartinė programinė įranga palaiko iki keturių ds18b20 temperatūros jutiklių. Čia
II skyrius. Vaizdinis programavimas
1 veiksmas: sukurkite scenarijus
Naudojama kaip programavimo aplinka
Pridėjau specializuotus blokus įrenginio parametrų rašymui ir skaitymui. Bet kuris parametras pasiekiamas pagal pavadinimą. Nuotolinių įrenginių parametrams naudojami sudėtiniai pavadinimai: „parameter@device“.
Išskleidžiamasis parinkčių sąrašas
Ciklinio apkrovos įjungimo ir išjungimo scenarijaus pavyzdys (1 Hz):
Scenarijaus, sinchronizuojančio dviejų atskirų įrenginių veikimą, pavyzdys. Būtent, tikslinio įrenginio relė pakartoja nuotolinio įrenginio relės veikimą.
Termostato scenarijus (be histerezės):
Norėdami sukurti sudėtingesnius scenarijus, galite naudoti kintamuosius, kilpas, funkcijas (su argumentais) ir kitas konstrukcijas. Viso to čia išsamiai neaprašysiu, tinkle jau yra nemažai.
2 veiksmas: scenarijų tvarka
Scenarijus veikia nuolat, o kai tik pasiekia pabaigą, jis pradedamas iš naujo. Šiuo atveju yra du blokai, kurie gali laikinai pristabdyti scenarijų: „delsti“ ir „pauzė“.
„Delay“ blokas naudojamas milisekundžių arba mikrosekundžių vėlavimui. Šis blokas griežtai palaiko laiko intervalą, blokuodamas viso įrenginio veikimą.
„Pauzės“ blokas naudojamas antrajai (ar mažiau) uždelsimui ir jis neblokuoja kitų įrenginio procesų vykdymo.
Jei pačiame scenarijuje yra begalinis ciklas, kurio turinyje nėra „pauzės“, interpretatorius savarankiškai inicijuoja trumpą pauzę.
Jei skirta atminties krūva išeikvojama, vertėjas nustos vykdyti tokį energijos reikalaujantį scenarijų (būkite atsargūs su rekursinėmis funkcijomis).
3 veiksmas: scenarijų derinimas
Norėdami derinti scenarijų, kuris jau buvo įkeltas į įrenginį, galite žingsnis po žingsnio paleisti programos sekimą. Tai gali būti labai naudinga, kai scenarijaus elgesys skiriasi nuo to, ko norėjo autorius. Šiuo atveju sekimas leidžia autoriui greitai rasti problemos šaltinį ir ištaisyti scenarijaus klaidą.
Faktoriaus skaičiavimo derinimo režimu scenarijus:
Derinimo įrankis yra labai paprastas ir susideda iš trijų pagrindinių mygtukų: "pradėti", "vienu žingsniu į priekį" ir "stop" (taip pat nepamirškime apie derinimo režimą "įvesti" ir "išeiti"). Be nuoseklaus sekimo, bet kuriame bloke galite nustatyti pertraukos tašką (spustelėdami bloką).
Norėdami monitoriuje rodyti esamas parametrų (daviklių, relių) reikšmes, naudokite bloką „spausdinti“.
Čia
Skyrius smalsiems. Kas yra po gaubtu?
Kad scenarijai veiktų tiksliniame įrenginyje, buvo sukurtas baitų kodo interpretatorius ir surinkėjas su 38 instrukcijomis. „Blockly“ šaltinio kode yra įmontuotas specializuotas kodo generatorius, kuris vaizdinius blokus paverčia surinkimo instrukcijomis. Vėliau ši surinkėjo programa konvertuojama į baitinį kodą ir perkeliama į įrenginį vykdyti.
Šios virtualios mašinos architektūra yra gana paprasta ir nėra prasmės ją apibūdinti, internete rasite daug straipsnių apie paprasčiausių virtualių mašinų projektavimą.
Paprastai savo virtualios mašinos kaminui skiriu 1000 baitų, kurių užtenka. Žinoma, gilios rekursijos gali išnaudoti bet kokį krūvą, tačiau vargu ar jie turės jokios praktinės naudos.
Gautas baito kodas yra gana kompaktiškas. Pavyzdžiui, to paties faktorialo skaičiavimo baitų kodas yra tik 49 baitai. Tai yra jo vizualinė forma:
Ir tai yra jo surinkėjo programa:
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
Jei surinkimo forma neturi jokios praktinės vertės, tada skirtukas „javascrit“, priešingai, suteikia labiau pažįstamą išvaizdą nei vaizdiniai blokai:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Kalbant apie našumą. Kai paleidau paprasčiausią blykstės scenarijų, osciloskopo ekrane gavau 47 kHz kvadratinę bangą (procesoriaus taktiniu dažniu 80 MHz).
Manau, kad tai geras rezultatas, bent jau šis greitis yra beveik dešimt kartų didesnis nei
Baigiamoji dalis
Apibendrinant pasakysiu, kad scenarijų naudojimas leidžia ne tik programuoti atskiro įrenginio veikimo logiką, bet ir leidžia sujungti kelis įrenginius į vieną mechanizmą, kai vieni įrenginiai įtakoja kitų elgesį.
Taip pat atkreipiu dėmesį, kad pasirinktas scenarijų saugojimo būdas (tiesiogiai pačiuose įrenginiuose, o ne serveryje) supaprastina jau veikiančių įrenginių perjungimą į kitą serverį, pavyzdžiui, į namų Raspberry, čia
Tai viskas, man bus malonu išgirsti patarimus ir konstruktyvią kritiką.
Šaltinis: www.habr.com