Le dispositif pour l'émission de cookies "Cook 3000"



Bonjour à tous! Je travaille pour une entreprise qui développe des équipements pour la surveillance des plates-formes pétrolières, des fermes minières, des groupes électrogènes diesel et d'autres choses ennuyeuses. Mais cette fois, nous avons automatisé autre chose. Alors, rencontrez: "Cook 3000" - l'appareil pour émettre des cookies aux meilleurs employés.

L'appareil est une construction en PVC et certaines parties:
Une spirale avec un entraînement (sert à fournir des marchandises), un écran, un accepteur de pièces et le cerveau de toute la structure - contrôleur Wiren Board 6.




Cliquez pour agrandir l'image. Cliquez pour agrandir l'image.
Cliquez pour agrandir l'image. Cliquez pour agrandir l'image.

Écran


Comme écran pour WB6, j'utilise le module d'écran Nextion (NEXTION ENHANCED NX4832K035).

Le module est équipé d'un processeur AVR. Dispose d'un écran TFT de 3,5 pouces avec une résolution de 480 * 320, 32 Mo de mémoire interne, EEPROM 1024 octets, 8192 octets RAM.

Cet appareil stocke et affiche des graphiques, anime des éléments d'interface et traite les clics. Seuls les codes d'événement sont transmis au contrôleur via UART, ce qui facilite la configuration d'interfaces de complexité variable.

Pour charger les paramètres et les graphiques nécessaires dans le module d'écran, un éditeur visuel des interfaces de l'éditeur Nextion est fourni. Vous pouvez le télécharger sur le site officiel d'itead.

Cliquez pour agrandir l'image.

Lors de la création d'un nouveau projet, vous devez spécifier le modèle, la position de l'écran et l'encodage des caractères. Pour un affichage correct de l'alphabet cyrillique, sélectionnez iso-8859-5.

Cliquez pour agrandir l'image. Cliquez pour agrandir l'image.

À gauche, une barre d'outils. Vous trouverez ici les éléments les plus nécessaires à la création d'une interface.

Cliquez pour agrandir l'image.

Cliquons sur le bouton. Un bouton conditionnel apparaîtra dans la zone d'édition. Étirez-le, modifiez le texte et le titre. Pour afficher du texte, vous devez ajouter une police. Nous utiliserons l'outil Font Creator dans l'onglet tools. Dans le champ "Événement", vous devez écrire le code qui sera joué sur les événements.

Par exemple, si vous écrivez imprimer "bouton enfoncé \ r" dans l'onglet "Événement de presse tactile", puis lorsque le bouton est enfoncé, l'appareil enverra à UART: bouton enfoncé et le caractère de saut de ligne.

Cliquez pour agrandir l'image.

La description et des exemples de codes se trouvent dans la documentation de l'écran. Pour le débogage, vous pouvez utiliser la fonction de débogage. Cette fenêtre vous permet de tester toutes les fonctions du firmware avant de remplir l'écran lui-même.

Cliquez pour agrandir l'image.

Si tout est en ordre, vous pouvez connecter l'écran à l'ordinateur via l'adaptateur USB / UART et remplir le firmware en cliquant sur le bouton «Télécharger».

Cliquez pour agrandir l'image.
Mais comment pouvons-nous maintenant nous lier d'amitié avec WB6?
Vous pouvez connecter l'écran soit via le même adaptateur USB \ UART à l'un des ports USB du contrôleur, soit directement à l'un des logements d'extension de la carte contrôleur.
Nous nous intéressons aux broches TX, RX, 5V et GND.

Cliquez pour agrandir l'image.

Après avoir connecté l'écran au contrôleur, nous recevrons les données d'événement directement sur le port série.

Afin de répondre en quelque sorte à ces événements, écrivons un petit script qui enverra toutes les données sur les événements à la rubrique MQTT. Créez d'abord un fichier dans le dossier racine du contrôleur et appelez-le 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 


Si vous avez tout fait correctement, après avoir exécuté le script lorsque vous cliquez sur le bouton, dans l'interface Web du contrôleur, vous verrez une rubrique avec les données que le module d'écran envoie.

Sur les contrôleurs Wiren Board, un système de règles est fourni - wb-rules . Les règles sont créées via une interface Web et écrites dans un langage simple de type Javascript.

Dans l'interface Web WB6, accédez à l'onglet Scripts et créez un nouveau script en cliquant sur le bouton "Nouveau ...", nommez-le "screen_button.js" ou autre chose. Ensuite, nous écrirons une règle: Lors du changement de l'écran / du sujet brut (c'est à lui que nous envoyons les données de l'écran), certaines actions se produiront. Dans ce cas, lorsque vous cliquez sur l'écran, nous verrons le message «Bouton enfoncé» dans la fenêtre de débogage de l'interface 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"] = ""; // . } }); 


Super. Afin de traiter les clics sur l'écran, nous avons compris. Parlons maintenant de la façon dont nous contrôlons l'écran avec WB6. Par exemple, modifiez le texte du bouton. L'écran accepte les commandes UART. Une liste et une description des commandes se trouvent dans la documentation de l'écran.

Pour déterminer la fin de la commande, l'écran attend trois caractères spéciaux (\ xff \ xff \ xff). Pour simplifier la tâche à l'avenir: créez un script dans le dossier racine bash. Appelons-le 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 



Maintenant, pour changer le texte du bouton, il suffit d'appeler le script avec les arguments:
bash /mnt/data/root/text.sh -a b0 -b 'Some Text'
Où b0 est le nom du bouton à l'écran et Some Text est le texte souhaité.

Un exemple d'utilisation du moteur de règles WB6:

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


De même, vous pouvez modifier la page actuellement affichée à l'écran, le texte sur divers éléments, variables et autres paramètres. Je ne peindrai pas ici toutes les fonctionnalités du module écran. Les informations déjà écrites ci-dessus sont tout à fait suffisantes pour notre projet.

Accepteur de pièces


En tant qu'accepteur de pièces, j'utilise la version chinoise, trouvée sur les étendues d'Aliexpress pour 400 roubles.

Avec la connexion, tout est simple. + 12v et une sortie d'impulsion à connecter au module d'extension à contact sec WBE2-DI-DR-3 . De plus, pour déterminer la pièce, il suffit de compter les impulsions. Pour ce faire, créez un nouveau script dans le moteur de règles:

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); } } }); 


Règle assez simple. Peut-être pas le plus précis.

Bitrix24


Maintenant, probablement le plus intéressant. Essayons de comprendre comment traduire la phrase "Bien joué. Prenez un cookie sur une étagère. " Notre entreprise utilise le système Bitrix24 comme CRM. L'idée est que pour chaque tâche terminée (Tâche) dans le bitrix, l'employé reçoit des points électroniques. Ces mêmes points peuvent être utilisés comme devise pour notre appareil. Voyons comment se connecter à Bitrix24 et surveiller le succès des employés.

Cliquez pour agrandir l'image.

Nous utiliserons bitrix24-python-sdk comme base.
Installez le SDK sur le contrôleur avec la commande
pip install bitrix24-python-sdk

Ensuite, créez un script python dans le dossier racine, appelez-le 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 


Ce script demande toutes les tâches terminées d'une liste donnée d'utilisateurs, les considère et envoie le nombre aux rubriques dans mqtt. Ensuite, nous ne pouvons comparer le montant obtenu avec les valeurs précédentes et si les nouvelles données sont plus, puis ajouter des points à l'employé pour le travail effectué.

Bluetooth


Pour numériser les appareils BLE, j'utilise Bluez. Le programme est déjà installé sur le contrôleur. Afin de scanner les appareils ble, entrez simplement quelques commandes dans la console:

 hciconfig hci0 up hcitool lescan --duplicates 

Mais cela ne nous suffit pas. Il est conseillé de voir le niveau du signal. Pour ce faire, installez l'utilitaire hcidump supplémentaire:

 apt-get install bluez-hcidump 

Et complétez notre équipe:

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

À la sortie, nous obtenons des adresses MAC et des périphériques Bluetooth (ble) RSSI à proximité.

Cliquez pour agrandir l'image.

Ces deux lignes peuvent être joliment enveloppées dans un script bash et la sortie envoyée à MQTT.
La deuxième façon est le script aioblescan
Il nécessite Python 3 pour fonctionner, de préférence 3.5. L'avantage de ce script est que vous pouvez surveiller des adresses MAC spécifiques, et pas toutes les montres intelligentes et tous les smartphones passant par la fenêtre. La sortie du script est également redirigée vers MQTT, pour la commodité de travailler avec le moteur de règles.

Cliquez pour agrandir l'image.

Maintenant, nous savons comment interagir avec WB6 à l'aide du module d'écran, nous pouvons compter les pièces, surveiller le succès des employés de Bitrix, scanner les appareils bleus et leur niveau de signal. Il reste à rassembler cela en un seul tas et à prescrire une sorte de logique. Je ne peindrai pas tous les scripts de ce projet. Tout sera disponible sur le lien dans le domaine public. Peut-être que l'un d'entre vous trouvera une application plus utile et plus intelligente à cet effet.

Logement


Le corps est en PVC expansé de 10 mm. Ce plastique est vendu en feuilles. Modérément doux. Vous pouvez couper avec une scie à métaux ou avec un couteau de bureau ordinaire sur une règle.

Cliquez pour agrandir l'image.

Comme attache, un jeu de pièces métalliques pour enfants «Constructor» et de courtes vis autotaraudeuses ont été utilisés. Dans ce kit, presque tout était nécessaire pour assembler le boîtier.

Cliquez pour agrandir l'image.

Conduire


La spirale et le lecteur ont été achetés dans l'application B \ U de la boutique en ligne. pièces pour distributeurs automatiques. Alimenté par une alimentation 24v. Il est connecté via le relais du module d'extension WBE2-DO-R6C-1 .

Cliquez pour agrandir l'image. Cliquez pour agrandir l'image. Cliquez pour agrandir l'image.

Fonctionnel


Fonctionnellement similaire à un distributeur automatique ordinaire. Donne des cookies pour de l'argent et pas seulement.


Lorsque l'appareil démarre, l'écran affiche un écran de démarrage avec un logo, puis il bascule vers l'écran principal, où il nous est proposé d'acheter des cookies ou de jouer à un jeu.

Le jeu pour l'utilisateur est gratuit, mais vous pouvez définir un petit prix pour la motivation. Les règles sont simples. Le joueur se propose de résoudre trois problèmes simples. S'il donne trois bonnes réponses, il reçoit un prix sous forme de cookies. C'est peut-être tout ce que vous devez savoir sur cet article. Revenons au menu principal et cliquez sur «Acheter des cookies».

Ensuite, le système vous demandera de sélectionner un mode de paiement. Lorsque vous choisissez le mode de paiement "For Money", une fenêtre apparaît à l'écran avec le prix et le montant payé, qui augmente lorsque vous déposez de l'argent dans l'accepteur de pièces.

Dès que le montant est suffisant pour effectuer un achat, l'appareil fermera automatiquement cette fenêtre et distribuera la marchandise.

Mais, comme je l'ai dit plus tôt, une autre devise est également fournie - ce sont des points reçus pour le succès des employés du système Bitrix24. Si un employé ferme une tâche qui lui est assignée, des points lui sont attribués. De plus, des points peuvent être attribués au boss pour des résultats particulièrement bons.

Cliquez pour agrandir l'image.Cliquez pour agrandir l'image.
Cliquez pour agrandir l'image.Cliquez pour agrandir l'image.

Pour payer les points, l'employé doit sélectionner l'élément "Acheter des points", puis l'appareil essaiera de déterminer qui se tient devant. Pour ce faire, il scanne les appareils Bluetooth autour de lui et s'il voit l'adresse MAC de l'appareil appartenant à l'employé et entrée dans la base de données, ainsi que le niveau du signal est assez puissant pour supposer qu'il se tient à proximité, les données sur l'état du compte de l'employé apparaîtront sur l'écran, son nom et offre de payer des cookies avec des points.

Si le système n'a pas pu déterminer un seul appareil familier, il émettra un avertissement et vous proposera de sélectionner votre nom dans la liste, puis d'entrer votre code PIN.

Dans le cas d'une entrée correcte, la même fenêtre s'ouvre avec des données sur le statut du compte utilisateur et le coût du produit. Lorsqu'un achat est confirmé, le montant requis de points est débité du compte de l'utilisateur et l'appareil émet la marchandise.

C’est tout. Ce projet a été créé exclusivement à des fins éducatives et pour montrer que les applications du contrôleur Wiren Board ne sont limitées que par l'imagination. Tous les fichiers et scripts peuvent être trouvés sur le lien .

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


All Articles