Vida programado por Sonoff Basic

Vida programado por Sonoff Basic
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 mgt24 (se ne jam registrite) kaj ensalutu uzante vian konton.
Ensaluti al la sistemoVida programado por Sonoff Basic

Por krei kontrolpanelon por nova aparato, alklaku la butonon "+".
Ekzemplo de kreado de paneloVida programado por Sonoff Basic

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.
TabekzemploVida programado por Sonoff Basic

Paŝo 2. Reflash la aparato

Uzante la utilecon XTCOM_UTIL elŝutu la firmware PLC Sonoff Basic al la aparato, por tio vi bezonos USB-TTL-konvertilon. Jen manlibro и Video instrukcio.

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 parametrojVida programado por Sonoff Basic

Konservu la agordojn kaj rekomencu la aparaton.
estas Video instrukcio.

Paŝo 4. Konekti sensilojn (laŭvola)

La nuna firmvaro subtenas ĝis kvar ds18b20 temperatursensilojn. Jen Video instrukcio por instalado de sensiloj. Ŝajne, ĉi tiu paŝo estos la plej malfacila, ĉar ĝi postulos rektajn brakojn kaj lutilon.

Sekcio II. Vida programado

Paŝo 1: Kreu Skriptojn

Uzita kiel programa medio Bloke, la medio estas facile lernebla, do vi ne bezonas esti programisto por krei simplajn skriptojn.

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 opciojVida programado por Sonoff Basic

Ekzempla scenaro por cikla ŝaltado kaj malŝalto de la ŝarĝo (1Hz):
Vida programado por Sonoff Basic

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.
Vida programado por Sonoff Basic

Scenaro por termostato (sen histerezo):
Vida programado por Sonoff Basic

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. eduka materialo pri Blockly.

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:
Vida programado por Sonoff Basic

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 superrigarda video pri uzado de la erarserĉilo.

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:
Vida programado por Sonoff Basic

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).
Vida programado por Sonoff BasicVida programado por Sonoff Basic
Mi pensas, ke ĉi tio estas bona rezulto, almenaŭ ĉi tiu rapido estas preskaŭ dekoble pli rapida ol Luno и Espruino.

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

Jen ĉio, mi ĝojos aŭdi konsilojn kaj konstruajn kritikojn.

fonto: www.habr.com

Aldoni komenton