Programación visual para Sonoff Basic

imagen

Un artículo sobre cómo crear un controlador lógico programable desde un dispositivo chino barato. Tal dispositivo encontrará su aplicación tanto en domótica como como una lección práctica en informática de la escuela.

Como referencia, de forma predeterminada, el programa Sonoff Basic funciona con la aplicación móvil a través del 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 a MGT24


Paso 1. Crear un panel de control


Regístrese en el sitio web mgt24 (si aún no se ha registrado) e inicie sesión con su cuenta.

Iniciar sesión
imagen

Para crear un panel de control para un nuevo dispositivo, haga clic en el botón "+".

Ejemplo de creación de panel
imagen

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

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

Ejemplo de pestaña
imagen

Paso 2. Destellando el dispositivo


Usando la utilidad XTCOM_UTIL, descargue el firmware Sonoff Basic PLC al dispositivo, para esto necesita un convertidor USB-TTL. Aquí están las instrucciones y las instrucciones en video .

Paso 3. Configurar el dispositivo


Aplique energía al dispositivo, después de que se encienda el LED, presione el botón y manténgalo presionado hasta que el LED comience a parpadear periódicamente de manera uniforme.

En este punto, aparecerá una nueva red wi-fi llamada "PLC Sonoff Basic", conecte su computadora a esta red.

Indicación LED de decodificación
Indicación LEDEstado del dispositivo
doble parpadeo periódicosin conexión con el enrutador
brilla continuamenteconexión establecida con el enrutador
parpadeo uniforme periódicomodo de punto de acceso wifi
apagarsin poder


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 wi-fi de su hogar).
  • "ID de dispositivo" y "Clave de autorización" (para autorizar el dispositivo en el servicio MGT24).

Ejemplo de configuración de parámetros de red del dispositivo
imagen

Guarde la configuración y reinicie el dispositivo.

Aquí hay un video tutorial .

Paso 4. Conexión de sensores (opcional)


El firmware actual admite hasta cuatro sensores de temperatura ds18b20. Aquí hay un video tutorial sobre el montaje de sensores. Aparentemente, este paso será el más difícil, ya que requerirá manos directas y un soldador.

Sección II Programación visual


Paso 1. Scripting


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

Agregué bloques especializados para escribir y leer los parámetros del dispositivo. El acceso a cualquier parámetro se realiza por nombre. Los nombres compuestos se utilizan para los parámetros del dispositivo remoto: "parámetro @ dispositivo".

Lista desplegable de opciones
imagen

Un ejemplo de un escenario de encendido y apagado cíclico de la carga (1Hz):

imagen

Un escenario de ejemplo que sincroniza la operación de dos dispositivos separados. A saber, el relé del dispositivo de destino repite la operación del relé del dispositivo remoto.

imagen

Escenario para termostato (sin histéresis):

imagen

Para crear scripts más complejos, puede usar variables, bucles, funciones (con argumentos) y otras construcciones. No describiré todo esto en detalle aquí, la red ya tiene bastante material de capacitación sobre Blockly .

Paso 2. Orden de secuencias de comandos


La secuencia de comandos se ejecuta continuamente y, tan pronto como llega a su fin, comienza de nuevo. Hay dos bloques que pueden suspender temporalmente el script, "delay" y "pause".

El bloque de demora se usa para demoras de milisegundos o microsegundos. Esta unidad mantiene estrictamente el intervalo de tiempo, bloqueando la operación de todo el dispositivo.

El bloqueo de pausa se usa para segundos (quizás menos) retrasos, y no bloquea la ejecución de otros procesos en el dispositivo.

Si el script dentro de sí mismo contiene un bucle infinito, en el cuerpo del cual no hay "pausa", el intérprete inicia independientemente una pequeña pausa.

Si la pila de memoria asignada se agota, el intérprete detendrá la ejecución de un guión tan voraz (tenga cuidado con las funciones recursivas).

Paso 3. Depuración de scripts


Para depurar una secuencia de comandos ya cargada en el dispositivo, puede ejecutar el seguimiento del programa en pasos. Esto puede ser extremadamente útil cuando el comportamiento del script no es el que pretendía el autor. En este caso, el rastreo le permite al autor encontrar rápidamente la fuente del problema y corregir el error en el script.

El script para calcular factorial en modo de depuración:

imagen

La herramienta de depuración es muy simple y consta de tres botones principales: "inicio", "un paso adelante" y "detener" (tampoco nos olvidaremos de "entrar" y "salir" del modo de depuración). Además del rastreo paso a paso, puede establecer un punto de interrupción en cualquier bloque (haciendo clic en el bloque).
Para visualizar los valores actuales de los parámetros (sensores, relés) en el monitor, use el bloque de impresión.
Aquí hay un video general sobre el uso del depurador.

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


Para que los scripts funcionen en el dispositivo de destino, se desarrollaron un intérprete de código de bytes y un ensamblador para 38 instrucciones. Se incorporó un generador de código especializado en el código fuente bloqueado que convierte los bloques visuales en instrucciones de ensamblador. En el futuro, este programa ensamblador se convierte en bytecode 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 la red encontrará muchos artículos sobre el diseño de máquinas virtuales simples.

Para la pila de mi máquina virtual, generalmente asigno 1000 bytes, esto es suficiente con un margen. Por supuesto, las recursiones profundas pueden agotar cualquier pila, pero es poco probable que encuentren una aplicación práctica.

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

imagen

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 forma de representación del ensamblador no tiene ningún valor práctico, la pestaña javascrit, por el contrario, le da un aspecto 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 a rendimiento. Cuando comencé el escenario de flasheo más simple, en la pantalla del osciloscopio obtuve un meandro de 47kHz (a una velocidad de reloj del procesador de 80MHz).

imagen

imagen

Creo que este es un buen resultado, al menos esta velocidad es casi diez veces más rápida que la de Lua y Espruino .

La parte final


En resumen, diré que el uso de scripts nos permite no solo programar la lógica de un dispositivo individual, sino que también permite vincular varios dispositivos en un solo mecanismo, donde algunos dispositivos influyen en el comportamiento de otros.

También noto que el método elegido para almacenar scripts (directamente en los dispositivos mismos, y no en el servidor), simplifica el cambio de dispositivos existentes a otro servidor, por ejemplo, a la Raspberry casera, aquí están las instrucciones .

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

Source: https://habr.com/ru/post/es436272/


All Articles