Programación visual para Sonoff Basic

Programación visual para Sonoff Basic
Artículo sobre cómo convertir un dispositivo chino barato en un controlador lógico programable. Este dispositivo será útil tanto para la automatización del hogar como para actividades prácticas en clases de informática escolar.
Para su información, por defecto, 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 la interacción posterior con este dispositivo será posible a través del navegador.

Sección I. Conectar Sonoff al servicio MGT24

Paso 1. Crear un panel de control

Regístrate en el sitio web mgt24 (si aún no estás registrado) e inicia sesión con tu cuenta.
Iniciar sesiónProgramación visual para Sonoff Basic

Para crear un panel de control para el nuevo dispositivo, presiona el botón «+».
Ejemplo de creación de un panelProgramación visual para Sonoff Basic

Una vez que el panel esté creado, aparecerá en la lista de tus paneles.

En la pestaña «Instalación» del panel creado, busca los campos «ID del dispositivo» y «Clave de autorización», esta información será necesaria más adelante al configurar el dispositivo Sonoff.
Ejemplo de pestañaProgramación visual para Sonoff Basic

Paso 2. Flashear el dispositivo

Con la utilidad XTCOM_UTIL carga el firmware PLC Sonoff Basic en el dispositivo; necesitarás un convertidor USB-TTL. Aquí las instrucciones y hay un video instructivo.

Paso 3. Configuración del dispositivo

Conecta la alimentación al dispositivo, y una vez que el LED se encienda, presiona el botón y mantenlo presionado hasta que el LED comience a parpadear uniformemente.
En este momento, aparecerá una nueva red Wi-Fi llamada «PLC Sonoff Basic», conecta tu computadora a esta red.
Interpretación de la indicación del LED

Indicación LED
Estado del dispositivo

parpadeo doble periódico
sin conexión al router

iluminación continua
conexión establecida con el router

parpadeo uniforme periódico
modo punto de acceso Wi-Fi

apagado
sin alimentación

Abre el navegador de internet e ingresa en la barra de direcciones el texto «192.168.4.1», accede a la página de configuración de parámetros de red del dispositivo.

Completa los campos de la siguiente manera:

  • «Nombre de la red» y «Contraseña» (para vincular el dispositivo al router Wi-Fi doméstico).
  • «ID del dispositivo» y «Clave de autorización» (para autenticar el dispositivo en el servicio MGT24).

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

Guarda la configuración y reinicia el dispositivo.
Aquí hay un video instructivo.

Paso 4. Conexión de sensores (opcional)

El firmware actual admite hasta cuatro sensores de temperatura ds18b20. Aquí hay un video instructivo se describe la instalación de los sensores. Aparentemente, este paso será el más complicado, ya que requerirá de tus manos hábiles y un soldador.

Sección II. Programación visual

Paso 1. Creación de scripts

Se utiliza 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.

He añadido bloques especializados para grabar y leer parámetros del dispositivo. El acceso a cualquier parámetro se realiza por nombre. Para los parámetros de dispositivos remotos se utilizan nombres compuestos: «parámetro@dispositivo».
Lista desplegable de parámetrosProgramación visual para Sonoff Basic

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

Ejemplo de script que sincroniza el funcionamiento de dos dispositivos independientes. En particular, el relé del dispositivo objetivo replica el funcionamiento del relé de un dispositivo remoto.
Programación visual para Sonoff Basic

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

Para crear scripts más complejos, se pueden utilizar variables, bucles, funciones (con argumentos) y otras construcciones. No entraré en detalles aquí, ya que ya hay bastante material educativo sobre Blockly.

Paso 2. Orden de ejecución de scripts

El script funciona en modo continuo, y tan pronto como llega a su fin, se reinicia. Hay dos bloques que pueden detener temporalmente la ejecución del script: «delay» y «pause».
El bloque «delay» se usa para retardos de milisegundos o microsegundos. Este bloque respeta estrictamente el intervalo de tiempo, bloqueando el funcionamiento del dispositivo completo.
El bloque «pause» se utiliza para retardos en segundos (puede ser menos), y no bloquea la ejecución de otros procesos en el dispositivo.
Si el script contiene un bucle infinito, cuyo cuerpo no incluye «pause», el intérprete iniciará automáticamente una pequeña pausa.
En caso de agotamiento de la pila de memoria asignada, el intérprete detendrá la ejecución de ese script voraz (ten cuidado con las funciones recursivas).

Paso 3. Depuración de scripts

Para depurar un script ya cargado en el dispositivo, se puede iniciar un seguimiento de programa paso a paso. Esto es extremadamente útil cuando el comportamiento del script no es el que el autor había previsto. En este caso, el seguimiento permite al autor encontrar rápidamente la fuente del problema y corregir el error en el script.

Script para calcular el 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», «paso adelante» y «detener» (sin olvidar «entrada» y «salida» del modo de depuración). Además del seguimiento paso a paso, se puede establecer un punto de interrupción en cualquier bloque (haciendo clic con el ratón sobre el bloque).
Para mostrar en el monitor los valores actuales de los parámetros (sensores, relés), utiliza el bloque «print».
Aquí vídeo resumen sobre el uso del depurador.

Sección para los curiosos. ¿Y qué hay debajo del capó?

Para que los scripts funcionen en el dispositivo objetivo, se ha desarrollado un intérprete de bytecode y un ensamblador de 38 instrucciones. En el código fuente de Blockly se integró un generador de código especializado que convierte bloques visuales en instrucciones de ensamblador. Posteriormente, este programa de ensamblador se transforma en bytecode y se envía al dispositivo para su ejecución.
La arquitectura de esta máquina virtual es bastante simple y no tiene mucho sentido describirla; en la red encontrarás muchos artículos sobre el diseño de máquinas virtuales sencillas.
Normalmente, asigno 1000 bytes para la pila de mi máquina virtual, lo cual es más que suficiente. Desde luego, recursiones profundas pueden agotar cualquier pila, pero es poco probable que encuentren una aplicación práctica.

El bytecode final es bastante compacto. Como ejemplo, el bytecode para calcular el mismo factorial ocupa solo 49 bytes. Esta es su representación visual:
Programación visual para Sonoff Basic

Y este es su programa de 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 representación en forma de ensamblador no tiene mucho valor práctico, la pestaña «javascript», por el contrario, ofrece una vista más familiar que los bloques visuales:

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

window.alert(factorial(10));

En cuanto al rendimiento. Al ejecutar un sencillo script de parpadeo, en la pantalla del osciloscopio obtuve una onda de 47 kHz (con una frecuencia de reloj del procesador de 80 MHz).
Programación visual para Sonoff BasicProgramación visual para Sonoff Basic
Considero que es un buen resultado, al menos esta velocidad es casi diez veces más rápida que la de Lua y Espruino.

Parte final

En resumen, diré que el uso de scripts nos permite no solo programar la lógica de funcionamiento de un dispositivo individual, sino también vincular varios dispositivos en un solo mecanismo, donde unos dispositivos influyen en el comportamiento de otros.
También señalaré que el método elegido para almacenar los scripts (directamente en los dispositivos en sí, y no en el servidor) facilita el cambio de los dispositivos ya en funcionamiento a otro servidor, por ejemplo a un Raspberry Pi doméstico, aquí las instrucciones.

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

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster