Mini-Rapport
Nos projets se divisent en 4 parties principales (développement mobile avec Node-RED,
développement logiciel (Windows) sous WinDev, conception d'une carte électronique PCB et
un système de traitement d'image).
Les parties réalisées de ce projet sont le développement software, telles que :
L'application mobile sous Node-RED
Node-RED :
Node-RED est un outil de programmation basé sur les flux, développé à l’origine par l’équipe
Emerging Technology Services d’IBM et désormais partie de la Fondation OpenJS.
Cet outil permet une utilisation sur plusieurs environnements tels que Windows, une carte
Raspberry Pi ou un système d'exploitation Android.
Dans notre projet, nous avons utilisé cet outil pour faciliter la tâche au client pour commander
leurs besoins. L'idée est de développer avec Node-RED 6 applications sur 6 portables. Chaque
téléphone occupe une table, donc nous avons installé et activé Node-RED sur nos portables à
l'aide de l'application Termux.
L'installation de Node-RED nécessite des commandes shell (cmd). Tout d'abord, nous avons
installé Node.js, car Node-RED est basé sur une partie graphique avec des nœuds et une partie
de programmation en JavaScript. Ensuite, nous avons installé Node-RED. Avant cela, nous
avons mis à jour Termux avec les commandes update et upgrade, une étape initiale et importante
pour mettre à jour les commandes.
Si l'application est installée, on tape dans le terminal Termux node-red pour l'activer et on
l’ouvre aussi dans le moteur de recherche Google en mettant l'adresse IP de notre portable et le
port 1880, comme ceci :
"localhost:1880"
"127.0.0.1:1880"
Notre application est composée de boutons pour les commandes clients, d'images pour montrer
nos produits et de zones de texte. Tout cela se trouve dans la bibliothèque "dashboard et
medias".
La deuxième étape correspond à l'installation de cette bibliothèque. Il existe deux méthodes
pour l'installer :
Avec Termux et des commandes shell.
Dans l'environnement de Node-RED.
Les scripts suivants résument tout cela :
• apt update
• apt upgrade
• apt install coreutils nano nodejs
• npm i -g --unsafe-perm node-red
• node-red /// Vous pouvez ensuite pointer un navigateur vers http://localhost:1880
On peut également installer d'autres nœuds Node-RED tels que node-red-dashboard de manière
standard (avec Termux) :
• cd ~/.node-red
• npm i node-red-dashboard
Les étapes de création de l'application :
Nos applications contiennent 3 catégories : Foods, Jus et Café. Chaque catégorie est placée dans
un tableau (les tableaux sont une méthode graphique dans Node-RED pour créer plusieurs pages
dans une seule application).
Chaque tableau ou fenêtre contient des boutons, et chaque bouton correspond à un produit avec
sa quantité, ainsi que des zones de texte pour afficher le nom et le prix du produit. Des champs
médias permettent également d'ajouter des images explicatives pour faciliter la tâche au client
lors de sa commande.
Cette application est programmée avec une structure bien déterminée pour assurer la
compatibilité avec le logiciel Windows. Une communication bidirectionnelle sans fil entre les
deux est assurée par une technique appelée MQTT Broker.
Dans Node-RED, il est simple d'utiliser ce protocole, car il est intégré sous forme de nœud.
Nous avons deux types de nœuds :
1. MQTT Out (émission des informations).
2. MQTT In (réception des messages).
Pour un fonctionnement plus professionnel et en tout temps, nous avons créé un compte dans
un broker en ligne afin d'assurer la communication entre le client et le serveur via la technique
Publish/Subscribe.
Pour la programmation de ces deux nœuds :
• MQTT Out : Il suffit de mettre le payload (message à envoyer, déjà créé dans le bouton,
contenant une chaîne de caractères définissant le nom de la table, la commande et la
quantité). Ensuite, on ajoute le topic (sujet) pour donner la permission au serveur
(logiciel) qui contient le même sujet de recevoir le message.
• MQTT In : Même principe, mais chaque portable (chaque application) possède son
propre sujet de réception du message, car chaque table a son propre prix de commande.
Si l'utilisateur de l'application (client) appuie sur le bouton, le message sera envoyé vers le
champ payload de MQTT Out, puis transmis au broker. Le broker redistribue ce message vers
le logiciel. Lorsque le message est reçu, le responsable renvoie un message contenant le prix de
la commande et le topic (sujet qui permet d'identifier la table). Ensuite, l'application reçoit ce
message depuis le broker.
Logiciel et couche intermédiaire de communication :
La configuration de MQTT sous WinDev est très lourde et difficile, car elle nécessite des
procédures spéciales et des sections critiques pour se connecter au broker en ligne et assurer un
bon fonctionnement.
C'est pourquoi nous avons préféré travailler avec les sockets, une technique de communication
client-serveur où le client se connecte à son maître via une adresse IP et le même port que celui
utilisé par le serveur.
Ainsi, il est nécessaire de créer une couche intermédiaire entre le broker et le logiciel pour
assurer une communication bidirectionnelle. Cette couche est un programme Python qui permet
de se connecter simultanément au broker et au logiciel via les sockets.
Ce programme utilise les bibliothèques suivantes :
• socket (pour la communication réseau).
• datetime (pour les heures et dates de réception des messages).
• paho-mqtt (pour assurer la communication avec le broker).
• time (pour mettre le programme en attente et éviter les confusions dues à la rapidité
d'exécution).
Ce programme permet :
• De se connecter au broker en ligne.
• De publier les messages reçus depuis le logiciel après avoir séparé le payload et le topic.
• De souscrire aux messages reçus depuis le broker et de les envoyer vers le logiciel via
les sockets en temps réel.
Fonctionnement du logiciel :
Ce logiciel contient 9 interfaces permettant sa gestion :
1. Une interface de sécurité (accès avec mot de passe et identifiant utilisateur).
2. Une interface pour la gestion du restaurant (historique des commandes, liste des tables).
3. Une interface pour commander le robot en envoyant un message contenant le numéro
de table. Ce message passe par la couche intermédiaire, puis par le broker, et enfin, la
carte Raspberry Pi le récupère via MQTT.
4. Une base de données HFSQL Classique stockant les informations des utilisateurs, des
commandes et du stock.
Au démarrage du logiciel, une interface de connexion s'affiche. L'utilisateur doit saisir son
identifiant et son mot de passe (déjà enregistrés dans la base de données).
• Le bouton "Valider" teste l'existence des identifiants saisis. Si les informations sont
correctes, la fenêtre d'accueil s’ouvre.
• Cette fenêtre lance la fenêtre d’accueil 1, qui permet de lancer une fenêtre invisible
contenant le programme principal du logiciel. Afin d’initialiser cette fenêtre, elle lance
automatiquement un serveur socket et met un port en écoute en attendant une connexion
client. Ensuite, elle ouvre l’interface "Gestion du restaurant", qui offre une supervision
complète de l’état des tables et permet d’envoyer des messages via des boutons.
Lorsque le logiciel reçoit un message via socket, il est sous la forme :
• Nom de table / Message commande / Date et heure
Le message est ensuite traité :
• Séparation du nom de la table pour identifier à quelle table envoyer la commande.
• Extraction du message de commande pour afficher les informations à l’écran (prix total,
type de commande, quantité).
• Enregistrement des informations dans la base de données historique des commandes
avec la date et l’heur de recevoir.
Le logiciel permet également à l'utilisateur d'ajouter des produits au stock, qui s'afficheront dans
un tableau dédié dans la fenêtre "Stock".