Programación visual para Sonoff Basic

Programación visual para Sonoff Basic
Un artículo sobre cómo crear un controlador lógico programable a partir de un dispositivo chino económico. Un dispositivo de este tipo se utilizará tanto en la automatización del hogar como en las clases prácticas de informática escolar.
Como referencia, de forma predeterminada el programa Sonoff Basic funciona con una aplicación móvil a través de un servicio en la nube chino; después de la modificación propuesta, toda interacción adicional con este dispositivo será posible en el navegador.

Sección I. Conexión de Sonoff al servicio MGT24

Paso 1: crea un panel de control

Registrarse en el sitio mgt24 (si aún no está registrado) e inicie sesión con su cuenta.
Ingresar al sistemaProgramación visual para Sonoff Basic

Para crear un panel de control para un nuevo dispositivo, haga clic en el botón “+”.
Ejemplo de creación de un panel.Programación visual para Sonoff Basic

Una vez creado el panel, aparecerá en su lista de paneles.

En la pestaña "Configuración" del panel creado, busque los campos "ID del dispositivo" y "Clave de autorización", en el futuro, esta información será necesaria al configurar el dispositivo Sonoff.
Ejemplo de pestañaProgramación visual para Sonoff Basic

Paso 2. Actualiza el dispositivo

Usando la utilidad XTCOM_UTIL descargar el firmware PLC Sonoff Básico al dispositivo, para ello necesitará un conversor USB-TTL. Aquí instrucción и instrucciones de video.

Paso 3. Configuración del dispositivo

Aplique energía al dispositivo, después de que el LED se encienda, presione el botón y manténgalo presionado hasta que el LED comience a parpadear periódicamente de manera uniforme.
En este momento aparecerá una nueva red wifi llamada “PLC Sonoff Basic”, conecta tu ordenador a esta red.
Explicación de la indicación LED

indicación LED
Estado del dispositivo

doble parpadeo periódico
sin conexión al enrutador

brilla continuamente
conexión establecida con el enrutador

parpadeo uniforme periódico
modo punto de acceso wifi

extinguido
Sin fuente de alimentación

Abra un navegador de Internet e ingrese el texto "192.168.4.1" en la barra de direcciones, vaya a la página de configuración de red del dispositivo.

Complete los campos de la siguiente manera:

  • “Nombre de red” y “Contraseña” (para vincular el dispositivo al enrutador wifi de su hogar).
  • “ID del dispositivo” y “Clave de autorización” (para autorizar el dispositivo en el servicio MGT24).

Ejemplo de configuración de parámetros de red del dispositivoProgramación visual para Sonoff Basic

Guarde la configuración y reinicie el dispositivo.
es instrucciones de video.

Paso 4. Conexión de sensores (opcional)

El firmware actual admite hasta cuatro sensores de temperatura ds18b20. Aquí instrucciones de video para instalación de sensores. Aparentemente, este paso será el más difícil, ya que requerirá brazos rectos y un soldador.

Sección II. programación visual

Paso 1: crear guiones

Utilizado como entorno de programación. Blockly, el entorno es fácil de aprender, por lo que no es necesario ser programador para crear scripts simples.

Agregué bloques especializados para escribir y leer parámetros del dispositivo. Se accede a cualquier parámetro por nombre. Para los parámetros de dispositivos remotos, se utilizan nombres compuestos: “parámetro@dispositivo”.
Lista desplegable de opcionesProgramación visual para Sonoff Basic

Escenario de ejemplo para encendido y apagado cíclico de la carga (1 Hz):
Programación visual para Sonoff Basic

Un ejemplo de un script que sincroniza el funcionamiento de dos dispositivos separados. Es decir, el relé del dispositivo objetivo repite la operación del relé del dispositivo remoto.
Programación visual para Sonoff Basic

Escenario para termostato (sin histéresis):
Programación visual para Sonoff Basic

Para crear scripts más complejos, puede utilizar variables, bucles, funciones (con argumentos) y otras construcciones. No describiré todo esto en detalle aquí; ya hay bastante en la red. material educativo sobre Blockly.

Paso 2: Orden de los guiones

El script se ejecuta continuamente y, tan pronto como llega a su fin, comienza de nuevo. En este caso, existen dos bloques que pueden pausar temporalmente el script, “retrasar” y “pausar”.
El bloque "retraso" se utiliza para retrasos de milisegundos o microsegundos. Este bloque mantiene estrictamente el intervalo de tiempo, bloqueando el funcionamiento de todo el dispositivo.
El bloque de “pausa” se utiliza para retrasos de segundos (o menos) y no bloquea la ejecución de otros procesos en el dispositivo.
Si el guión en sí contiene un bucle infinito, cuyo cuerpo no contiene "pausa", el intérprete inicia de forma independiente una breve pausa.
Si la pila de memoria asignada se agota, el intérprete dejará de ejecutar un script que consume tanta energía (tenga cuidado con las funciones recursivas).

Paso 3: depurar scripts

Para depurar un script que ya se ha cargado en el dispositivo, puede ejecutar un seguimiento del programa paso a paso. Esto puede resultar extremadamente útil cuando el comportamiento del guión resultó ser diferente al previsto por el autor. En este caso, el rastreo permite al autor encontrar rápidamente el origen del problema y corregir el error en el script.

Escenario para calcular factorial en modo de depuración:
Programación visual para Sonoff Basic

La herramienta de depuración es muy simple y consta de tres botones principales: "iniciar", "un paso adelante" y "detener" (tampoco nos olvidemos del modo de depuración "entrar" y "salir"). Además del seguimiento paso a paso, puede establecer un punto de interrupción en cualquier bloque (haciendo clic en el bloque).
Para mostrar los valores actuales de los parámetros (sensores, relés) en el monitor, utilice el bloque "imprimir".
es vídeo general sobre el uso del depurador.

Sección para curiosos. ¿Qué hay debajo del capó?

Para que los scripts funcionen en el dispositivo de destino, se desarrolló un intérprete de código de bytes y un ensamblador con 38 instrucciones. El código fuente de Blockly tiene integrado un generador de código especializado que convierte bloques visuales en instrucciones de ensamblaje. Posteriormente, este programa ensamblador se convierte en código de bytes y se transfiere al dispositivo para su ejecución.
La arquitectura de esta máquina virtual es bastante simple y no tiene sentido describirla, en Internet encontrará muchos artículos sobre el diseño de las máquinas virtuales más simples.
Normalmente asigno 1000 bytes para la pila de mi máquina virtual, que es suficiente de sobra. Por supuesto, las recursiones profundas pueden agotar cualquier pila, pero es poco probable que tengan algún uso práctico.

El código de bytes resultante es bastante compacto. Como ejemplo, el código de bytes para calcular el mismo factorial es de solo 49 bytes. Esta es su forma visual:
Programación visual para Sonoff Basic

Y este es su programa ensamblador:

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ón ensamblada no tiene ningún valor práctico, entonces la pestaña "javascrit", por el contrario, da una apariencia más familiar que los bloques visuales:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Respecto al rendimiento. Cuando ejecuté el script de flasheo más simple, obtuve una onda cuadrada de 47 kHz en la pantalla del osciloscopio (a una velocidad de reloj del procesador de 80 MHz).
Programación visual para Sonoff BasicProgramación visual para Sonoff Basic
Creo que este es un buen resultado, al menos esta velocidad es casi diez veces más rápida que Lua и Espruiño.

Parte final

En resumen, diré que el uso de scripts nos permite no solo programar la lógica de funcionamiento de un dispositivo separado, sino que también permite conectar varios dispositivos en un solo mecanismo, donde algunos dispositivos influyen en el comportamiento de otros.
También observo que el método elegido para almacenar scripts (directamente en los dispositivos y no en el servidor) simplifica el cambio de dispositivos que ya funcionan a otro servidor, por ejemplo a una Raspberry doméstica, aquí instrucción.

Eso es todo, estaré encantado de escuchar consejos y críticas constructivas.

Fuente: habr.com

Añadir un comentario