O dispositivo para a emissão de cookies "Cook 3000"



Olá pessoal! Trabalho para uma empresa que desenvolve equipamentos para monitorar plataformas de petróleo, fazendas de mineração, grupos geradores a diesel e outras coisas chatas. Mas desta vez automatizamos outra coisa. Então, conheça: "Cook 3000" - o aparelho para emitir cookies para os melhores funcionários.

O dispositivo é uma construção feita de PVC e algumas partes:
Uma espiral com uma unidade (serve para fornecer mercadorias), uma tela, um aceitador de moedas e o cérebro de toda a estrutura - o controlador Wiren Board 6.




Clique para ampliar a imagem. Clique para ampliar a imagem.
Clique para ampliar a imagem. Clique para ampliar a imagem.

Ecrã


Como tela do WB6, eu uso o módulo de tela Nextion (NEXTION ENHANCED NX4832K035).

O módulo está equipado com um processador AVR. Possui uma tela TFT de 3,5 '' com uma resolução de 480 * 320, 32Mb de memória interna, 1024 bytes EEPROM, 8192 bytes de RAM.

Este dispositivo armazena e exibe gráficos, anima elementos da interface e processa cliques. Somente códigos de eventos são transmitidos ao controlador via UART, o que facilita a configuração de interfaces de complexidade variável.

Para carregar as configurações e gráficos necessários no módulo de tela, é fornecido um editor visual das interfaces do Nextion Editor. Você pode baixá-lo no site oficial da itead.

Clique para ampliar a imagem.

Ao criar um novo projeto, você deve especificar o modelo, a posição da tela e a codificação de caracteres. Para a exibição correta do alfabeto cirílico, selecione iso-8859-5.

Clique para ampliar a imagem. Clique para ampliar a imagem.

À esquerda é uma barra de ferramentas. Aqui você encontra os elementos mais necessários para criar uma interface.

Clique para ampliar a imagem.

Vamos clicar no botão. Um botão condicional aparecerá na caixa de edição. Estique-o, edite o texto e o título. Para exibir texto, você deve adicionar uma fonte. Usaremos a ferramenta Criador de fontes na guia Ferramentas. No campo "Evento", você deve escrever o código que será reproduzido nos eventos.

Por exemplo, se você escrever “pressione o botão pressionado \ r” na guia “Evento pressionado ao pressionar”, quando você clicar no botão, o dispositivo enviará ao UART: botão pressionado e o caractere de quebra de linha.

Clique para ampliar a imagem.

Descrição e exemplos de códigos podem ser encontrados na documentação da tela. Para depuração, você pode usar a função Debug. Essa janela permite testar todas as funções do firmware antes de preencher a própria tela.

Clique para ampliar a imagem.

Se tudo estiver em ordem, você poderá conectar a tela ao computador através do adaptador USB / UART e preencher o firmware clicando no botão “Upload”.

Clique para ampliar a imagem.
Mas como agora fazemos amizade com o WB6?
Você pode conectar a tela através do mesmo adaptador USB \ UART a uma das portas USB do controlador ou diretamente a um dos slots de expansão na placa do controlador.
Estamos interessados ​​nos pinos TX, RX, 5V e GND.

Clique para ampliar a imagem.

Após conectar a tela ao controlador, receberemos dados do evento diretamente na porta serial.

Para responder de alguma forma a esses eventos, vamos escrever um pequeno script que enviará todos os dados sobre os eventos ao tópico MQTT. Primeiro, crie um arquivo na pasta raiz do controlador e chame-o de serial.sh

serial.sh
#!/bin/bash #  /dev/ttyMOD3 stty -F /dev/ttyMOD3 ospeed 9600 ispeed 9600 raw clocal -parenb -echo cs8 CR="$(echo -e '\r')" exec 4<> /dev/ttyMOD3 cat <&4 | while : do IFS="$CR" read -r line case "$line" in quit*) break ;; *) if [[ -n "$line" ]]; then echo $line #    MQTT mosquitto_pub -t /devices/screen/controls/raw/meta/type -r -m text mosquitto_pub -t /devices/screen/controls/raw/on -r -m "$line" fi ;; esac done 


Se você fez tudo corretamente, depois de executar o script ao clicar no botão, na interface da web do controlador, você verá um tópico com os dados que o módulo de tela envia.

Nos controladores da Wiren Board, é fornecido um sistema de regras - wb-rules . As regras são criadas por meio de uma interface da Web e escritas em uma linguagem simples semelhante a Javascript.

Na interface da web do WB6, vá para a guia Scripts e crie um novo script clicando no botão "Novo ...", nomeie-o como "screen_button.js" ou qualquer outra coisa. Em seguida, escreveremos uma regra: Ao alterar a tela / tópico bruto (é para ele que enviamos dados da tela), certas ações ocorrerão. Nesse caso, quando você clicar na tela, veremos a mensagem "Botão pressionado" na janela de depuração da interface da web:

screen_button.js
 defineVirtualDevice("screen", { //    title: "nextion screen", cells: { raw: { type: "text", value: "" }, } }); defineRule("screen_button", { whenChanged: "screen/raw", then: function(newValue, devName, cellName) { log(newValue); if (newValue == "button pressed") { //     «button pressed» log(" "); //     . } else if (newValue == "button released") { log("  "); } dev["screen"]["raw"] = ""; // . } }); 


Ótimo. Para processar cliques na tela, descobrimos. Agora vamos falar sobre como controlamos a tela com o WB6. Por exemplo, altere o texto do botão. A tela aceita comandos UART. Uma lista e descrição dos comandos podem ser encontradas na documentação da tela.

Para determinar o final do comando, a tela aguarda três caracteres especiais (\ xff \ xff \ xff). Para simplificar a tarefa no futuro: crie um script na pasta raiz do bash. Vamos chamá-lo de text.sh:

text.sh
 #!/bin/bash TEXT=""; UNIT=""; while [ -n "$1" ] do case "$1" in -a) UNIT=$2;; -b) TEXT=$2;; esac shift done echo -en "$UNIT.txt=\"$TEXT\"\xff\xff\xff" > /dev/ttyMOD3 exit 0 



Agora, para alterar o texto do botão, basta chamar o script com os argumentos:
bash /mnt/data/root/text.sh -a b0 -b 'Some Text'
Onde b0 é o nome do botão na tela e Algum texto é o texto desejado.

Um exemplo de uso do mecanismo de regras WB6:

 var txt1 = "some text"; runShellCommand("bash /mnt/data/root/text.sh -a b0 -b '" + txt1+ "'"); 


Da mesma forma, você pode alterar a página atualmente exibida na tela, o texto em vários elementos, variáveis ​​e outros parâmetros. Não vou pintar aqui todas as funcionalidades do módulo de tela. As informações já escritas acima são suficientes para o nosso projeto.

Aceitador de moedas


Como aceitador de moedas, uso a versão chinesa, encontrada nas extensões do Aliexpress por 400 rublos.

Com a conexão, tudo é simples. + 12v e uma saída de pulso a ser conectada ao módulo de extensão de contato seco WBE2-DI-DR-3 . Além disso, para determinar a moeda, precisamos apenas contar os impulsos. Para fazer isso, crie um novo script no mecanismo de regras:

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) { // ? timerTime = Date.now(); countMoney = 1; } else { timerTime = Date.now(); //     countMoney++; } if (timer_id) { clearTimeout(timer_id); } timer_id = setTimeout(function() { //       if (countMoney == 5) { log("10 ") } else if (countMoney == 4) { log("5 ") } else if (countMoney == 3) { log("2 ") } else if (countMoney == 2) { log("1 ") } timer_id = null; }, timeout_ms); } } }); 


Regra bastante simples. Talvez não seja o mais preciso.

Bitrix24


Agora, provavelmente o mais interessante. Vamos tentar descobrir como traduzir a frase "Muito bem. Pegue um biscoito de uma prateleira. Nossa empresa usa o sistema Bitrix24 como um CRM. A idéia é que, para cada tarefa concluída (Tarefa) no bitrix, o funcionário receba alguns pontos eletrônicos. Esses mesmos pontos podem ser usados ​​como moeda para o nosso dispositivo. Vamos descobrir como se conectar ao Bitrix24 e monitorar o sucesso dos funcionários.

Clique para ampliar a imagem.

Usaremos o bitrix24-python-sdk como base.
Instale o SDK no controlador com o comando
pip install bitrix24-python-sdk

Em seguida, crie um script python na pasta raiz, chame-o de bitrix.py:

bitrix.py
 #!/usr/bin/python3 import pprint from bitrix24 import bitrix24 import sys import subprocess b24_webhook_key = 'some_key' #   ,    . b24_webhook_user = 1 # ID  -    . b24_domain = 'some_domain' #  . page = 1 user_id = [16, 10, 6, 55, 8, 14, 67, 20] #  ,     ord_status = 5 # 5 -   order_list = 0 total_orders = 0 bx24 = bitrix24.Bitrix24(b24_domain, webhook_key=b24_webhook_key, webhook_user=b24_webhook_user) def get_order_list_len(_user_id): result_ = bx24.call( 'task.item.list', {'ORDER': {'DEADLINE': 'desc'}}, {'FILTER': {'RESPONSIBLE_ID': _user_id,'REAL_STATUS': ord_status}}, {'PARAMS': {'NAV_PARAMS': {'nPageSize': 50, 'iNumPage': page}}} ) if result_: return (len(result_['result'])) for user in user_id: while True: order_list = get_order_list_len(user) total_orders = total_orders + order_list page = page + 1 if(order_list < 50): subprocess.call("mosquitto_pub -t /devices/%s/controls/orders_finished/on -r -m %s" % (user, total_orders), shell=True) #    MQTT. page = 1 total_orders = 0 break 


Esse script solicita todas as tarefas concluídas de uma determinada lista de usuários, as considera e envia o número aos tópicos no mqtt. Em seguida, podemos apenas comparar a quantia obtida com os valores anteriores e, se os novos dados forem maiores, adicionar pontos ao funcionário pelo trabalho realizado.

Bluetooth


Para digitalizar dispositivos BLE, uso o Bluez. O programa já está instalado no controlador. Para verificar dispositivos ble, basta digitar alguns comandos no console:

 hciconfig hci0 up hcitool lescan --duplicates 

No entanto, isso não é suficiente para nós. É aconselhável ver o nível do sinal. Para fazer isso, instale o utilitário hcidump adicional:

 apt-get install bluez-hcidump 

E complemente nossa equipe:

 hciconfig hci0 up hcitool lescan --duplicates | hcidump -a | grep -E 'bdaddr|RSSI' 

Na saída, temos endereços MAC e dispositivos RSSI bluetooth (ble) nas proximidades.

Clique para ampliar a imagem.

Essas duas linhas podem ser lindamente agrupadas em um script bash e a saída enviada para o MQTT.
A segunda maneira é o script aioblescan
Requer que o Python 3 funcione, de preferência 3.5. A vantagem desse script é que você pode monitorar endereços MAC específicos, e nem todos os relógios inteligentes e smartphones que passam pela janela. A saída do script também é redirecionada para o MQTT, para facilitar o trabalho com o mecanismo de regras.

Clique para ampliar a imagem.

Agora sabemos como interagir com o WB6 usando o módulo de tela, podemos contar moedas, monitorar o sucesso dos funcionários no Bitrix, digitalizar dispositivos e seu nível de sinal. Resta coletar isso de uma só vez e prescrever algum tipo de lógica. Não vou pintar todos os scripts para este projeto. Tudo estará disponível no link em domínio público. Talvez um de vocês encontre uma aplicação mais útil e inteligente para isso.

Habitação


O corpo é feito de PVC espumado de 10 mm. Esse plástico é vendido em folhas. Moderadamente suave. Você pode cortar com uma serra ou com uma faca de escritório regular em uma régua.

Clique para ampliar a imagem.

Como prendedor, foram utilizados um conjunto infantil de peças metálicas “Constructor” e parafusos autoatarraxantes curtos. Neste kit, quase tudo era necessário para montar o estojo.

Clique para ampliar a imagem.

Drive


A espiral e a unidade foram compradas no aplicativo B \ U da loja online. peças para máquinas de venda automática. Alimentado por uma fonte de alimentação de 24V. É conectado através do relé do módulo de expansão WBE2-DO-R6C-1 .

Clique para ampliar a imagem. Clique para ampliar a imagem. Clique para ampliar a imagem.

Funcional


Funcionalmente semelhante a uma máquina de venda automática. Dá cookies por dinheiro e não apenas.


Quando o dispositivo é inicializado, a tela mostra uma tela de apresentação com um logotipo e, em seguida, ele muda para a tela principal, onde somos oferecidos para comprar cookies ou jogar um jogo.

O jogo para o usuário é gratuito, mas você pode definir um preço pequeno para a motivação. As regras são simples. O jogador é oferecido para resolver três problemas simples. Se ele der três respostas corretas, ele receberá um prêmio na forma de cookies. Talvez seja tudo o que você precisa saber sobre esse item. Vamos voltar ao menu principal e clicar em "Comprar cookies".

Em seguida, o sistema solicitará que você selecione uma forma de pagamento. Ao escolher o método de pagamento "Por dinheiro", uma janela aparece na tela com o preço e o valor pago, que aumentam quando você deposita dinheiro no aceitador de moedas.

Assim que o valor for suficiente para fazer uma compra, o dispositivo fechará automaticamente esta janela e distribuirá as mercadorias.

Mas, como eu disse anteriormente, outra moeda também é fornecida - esses são pontos recebidos pelo sucesso dos funcionários no sistema Bitrix24. Se um funcionário fecha uma tarefa atribuída a ele, pontos são concedidos a ele. Além disso, pontos podem ser concedidos ao chefe por resultados particularmente bons.

Clique para ampliar a imagem.Clique para ampliar a imagem.
Clique para ampliar a imagem.Clique para ampliar a imagem.

Para pagar os pontos, o funcionário precisa selecionar o item "Comprar por pontos" e, em seguida, o dispositivo tentará determinar quem está na frente dele. Para fazer isso, ele verifica os dispositivos Bluetooth à sua volta e, se ele vir o endereço MAC do dispositivo pertencente ao funcionário e entrar no banco de dados, assim como o nível do sinal for poderoso o suficiente para supor que ele esteja próximo, os dados sobre o status da conta do funcionário aparecerão na tela, nome e oferta para pagar cookies com pontos.

Se o sistema não conseguir determinar um único dispositivo familiar, ele emitirá um aviso e oferecerá para selecionar seu nome na lista e depois inserir seu código PIN.

No caso de uma entrada correta, a mesma janela é aberta com dados sobre o status da conta do usuário e o custo do produto. Quando uma compra é confirmada, a quantidade necessária de pontos é debitada da conta do usuário e o dispositivo emite as mercadorias.

Isso é tudo. Este projeto foi criado exclusivamente para fins educacionais e para mostrar que as aplicações do controlador Wiren Board são limitadas apenas pela imaginação. Todos os arquivos e scripts podem ser encontrados no link .

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


All Articles