Artikolo pri kiel krei programeblan logikan regilon el malmultekosta ĉina aparato. Tia aparato trovos sian uzon kaj en hejma aŭtomatigo kaj kiel praktikaj klasoj en lerneja komputiko.
Por referenco, defaŭlte la Sonoff Basic-programo funkcias kun poŝtelefona aplikaĵo per ĉina nuba servo; post la proponita modifo, ĉia plua interago kun ĉi tiu aparato eblos en la retumilo.
Sekcio I. Konekti Sonoff al la servo MGT24
Paŝo 1: Kreu kontrolpanelon
Registru en la retejo
Ensaluti al la sistemo
Por krei kontrolpanelon por nova aparato, alklaku la butonon "+".
Ekzemplo de kreado de panelo
Post kiam la panelo estas kreita, ĝi aperos en via listo de paneloj.
En la langeto "Agordo" de la kreita panelo, trovu la kampojn "Identigilo de Aparato" kaj "Aŭtoriga Ŝlosilo"; estonte, ĉi tiu informo estos postulata dum agordo de la Sonoff-aparato.
Tabekzemplo
Paŝo 2. Reflash la aparato
Uzante la utilecon
Paŝo 3. Aparato agordo
Apliku potencon al la aparato, post kiam la LED lumiĝas, premu la butonon kaj tenu ĝin premita ĝis la LED komencas ekbrili periode egale.
En ĉi tiu momento, nova reto wi-fi nomita "PLC Sonoff Basic" aperos, konektu vian komputilon al ĉi tiu reto.
Klarigo de LED-indiko
LED-indiko
Aparato Statuso
perioda duobla ekbrilado
neniu konekto al enkursigilo
brilas senĉese
konekto establita kun la enkursigilo
perioda uniforma fulmo
reĝimo de wifi alirpunkto
estingita
Neniu elektroprovizo
Malfermu Interretan retumilon kaj enigu la tekston "192.168.4.1" en la adresbreto, iru al la retpaĝo de agordoj de la aparato.
Plenigu la kampojn jene:
- "Retonomo" kaj "Pasvorto" (por ligi la aparaton al via hejma wi-fi-enkursigilo).
- "Identigilo de aparato" kaj "Ŝlosilo de Rajto" (por rajtigi la aparaton en la servo MGT24).
Ekzemplo de agordo de aparato-retaj parametroj
Konservu la agordojn kaj rekomencu la aparaton.
estas
Paŝo 4. Konekti sensilojn (laŭvola)
La nuna firmvaro subtenas ĝis kvar ds18b20 temperatursensilojn. Jen
Sekcio II. Vida programado
Paŝo 1: Kreu Skriptojn
Uzita kiel programa medio
Mi aldonis specialajn blokojn por skribi kaj legi aparatojn parametrojn. Ajna parametro estas alirebla per nomo. Por parametroj de foraj aparatoj, oni uzas kunmetitajn nomojn: "parametro@aparato".
Dropdown listo de opcioj
Ekzempla scenaro por cikla ŝaltado kaj malŝalto de la ŝarĝo (1Hz):
Ekzemplo de skripto sinkroniganta la funkciadon de du apartaj aparatoj. Nome, la relajso de la cela aparato ripetas la funkciadon de la relajso de la fora aparato.
Scenaro por termostato (sen histerezo):
Por krei pli kompleksajn skriptojn, vi povas uzi variablojn, buklojn, funkciojn (kun argumentoj) kaj aliajn konstrukciojn. Ĉion ĉi mi ne detale priskribos ĉi tie; jam estas sufiĉe multe en la reto.
Paŝo 2: Ordo de Skriptoj
La skripto funkcias senĉese, kaj tuj kiam ĝi atingas sian finon, ĝi rekomencas. En ĉi tiu kazo, estas du blokoj kiuj povas provizore paŭzi la skripton, "prokrasto" kaj "paŭzo".
La "prokrasto-" bloko estas uzita por milisekundoj aŭ mikrosekundaj prokrastoj. Ĉi tiu bloko strikte konservas la tempintervalon, blokante la funkciadon de la tuta aparato.
La "paŭzo" bloko estas uzata por duaj (aŭ malpli) prokrastoj, kaj ĝi ne blokas la ekzekuton de aliaj procezoj en la aparato.
Se la skripto mem enhavas senfinan buklon, kies korpo ne enhavas "paŭzon", la interpretisto sendepende iniciatas mallongan paŭzon.
Se la asignita memorstako estas elĉerpita, la interpretisto ĉesos ekzekuti tian potencan skripton (atentu pri rekursiemaj funkcioj).
Paŝo 3: Sencimigaj Skriptoj
Por sencimigi skripton, kiu jam estis ŝarĝita en la aparaton, vi povas ruli programspuron paŝon post paŝo. Ĉi tio povas esti ege utila kiam la konduto de la skripto montriĝis malsama ol tio, kion la aŭtoro celis. En ĉi tiu kazo, spurado permesas al la aŭtoro rapide trovi la fonton de la problemo kaj korekti la eraron en la skripto.
Scenaro por kalkuli faktorialon en sencimiga reĝimo:
La sencimiga ilo estas tre simpla kaj konsistas el tri ĉefaj butonoj: "komenco", "unu paŝo antaŭen" kaj "ĉesigi" (ni ankaŭ ne forgesu pri "eniri" kaj "eliri" sencimigan reĝimon). Krom paŝo post paŝo, vi povas agordi rompopunkton sur iu ajn bloko (klakante sur la bloko).
Por montri la aktualajn valorojn de parametroj (sensiloj, relajsoj) en la monitoro, uzu la "presan" blokon.
estas
Sekcio por la scivolemuloj. Kio estas sub la kapuĉo?
Por ke la skriptoj funkciu sur la cela aparato, bajtokoda interpretisto kaj asemblero kun 38 instrukcioj estis evoluigitaj. La fontkodo de Blockly havas specialecan kodgeneratoron enkonstruitan en ĝi, kiu konvertas vidajn blokojn en kunig instrukciojn. Poste, ĉi tiu asemblerprogramo estas konvertita en bajtkodon kaj transdonita al la aparato por ekzekuto.
La arkitekturo de ĉi tiu virtuala maŝino estas sufiĉe simpla kaj ne havas apartan signifon priskribi ĝin; en Interreto vi trovos multajn artikolojn pri desegnado de la plej simplaj virtualaj maŝinoj.
Mi kutime asignas 1000 bajtojn por la stako de mia virtuala maŝino, kio sufiĉas por ŝpari. Kompreneble, profundaj rekursoj povas elĉerpi ajnan stakon, sed ili verŝajne ne havos ian praktikan uzon.
La rezulta bajtokodo estas sufiĉe kompakta. Ekzemple, la bajtokodo por kalkuli la saman faktorialon estas nur 49 bajtoj. Jen ĝia vida formo:
Kaj jen lia asemblerprogramo:
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
Se la kunigformo de reprezentado ne havas ajnan praktikan valoron, tiam la langeto "javascrit" male donas pli konatan aspekton ol vidaj blokoj:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Koncerne agadon. Kiam mi rulis la plej simplan fulman skripton, mi ricevis 47 kHz-an kvadratan ondon sur la osciloskopekrano (ĉe procesora horloĝrapideco de 80 MHz).
Mi pensas, ke ĉi tio estas bona rezulto, almenaŭ ĉi tiu rapido estas preskaŭ dekoble pli rapida ol
Fina parto
Por resumi, mi diros, ke la uzo de skriptoj ebligas al ni ne nur programi la logikon de funkciado de aparta aparato, sed ankaŭ ebligas konekti plurajn aparatojn en ununuran mekanismon, kie iuj aparatoj influas la konduton de aliaj.
Mi ankaŭ rimarkas, ke la elektita metodo por konservi skriptojn (rekte en la aparatoj mem, kaj ne sur la servilo) simpligas la ŝanĝadon de jam laborantaj aparatoj al alia servilo, ekzemple al hejma Frambo, ĉi tie
Jen ĉio, mi ĝojos aŭdi konsilojn kaj konstruajn kritikojn.
fonto: www.habr.com