In artikel oer hoe't jo in programmabele logyske controller meitsje fan in goedkeap Sineesk apparaat. Sa'n apparaat sil syn gebrûk fine sawol yn hûsautomatisearring as as praktyske lessen yn skoallekomputer wittenskip.
Foar referinsje wurket it Sonoff Basic-programma standert mei in mobile applikaasje fia in Sineeske wolktsjinst; nei de foarstelde wiziging sil alle fierdere ynteraksje mei dit apparaat mooglik wêze yn 'e browser.
Seksje I. Ferbine Sonoff oan de MGT24 tsjinst
Stap 1: Meitsje in kontrôlepaniel
Registrearje op de side
Oanmelde
Om in kontrôlepaniel foar in nij apparaat te meitsjen, klikje jo op de knop "+".
Foarbyld fan it meitsjen fan in paniel
Sadree't it paniel is oanmakke, sil it ferskine yn jo list mei panielen.
Yn 'e ljepper "Setup" fan it oanmakke paniel fine jo de fjilden "Device ID" en "Autorisaasjekaai"; yn 'e takomst sil dizze ynformaasje ferplicht wurde by it ynstellen fan it Sonoff-apparaat.
Foarbyld fan Tab
Stap 2. Reflash it apparaat
Mei help fan it nut
Stap 3. Apparaat opset
Tapasse macht oan it apparaat, neidat de LED opljochtet, druk op de knop en hâld it yndrukt oant de LED begjint periodyk lykmjittich te flitsen.
Op dit stuit sil in nij wi-fi-netwurk mei de namme "PLC Sonoff Basic" ferskine, ferbine jo kompjûter mei dit netwurk.
Taljochting fan LED yndikaasje
LED yndikaasje
Apparaat Status
periodyk dûbele wjerljochtsjende
gjin ferbining mei router
skynt kontinu
ferbining makke mei de router
periodyk unifoarm wjerljochtsjende
wi-fi tagongspunt modus
útstoarn
Gjin stroomfoarsjenning
Iepenje in ynternetblêder en typ de tekst "192.168.4.1" yn 'e adresbalke, gean nei de side fan netwurkynstellingen fan it apparaat.
Folje de fjilden sa yn:
- "Netwurknamme" en "Wachtwurd" (om it apparaat te keppeljen oan jo wi-fi-router thús).
- "Apparaat ID" en "autorisaasjekaai" (om it apparaat te autorisearjen op 'e MGT24-tsjinst).
Foarbyld fan it ynstellen fan apparaat netwurk parameters
Bewarje de ynstellings en herstart it apparaat.
it is
Stap 4. Ferbine sensoren (opsjoneel)
De hjoeddeistige firmware stipet maksimaal fjouwer ds18b20 temperatuersensors. Hjir
Seksje II. Visuele programmearring
Stap 1: Skripten meitsje
Wurdt brûkt as programmearring omjouwing
Ik haw spesjalisearre blokken tafoege foar it skriuwen en lêzen fan apparaatparameters. Elke parameter is tagonklik mei namme. Foar parameters fan apparaten op ôfstân wurde gearstalde nammen brûkt: "parameter@apparaat".
Dropdown list mei opsjes
Foarbyldscenario foar cyclysk yn- en útskeakeljen fan de lading (1Hz):
In foarbyld fan in skript dat de wurking fan twa aparte apparaten syngronisearje. Nammentlik, it estafette fan it doelapparaat werhellet de wurking fan it estafette fan it apparaat op ôfstân.
Senario foar thermostaat (sûnder hysteresis):
Om mear komplekse skripts te meitsjen, kinne jo fariabelen, loops, funksjes (mei arguminten) en oare konstruksjes brûke. Ik sil dit alles hjir net yn detail beskriuwe; der is al in soad op it net.
Stap 2: Folder fan skripts
It skript rint kontinu, en sa gau as it berikt syn ein, it begjint wer. Yn dit gefal binne d'r twa blokken dy't it skript tydlik kinne pauze, "fertrage" en "pauze".
It blok "fertraging" wurdt brûkt foar millisekonden of mikrosekonden fertragingen. Dit blok hâldt strikt de tiid ynterval, blokkearje de wurking fan it hiele apparaat.
It blok "pauze" wurdt brûkt foar twadde (of minder) fertragingen, en it blokkearret de útfiering fan oare prosessen yn it apparaat net.
As it skript sels in ûneinige loop befettet, wêrfan it lichem gjin "pauze" befettet, begjint de tolk selsstannich in koarte pauze.
As de tawiisde ûnthâldstap is útput, sil de tolk ophâlde mei it útfieren fan sa'n machtshonger skript (wês foarsichtich mei rekursive funksjes).
Stap 3: Debuggen fan skripts
Om in skript te debuggen dat al yn it apparaat is laden, kinne jo stap foar stap in programma trace útfiere. Dit kin ekstreem nuttich wêze as it gedrach fan it skript oars blykte te wêzen fan wat de auteur bedoelde. Yn dit gefal lit tracing de auteur de boarne fan it probleem fluch fine en de flater yn it skript korrigearje.
Senario foar it berekkenjen fan faktoriaal yn debugmodus:
It debug-ark is heul ienfâldich en bestiet út trije haadknoppen: "begjinne", "ien stap foarút" en "stopje" (litte wy ek net ferjitte oer "yngean" en "ôfslute" debugmodus). Neist stap-foar-stap tracing kinne jo in brekpunt ynstelle op elk blok (troch op it blok te klikken).
Om de hjoeddeistige wearden fan parameters (sensors, relais) yn 'e monitor te werjaan, brûk it blok "print".
it is
Seksje foar de nijsgjirrige. Wat is ûnder de motorkap?
Om de skripts op it doelapparaat te wurkjen, waarden in bytecode-interpreter en in assembler mei 38 ynstruksjes ûntwikkele. De boarnekoade fan Blockly hat in spesjalisearre koadegenerator ynboud dy't fisuele blokken omsette yn montage-ynstruksjes. Dêrnei wurdt dit assemblerprogramma omboud ta bytekoade en oerdroegen oan it apparaat foar útfiering.
De arsjitektuer fan dizze firtuele masine is frij ienfâldich en d'r is gjin spesjaal punt yn it beskriuwen; op it ynternet fine jo in protte artikels oer it ûntwerpen fan 'e ienfâldichste firtuele masines.
Ik allocearje normaal 1000 bytes foar de stapel fan myn firtuele masine, wat genôch is om te sparjen. Fansels kinne djippe rekurzjes elke stapel útputte, mar it is net wierskynlik dat se praktysk gebrûk hawwe.
De resultearjende bytekoade is frij kompakt. As foarbyld is de bytekoade foar it berekkenjen fan deselde faktorial mar 49 bytes. Dit is syn fisuele foarm:
En dit is syn assemblerprogramma:
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
As de gearstallingsfoarm fan fertsjintwurdiging gjin praktyske wearde hat, dan jout de ljepper "javaskrit", krekt oarsom, in mear fertroud útsjoch as fisuele blokken:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Oangeande prestaasjes. Doe't ik rûn de simpelste flasher skript, Ik krige in 47 kHz fjouwerkante golf op de oscilloscope skerm (by in prosessor klok snelheid fan 80 MHz).
Ik tink dat dit is in goed resultaat, op syn minst dizze snelheid is hast tsien kear flugger as
Finale diel
Om gearfetsje, sil ik sizze dat it brûken fan skripts ús net allinich de logika fan 'e wurking fan in apart apparaat kinne programmearje, mar makket it ek mooglik om ferskate apparaten te ferbinen yn ien meganisme, wêrby't guon apparaten it gedrach fan oaren beynfloedzje.
Ik merk ek op dat de keazen metoade foar it bewarjen fan skripts (direkt yn 'e apparaten sels, en net op' e tsjinner) it wikseljen fan al wurkjende apparaten nei in oare server, bygelyks nei in hûs Raspberry, hjir ferienfâldiget
Dat is alles, ik hear graach advys en konstruktive krityk.
Boarne: www.habr.com