
Hola a todos! Trabajo para una compañía que desarrolla equipos para monitorear plataformas petroleras, granjas mineras, grupos electrógenos diesel y otras cosas aburridas. Pero esta vez automatizamos algo más. Entonces, conozca: "Cook 3000" - el aparato para emitir cookies a los mejores empleados.
El dispositivo es una construcción hecha de PVC y algunas partes:
Una espiral con una unidad (sirve para suministrar productos), una pantalla, un aceptador de monedas y el cerebro de toda la estructura: controlador Wiren Board 6.



Pantalla
Como pantalla para
WB6, uso el módulo de pantalla Nextion (NEXTION MEJORADA NX4832K035).

El módulo está equipado con un procesador AVR. Tiene una pantalla TFT de 3.5 '' con una resolución de 480 * 320, 32Mb de memoria interna, 1024 bytes de EEPROM, 8192 bytes de RAM.
Este dispositivo almacena y muestra gráficos, anima elementos de la interfaz y procesa clics. Solo los códigos de eventos se transmiten al controlador a través de UART, lo que facilita la configuración de interfaces de complejidad variable.
Para cargar las configuraciones y gráficos necesarios en el módulo de pantalla, se proporciona un editor visual de las interfaces del Editor Nextion. Puede descargarlo en el sitio web oficial de itead.

Al crear un nuevo proyecto, debe especificar el modelo, la posición de la pantalla y la codificación de caracteres. Para la visualización correcta del alfabeto cirílico, seleccione iso-8859-5.

A la izquierda hay una barra de herramientas. Aquí puede encontrar los elementos más necesarios para crear una interfaz.

Hagamos clic en el botón. Aparecerá un botón condicional en el cuadro de edición. Estíralo, edita el texto y el título. Para mostrar texto, debe agregar una fuente. Utilizaremos la herramienta Font Creator en la pestaña de herramientas. En el campo "Evento", debe escribir el código que se reproducirá en los eventos.
Por ejemplo, si escribe imprimir "botón presionado \ r" en la pestaña "Evento de prensa táctil", luego, cuando hace clic en el botón, el dispositivo enviará a UART: botón presionado y el carácter de salto de línea.

Se pueden encontrar descripciones y ejemplos de códigos en la documentación de la pantalla. Para la depuración, puede usar la función Depuración. Esta ventana le permite probar todas las funciones del firmware antes de completar la pantalla.

Si todo está en orden, puede conectar la pantalla a la computadora a través del adaptador USB / UART y completar el firmware haciendo clic en el botón "Cargar".

Pero, ¿cómo nos hacemos amigos con WB6?
Puede conectar la pantalla a través del mismo adaptador USB \ UART a uno de los puertos USB del controlador o directamente a una de las ranuras de expansión en la placa del controlador.
Estamos interesados en los pines TX, RX, 5V y GND.

Después de conectar la pantalla al controlador, recibiremos los datos del evento directamente en el puerto serie.
Para responder de alguna manera a estos eventos, escribamos un pequeño script que enviará todos los datos sobre los eventos al tema MQTT. Primero, cree un archivo en la carpeta raíz del controlador y llámelo serial.sh
Si hizo todo correctamente, luego de ejecutar el script cuando hace clic en el botón, en la interfaz web del controlador verá un tema con los datos que envía el módulo de pantalla.
En los controladores de la Junta Wiren, se proporciona un sistema
de reglas :
wb-rules . Las reglas se crean a través de una interfaz web y se escriben en un lenguaje simple similar a Javascript.
En la interfaz web de WB6, vaya a la pestaña Scripts y cree un nuevo script haciendo clic en el botón "Nuevo ...", asígnele el nombre "screen_button.js" u otra cosa. A continuación, escribiremos una regla: al cambiar la pantalla / tema sin procesar (es a él a quien le enviamos datos desde la pantalla), se producirán ciertas acciones. En este caso, cuando haga clic en la pantalla, veremos el mensaje "Botón presionado" en la ventana de depuración de la interfaz web:
screen_button.js defineVirtualDevice("screen", {
Genial Para procesar los clics en la pantalla, descubrimos. Ahora hablemos sobre cómo controlamos la pantalla con WB6. Por ejemplo, cambie el texto del botón. La pantalla acepta comandos UART. Se puede encontrar una lista y una descripción de los comandos en la documentación de la pantalla.
Para determinar el final del comando, la pantalla espera tres caracteres especiales (\ xff \ xff \ xff). Para simplificar la tarea en el futuro: cree un script en la carpeta raíz bash. Llamémoslo text.sh:
Ahora, para cambiar el texto del botón, solo necesitamos llamar al script con los argumentos:
bash /mnt/data/root/text.sh -a b0 -b 'Some Text'
Donde b0 es el nombre del botón en la pantalla y Some Text es el texto deseado.
Un ejemplo del uso del motor de reglas WB6:
var txt1 = "some text"; runShellCommand("bash /mnt/data/root/text.sh -a b0 -b '" + txt1+ "'");
Del mismo modo, puede cambiar la página que se muestra actualmente en la pantalla, el texto de varios elementos, variables y otros parámetros. No pintaré aquí toda la funcionalidad del módulo de pantalla. La información ya escrita arriba es bastante suficiente para nuestro proyecto.
Aceptador de monedas
Como aceptador de monedas, utilizo la versión china, que se encuentra en las extensiones de Aliexpress por 400 rublos.
Con la conexión, todo es simple. + 12v y una salida de pulso para conectarse al módulo de extensión de contacto seco
WBE2-DI-DR-3 . Además, para determinar la moneda, solo necesitamos contar los impulsos. Para hacer esto, cree un nuevo script en el motor de reglas:
money.js var timeout_ms = 1 * 200; var timer_id = null; var timerTime = Date.now(); var timerLast = 0; var countMoney = 0; defineRule("money", { whenChanged: "wb-gpio/MOD1_IN2", then: function(newValue, devName, cellName) { if (newValue) { timerLast = Date.now() if ((timerLast - timerTime) >= 500) {
Regla bastante simple. Quizás no sea el más preciso.
Bitrix24
Ahora, probablemente el más interesante. Tratemos de descubrir cómo traducir la frase "Bien hecho. Toma una galleta de un estante. Nuestra empresa utiliza el sistema Bitrix24 como CRM. La idea es que por cada tarea completada (Tarea) en el bitrix, el empleado reciba algunos puntos electrónicos. Estos mismos puntos se pueden usar como moneda para nuestro dispositivo. Veamos cómo conectarse a Bitrix24 y monitorear el éxito de los empleados.

Utilizaremos bitrix24-python-sdk como base.
Instale el SDK en el controlador con el comando
pip install bitrix24-python-sdk
A continuación, cree un script de Python en la carpeta raíz, llámelo bitrix.py:
Este script solicita todas las tareas completadas de una lista dada de usuarios, las considera y envía el número a los temas en mqtt. A continuación, solo podemos comparar la cantidad obtenida con los valores anteriores y, si los datos nuevos son más, agregar puntos al empleado por el trabajo realizado.
Bluetooth
Para escanear dispositivos BLE utilizo Bluez. El programa ya está instalado en el controlador. Para escanear dispositivos flexibles, solo ingrese algunos comandos en la consola:
hciconfig hci0 up hcitool lescan
Sin embargo, esto no es suficiente para nosotros. Es recomendable ver el nivel de señal. Para hacer esto, instale la utilidad hcidump adicional:
apt-get install bluez-hcidump
Y complementa nuestro equipo:
hciconfig hci0 up hcitool lescan --duplicates | hcidump -a | grep -E 'bdaddr|RSSI'
En la salida obtenemos direcciones MAC y dispositivos RSSI bluetooth (ble) cercanos.

Estas dos líneas pueden estar bellamente envueltas en un script bash y la salida enviada a MQTT.
La segunda
forma es el script
aioblescanRequiere Python 3 para funcionar, preferiblemente 3.5. La ventaja de este script es que puede monitorear direcciones MAC específicas, y no todos los relojes inteligentes y teléfonos inteligentes pasan por la ventana. La salida del script también se redirige a MQTT, para la conveniencia de trabajar con el motor de reglas.

Ahora sabemos cómo interactuar con WB6 usando el módulo de pantalla, podemos contar monedas, monitorear el éxito de los empleados en Bitrix, escanear dispositivos flexibles y su nivel de señal. Queda por recopilar esto en un montón y prescribir algún tipo de lógica. No pintaré todos los guiones para este proyecto. Todo estará disponible en el enlace en el dominio público. Quizás uno de ustedes encuentre una aplicación más útil e inteligente para esto.
Vivienda
El cuerpo está hecho de PVC espumado de 10 mm. Tal plástico se vende en láminas. Moderadamente suave Puede cortar con una sierra para metales o con un cuchillo de oficina regular en una regla.

Como cierre, se utilizó un juego de piezas metálicas para niños "Constructor" y tornillos cortos autorroscantes. En este kit, se necesitaba casi todo para armar la caja.

Conducir
La espiral y el disco se compraron en la aplicación B \ U de la tienda en línea. piezas para máquinas expendedoras. Alimentado por una fuente de alimentación de 24v. Se conecta a través del relé del módulo de expansión
WBE2-DO-R6C-1 .

Funcional
Funcionalmente similar a una máquina expendedora normal. Regala cookies por dinero y no solo.

Cuando se inicia el dispositivo, la pantalla muestra una pantalla de bienvenida con un logotipo, luego se voltea a la pantalla principal, donde se nos ofrece comprar cookies o jugar un juego.
El juego para el usuario es gratuito, pero puede establecer un pequeño precio para la motivación. Las reglas son simples. El jugador se ofrece para resolver tres problemas simples. Si da tres respuestas correctas, recibe un premio en forma de cookies. Quizás esto es todo lo que necesita saber sobre este artículo. Volvamos al menú principal y haga clic en "Comprar cookies".
A continuación, el sistema le pedirá que seleccione un método de pago. Al elegir el método de pago "Por dinero", aparece una ventana en la pantalla con el precio y la cantidad pagada, que aumenta cuando deposita dinero en el aceptador de monedas.
Tan pronto como la cantidad sea suficiente para realizar una compra, el dispositivo cerrará automáticamente esta ventana y entregará los productos.
Pero, como dije antes, también se proporciona otra moneda: estos son puntos recibidos por el éxito de los empleados en el sistema Bitrix24. Si un empleado cierra una tarea asignada a él, se le otorgan puntos. Además, se pueden otorgar puntos al jefe para obtener resultados particularmente buenos.




Para pagar los puntos, el empleado debe seleccionar el elemento "Comprar por puntos". Luego, el dispositivo intentará determinar quién está parado frente a él. Para hacer esto, escanea los dispositivos Bluetooth a su alrededor y si ve la dirección MAC del dispositivo que pertenece al empleado e ingresa a la base de datos, así como el nivel de señal es lo suficientemente potente como para asumir que está parado cerca, los datos sobre el estado de la cuenta del empleado aparecerán en la pantalla, su nombre y oferta para pagar cookies con puntos.
Si el sistema no pudo determinar un solo dispositivo familiar, emitirá una advertencia y le ofrecerá seleccionar su nombre de la lista y luego ingresar su código PIN.
En el caso de una entrada correcta, se abre la misma ventana con datos sobre el estado de la cuenta de usuario y el costo del producto. Cuando se confirma una compra, la cantidad requerida de puntos se debita de la cuenta del usuario y el dispositivo emite las mercancías.
Eso es todo Este proyecto fue creado exclusivamente con fines educativos y para mostrar que las aplicaciones del controlador Wiren Board están limitadas solo por la imaginación. Todos los archivos y scripts se pueden encontrar en el
enlace .