Un article sobre com crear un controlador lògic programable des d'un dispositiu xinès barat. Aquest dispositiu trobarà el seu ús tant en domòtica com com a classes pràctiques en informàtica escolar.
Com a referència, el programa Sonoff Basic funciona per defecte amb una aplicació mòbil a través d'un servei al núvol xinès; després de la modificació proposada, tota interacció posterior amb aquest dispositiu serà possible al navegador.
Secció I. Connexió de Sonoff al servei MGT24
Pas 1: creeu un tauler de control
Registra't al lloc
Inicieu la sessió al sistema
Per crear un tauler de control per a un dispositiu nou, feu clic al botó "+".
Exemple de creació d'un panell
Un cop creat el tauler, apareixerà a la vostra llista de taulers.
A la pestanya "Configuració" del tauler creat, cerqueu els camps "Identificador del dispositiu" i "Clau d'autorització"; en el futur, aquesta informació serà necessària quan configureu el dispositiu Sonoff.
Exemple de pestanya
Pas 2. Torneu a engegar el dispositiu
Utilitzant la utilitat
Pas 3. Configuració del dispositiu
Engegueu el dispositiu, després que el LED s'encén, premeu el botó i manteniu-lo premut fins que el LED comenci a parpellejar periòdicament de manera uniforme.
En aquest moment, apareixerà una nova xarxa wi-fi anomenada “PLC Sonoff Basic”, connecteu el vostre ordinador a aquesta xarxa.
Explicació de la indicació LED
Indicació del LED
Estat del dispositiu
doble parpelleig periòdic
sense connexió amb l'encaminador
brilla contínuament
connexió establerta amb l'encaminador
parpelleig uniforme periòdic
mode de punt d'accés wi-fi
extingit
Sense font d'alimentació
Obriu un navegador d'Internet i introduïu el text "192.168.4.1" a la barra d'adreces, aneu a la pàgina de configuració de la xarxa del dispositiu.
Ompliu els camps de la següent manera:
- "Nom de la xarxa" i "Contrasenya" (per enllaçar el dispositiu amb l'encaminador Wi-Fi de casa).
- “Identificador del dispositiu” i “Clau d'autorització” (per autoritzar el dispositiu al servei MGT24).
Exemple de configuració dels paràmetres de xarxa del dispositiu
Deseu la configuració i reinicieu el dispositiu.
Aquí
Pas 4. Connectar sensors (opcional)
El firmware actual admet fins a quatre sensors de temperatura ds18b20. Aquí
Secció II. Programació visual
Pas 1: creeu scripts
S'utilitza com a entorn de programació
He afegit blocs especialitzats per escriure i llegir paràmetres del dispositiu. S'accedeix a qualsevol paràmetre pel nom. Per als paràmetres de dispositius remots, s'utilitzen noms compostos: "paràmetre@dispositiu".
Llista desplegable d'opcions
Exemple d'escenari per a l'encesa i apagada cíclica de la càrrega (1 Hz):
Un exemple d'un script que sincronitza el funcionament de dos dispositius separats. És a dir, el relé del dispositiu objectiu repeteix el funcionament del relé del dispositiu remot.
Escenari per al termòstat (sense histèresi):
Per crear scripts més complexos, podeu utilitzar variables, bucles, funcions (amb arguments) i altres construccions. No descriuré tot això amb detall aquí; ja n'hi ha força a la xarxa.
Pas 2: Ordre dels scripts
L'script s'executa contínuament i, tan bon punt arriba al seu final, torna a començar. En aquest cas, hi ha dos blocs que poden aturar temporalment l'script, "retard" i "pausa".
El bloc "retard" s'utilitza per a retards de mil·lisegons o microsegons. Aquest bloc manté estrictament l'interval de temps, bloquejant el funcionament de tot el dispositiu.
El bloc "pausa" s'utilitza per a segones (o menys) retards i no bloqueja l'execució d'altres processos al dispositiu.
Si el propi script conté un bucle infinit, el cos del qual no conté "pausa", l'intèrpret inicia de manera independent una breu pausa.
Si la pila de memòria assignada s'esgota, l'intèrpret deixarà d'executar un script tan famós d'energia (compte amb les funcions recursives).
Pas 3: depuració de scripts
Per depurar un script que ja s'ha carregat al dispositiu, podeu executar un seguiment del programa pas a pas. Això pot ser extremadament útil quan el comportament del guió resulta ser diferent del que pretenia l'autor. En aquest cas, el rastreig permet a l'autor trobar ràpidament l'origen del problema i corregir l'error de l'script.
Escenari per calcular el factorial en mode de depuració:
L'eina de depuració és molt senzilla i consta de tres botons principals: "iniciar", "un pas endavant" i "aturar" (tampoc no ens oblidem del mode de depuració "entrar" i "sortir"). A més del seguiment pas a pas, podeu establir un punt d'interrupció en qualsevol bloc (fent clic al bloc).
Per mostrar els valors actuals dels paràmetres (sensors, relés) al monitor, utilitzeu el bloc "impressió".
Aquí
Secció per a curiosos. Què hi ha sota el capó?
Per tal que els scripts funcionin al dispositiu de destinació, es va desenvolupar un intèrpret de bytecode i un assemblador amb 38 instruccions. El codi font de Blockly té un generador de codi especialitzat integrat que converteix els blocs visuals en instruccions de muntatge. Posteriorment, aquest programa assemblador es converteix en bytecode i es transfereix al dispositiu per a l'execució.
L'arquitectura d'aquesta màquina virtual és força senzilla i no té cap sentit particular descriure-la; a Internet trobareu molts articles sobre el disseny de les màquines virtuals més senzilles.
Normalment assigno 1000 bytes per a la pila de la meva màquina virtual, que n'hi ha prou. Per descomptat, les recursències profundes poden esgotar qualsevol pila, però és poc probable que tinguin cap ús pràctic.
El bytecode resultant és força compacte. Com a exemple, el codi de bytes per calcular el mateix factorial és de només 49 bytes. Aquesta és la seva forma visual:
I aquest és el seu programa assemblador:
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
Si la forma de representació del muntatge no té cap valor pràctic, la pestanya "javascrit", per contra, dóna un aspecte més familiar que els blocs visuals:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Pel que fa al rendiment. Quan vaig executar l'script intermitent més senzill, vaig obtenir una ona quadrada de 47 kHz a la pantalla de l'oscil·loscopi (a una velocitat de rellotge del processador de 80 MHz).
Crec que aquest és un bon resultat, almenys aquesta velocitat és gairebé deu vegades més ràpida que
La part final
En resum, diré que l'ús d'scripts ens permet no només programar la lògica de funcionament d'un dispositiu separat, sinó que també permet connectar diversos dispositius en un únic mecanisme, on alguns dispositius influeixen en el comportament dels altres.
També observo que el mètode escollit per emmagatzemar scripts (directament als propis dispositius i no al servidor) simplifica el canvi de dispositius que ja funcionen a un altre servidor, per exemple, a un Raspberry domèstic, aquí
Això és tot, estaré encantat d'escoltar consells i crítiques constructives.
Font: www.habr.com