L’interface BLUETOOTH du déclencheur de relais ( 1 de 2 )

Interface utilisateur pour afficher des données, modifier des paramètres et passer des commandes. Cette interface demande l’installation d’une application sur l’unité du client (téléphone ou tablette). L’interface proposée fonctionne que sur ANDROID.

Mode BLUETOOTH

La communication BLUETOOTH se fait directement entre le téléphone intelligent ou la tablette et le ESP32 sans intermédiaire.

Cette interface est aussi compatible aux circuits Arduino et autres circuits semblables. Il suffit d’adapter le programme du ESP32 au circuit souhaité.

Interface avec un programme spécifique à installer sur l’unité du client

L’avantage de cette approche est que le programme d’interface client prend relativement peu de place dans le ESP32. Avec la version WEB, comme la majeure partie du programme d’interface réside sur le ESP32, nous sommes très restreints par sa mémoire. Pour la version avec programme spécifique, la majeure partie du traitement se fait dans l’unité du client. Ceci offre beaucoup plus d’opportunités. En plus de la mémoire plus grande, le programme résidant sur l’unité du client peut accéder à pratiquement toutes les possibilités qu’offre l’unité du client ( grande capacité de traitement, internet, caméra, son, microphone … ).


MIT app inventor2, l’outil de développement de programme


Cliquez sur les images pour les agrandir

Avec l’outil WEB MIT app inventor2, il est relativement facile de créer une application ANDROID sur mesure.  Pas de lignes de code à programmer. L’application se monte comme un jeu de blocs.

L’éditeur de blocs

Exemple

Pour avoir un bon aperçu du fonctionnement de MIT app Inventor, je vous propose de visionner ce court vidéo 


LE PROGRAMME DÉCLENCHEUR DE RELAIS


Programme source à importer dans MIT app inventor

https://github.com/rcepmorel/Declencheur_de_relais_Comm_Bluetooth_01

  • Télécharger le fichier : DeclencheurDeRelais_V1_0.aia
  • Après l’importation dans MIT app inventor, s’assurer d’avoir «Français» comme langue sélectionnée

La fenêtre utilisateur

Chaque élément de la page porte un nom, ceci permet d’interagir individuellement avec chaque item. Chaque élément, incluant les étiquettes (lable), peut être modifié en cours de programme.


LES BLOCS

Définition des variables

Définition des variables qui vont servir aux traitements de l’information.

Processus principal

Processus qui roule à intervalle régulier. Il valide l’état de la connexion BLUETOOTH, démarre la phase d’initialisation de l’interface et surveille la réception de données.

Au premier démarrage, comme le BLUETOOTH n’est pas connecté, il appelle la procédure «prVousEtesDéConnecté».

Affichage du message « Vous êtes déconnecté »

Exécute l’affichage « VOUS ÊTES DÉCONNECTÉ », met l’arrière-plan de ce message en rouge. Rends le texte de «btConnecté» invisible avec un arrière-plan en gris.

Le texte en rouge sur les boutons indique qu’ils sont inactifs. Les boutons sont mis à non activé au départ dans l’interface Designer de MIT app Inventor.

Screen1.Erreur survenue

Un processus surveille en permanence l’arrivée d’erreur et l’affiche sous l’étiquette lbMessageDErreur et met l’arrière-plan du message en rouge.

Appel de l’affichage des périphériques BLUETOOTH 

La liste des périphériques BLUETOOTH déjà associés au téléphone ou à la tablette s’affiche en cliquant sur l’image «CONNECT». Cette image est liée à l’action ci-dessous.

Sélection d’un périphérique

Le clic d’une adresse BLUETOOTH dans la liste en fait la sélection. Le processus d’effacement des messages d’erreur est aussi lancé.

Efface les messages d’erreur

Vide le texte et met un fond blanc

Message d’erreur BLUETOOTH

En cas d’erreur sur la connexion BLUETOOTH un message s’affiche, ceci au cas où l’autre processus n’aurait pas détecté l’erreur.

Affichage du message «VOUS ÊTES CONNECTÉ»

Si l’opération se passe bien le processus principal appel la procédure «prVousEtesConnecté»


La procédure «prVousEtesConnecté» exécute l’affichage « VOUS ÊTES CONNECTÉ », met l’arrière-plan de ce message en vert. Change le texte de  «VOUS ÊTES DÉCONNECTÉ» pour «APPUYER POUR DÉCONNECTER» et met son arrière-plan en gris.

Première connexion

Par la suite, comme c’est la première connexion, le processus principal appel la procédure «prPremiereConnexion». «vrPremièreConnexion» a été initialisé à «vrai» lors de sa création.

L’effacement des messages d’erreur est exécuté.

La procédure «prDésactiveBoutons» est appelée. La couleur du texte des boutons passe au cyan.

Le texte du bouton «Arrêter» est mis en noir et il est inactivé. Ce bouton est associé à l’intervallomètre. Il n’est opérationnel que lorsque la phase d’initialisation est terminée et que le bouton «Démarrer» est activé.

La procédure «prPremiereConnexion» envoie une commande «INIT,I» vers le ESP32. Une réponse est attendue en provenance du ESP32 suite à cette commande. Comme réponse, le ESP32 enverra les valeurs configurées lors de sa dernière utilisation. Ces valeurs vont permettre de remplir les champs de l’interface utilisateur.

Un chronomètre est démarré. Si aucune réponse n’est reçue, à l’expiration du délai de réception «ChronoCmdDésactivé.Chronomètre» s’exécute. Un message d’erreur est affiché et les boutons sont réactivés. Le délai configuré est 10 secondes.

La variable «vrPremièreConnexion» est placée à faux pour indiquer que la phase première connexion est passée.

La procédure «ztfrequence.RequestFocus» force le curseur à se placer sur la case zone de texte «ztfrequence» qui est à droite de l’étiquette «À toutes les».

Désactivation des boutons

Les boutons sont désactivés pour empêcher un changement pendant l’exécution d’une demande de traitement. La couleur cyan signale que les boutons sont temporairement désactivés.

ChronoCmdDésactivé

Certaines actions n’ont pas d’impact réel à ce stade de l’exécution du programme, mais elles en auront ultérieurement, car cette routine est exploitable à toute étape au besoin. Cette remarque s’applique à toutes les procédures et à plusieurs blocs.

Il n’y a pas de message d’erreur quand la commande Clic est en cours, car il n’y a pas de message attendu suite à cette commande. Pour toutes autres commandes, un message est affiché, car il y a expiration du délai d’attente d’une réponse. Puis, le chronomètre est désactivé, le statut de vrCmdClicEnCours est mis à faux, les variables d’octets sont remises à zéro. Les boutons sont réactivés.

Remise à zéro des variables d’octets

Les variables d’octets sont remises à zéro, vidées afin d’être prêtes pour de nouveaux échanges.

Activation des boutons

Les boutons sont mis opérationnel. Le texte est affiché en vert.

Octets reçus

À la commande «INIT,I»  le programme du ESP32 retourne en réponse une trame de données. Le processus principal détecte l’arrivée de données et appel la procédure «prTaiteOctesRecus».

Trame de réponse : [ |DATA|#|#|#|#|#| ]  # est un nombre.

  • Caractère de début de trame [
  • Chaîne de caractères : DATA
  • Voltage de l’alimentation
  • Délai de réaction
  • Temps actif du relais
  • Délai de retour
  • Unité de délai de réaction
  • Caractère de fin de trame ]

La procédure commence en effaçant les messages d’erreurs.

La trame de réponse est composée de 8 segments d’information. Ils ne sont pas reçus obligatoirement en une seule étape. Il  faut donc accumuler les octets reçus dans une variable temporaire «vrOctetsReçus». Afin de suivre les échanges, le contenu de cette variable est affiché sous l’étiquette «lbMessageDeSuivie». La trame se termine par le caractère «]». Le processus valide si ce caractère est arrivé, si oui, il valide si le début de la trame commence par «[».  Si c’est le cas, il lance la procédure «prDiviseOctetsReçus».

Si le caractère de fin est reçu, mais que le caractère de début n’est pas «[» un message d’erreur est affiché sous l’étiquette «lbMessageDErreur». Les variables d’octets sont vidées et les boutons réactivés. 

Segmentation de la trame reçue

L’information des données doit être extraite de la trame obtenue. Chaque champ d’information est séparé par le caractère «|». La fonction «diviser» permet de séparer chacun des champs et de les mettre comme élément d’une liste. Chacun des champs de l’écran utilisateur se remplit automatiquement. Un mouchard affiche la taille de la liste. Il sert lors du développement du programme. La ligne «mettre «lbMouchard_01….» est enlevée dans la version finale.

Le chronomètre de commandes désactivées est arrêté, les boutons sont réactivés.

Ajusté les étiquettes d’unité pour le délai de réaction

Le dernier segment reçu contient 1 ou 0. S’il est égal à 1, l’unité pour le délai de réaction est en microseconde, sinon en milliseconde. L’instruction «mettre cbUnitUs.Vérifié à vrai» place le crochet dans la case cbUnitUS. L’expression «faux» l’enlève évidemment.

Calcul du temps total de l’opération du relais

En prévision de l’opération de l’intervallomètre, le temps d’exécution total de l’opération du relais est comptabilisé. Ce qui comprend, le délai d’attente programmé avant l’opération du relais suite à une demande d’activation, plus le temps alloué à l’opération du relais lui-même, plus un temps d’attente à la fin avant de redonner le contrôle à la suite du programme.

Le temps total est comptabilisé en milliseconde. Le temps inscrit dans la case «délai de réaction» doit être divisé par 1000 si l’unité est en microseconde. Ceci donnera sa valeur en milliseconde.

Le résultat du calcul est affiché sous l’étiquette «lbMessageInterv».

Ce temps sert aussi au calcul du délai de désactivation des boutons suite à une demande d’opération du relais.

Valide le voltage de la source d’alimentation

Si le voltage de la source d’alimentation se situe entre 7 et 7,6 volts, la couleur de fond de l’étiquette «lbVoltageSrcAlimentation_Lu» est rose pâle pour indiquer un niveau moyennement critique. Si ce voltage est sous 7 volts, la couleur est rouge pour indiquer un niveau critique. Autrement, le fond est vert pour signifier un niveau normal. 

Changement au niveau de l’unité de «Délai de réaction»

Dans la configuration initiale de l’interface, l’unité pour le délai de réaction est la milliseconde. Il peut arriver que dans le ESP32, cette unité enregistrée dans le EEPROM soit la microseconde, valeur employée par le dernier utilisateur du EPS32. À la réception de la trame d’initialisation, le programme détectera la différence et lancera les actions suivantes.

Si la case à cocher «cbUnitUs» est à 1, «Vérifié» («checked en anglais», coché, vrai)

  • Démarrer le chronomètre «ChronoCmdDésactivé» avec le délai de réception configuré précédemment et activer le chrono
  • Décocher la case «cbUnitMs»
  • Vider les variables d’octets
  • Effacer les messages d’erreur
  • Désactiver les boutons
  • Envoyer au ESP32 la commande «U». En réponse, le ESP32 enregistrera la valeur 1 dans le EEPROM et retournera la trame «DATA». Le programme principal amorcera le traitement de cette trame comme nous l’avons vu précédemment. Les unités s’ajusteront dans l’interface utilisateur ainsi que le calcul du temps total de l’opération du relais. 

Si la case à cocher «cbUnitUs» est non cochée et la case «cbUnitMs» est non cochée alors, cocher «cbUnitUs».

Comme il y a eu un changement sur «cbUnitUs» à non coché et que «cbUnitMs» est non coché, on en déduit que cette case a été décochée par erreur. On la recoche. L’unité était déjà us.

La phase d’initialisation est complétée


ATTENTE D’UNE ACTION



Case à cocher «Milliseconde»

L’utilisateur décide de cocher la case Milliseconde

Si la case à cocher «cbUnitMs» est «Vérifié» («checked en anglais», coché, vrai)

  • Démarrer le chronomètre «ChronoCmdDésactivé» avec le délai de réception configuré précédemment et activer le chrono
  • Décocher la case «cbUnitUs»
  • Vider les variables d’octets
  • Effacer les messages d’erreur
  • Désactiver les boutons
  • Envoyer au ESP32 la commande «M». En réponse le ESP32 enregistrera la valeur 0 dans le EEPROM et retournera la trame «DATA». Le programme principal amorcera le traitement de cette trame. Les unités s’ajusteront dans l’interface utilisateur ainsi que le calcul du temps total de l’opération du relais. 

Si la case changée «cbUnitMs» est non cochée et la case «cbUnitUs» est non cochée alors, cocher «cbUnitMs».

Comme il y a eu un changement sur «cbUnitMs» à non coché et que «cbUnitUs» est non coché , on en déduit que cette case a été décochée par erreur. On la recoche. L’unité était déjà ms.


Bouton d’activation du relais

Un clic sur ce bouton

  • Configure «ChronoCmdDésactivé». Le temps du chronomètre doit être supérieur au temps total de l’opération du relais. 1 seconde est ajoutée
  • Active le «ChronoCmdDésactivé»
  • Efface les messages d’erreur
  • Désactive les boutons
  • Mets à «vrai» la variable «vrCmdClicEncours»
  • Envoie la commande «CLIC,D» au ESP32.

Aucune réponse n’est attendue du ESP32. À la fin du délai, «ChronoCmdDésactivés» est lancé, les boutons sont réactivés comme vu précédemment.


Changement dans la zone de texte

Quand l’utilisateur sélectionne la zone de texte «Temps actif», la couleur de fond du bouton «Envoie» passe au jaune. Ceci signale de ne pas oublier de transmettre les changements au ESP32. La couleur de fond repassera au gris seulement après le clic de ce bouton.

Le comportement pour la zone de délai de retour est identique à celui de la zone de Temps actif

Pour la zone de texte Délai de réaction, il y a un petit ajout. Lors du démarrage de l’application, le curseur se place sur la première zone de texte qui est la zone de texte de délai de réaction. Pour éviter que le bouton «Envoie» passe au jaune, cette action est sautée lors de la première connexion. Comme nous l’avons vu précédemment, à l’étape d’initialisation, le curseur est déplacé à la zone de texte à la droite de « À toutes les » par la procédure «ztfréquence.RequestFocus». Par la suite, le comportement est identique aux deux autres.


Le bouton «Envoie»

Le bouton «Envoie» sert à transmettre et enregistrer les changements de configuration.

  • Première étape, toutes les cases doivent être remplies, sinon il y a un message d’erreur affiché et le programme retourne en attente d’action
  • Deuxième étape, l’étiquette «lbMessageDErreur» est vidée et son arrière-plan est mis en blanc. On s’assure que les variables d’octets soient vides et on désactive les boutons
  • Troisième étape, le chronomètre de temporisation de désactivation des boutons est mis à la valeur du délai de réception configuré et est démarré
  • Quatrième étape, le contenu des trois champs est transmis au ESP32 dans une trame NDATA avec une virgule comme élément de séparation
  • Cinquième étape
    • L’arrière-plan du bouton «Envoie» est remis en gris
    • L’étiquette «lbMessageDeSuivie» est vidée
  • Sixièmement, le curseur est remis sur la zone de texte «ztFréquence».

Suite à la réception de la commande«NDATA», le programme du ESP32 enregistre les nouvelles données dans le EEPROM et répond avec une trame «DATA». Le processus principal de l’interface utilisateur traite cette nouvelle trame comme nous l’avons vu précédemment.


Déconnexion

Quand le bouton «btNonConnecté» est cliqué

  • Le Bluetooth est déconnecté
  • Les boutons sont désactivés et leur texte est mis en rouge
  • La variable «vrPremièreConnexion» est mise à «vrai»

INTERVALLOMÈTRE


L’intervallomètre a pour fonction de générer un déclenchement du relais à un intervalle régulier pendant un temps prédéterminer.

L’intervalle est en seconde et est inscrit dans la zone de texte «ztfréquence». La période de temps s’inscrit en seconde dans la zone de texte «ztPériode».

La séquence démarre lorsque le bouton «DÉMARRER» est cliqué.

  • Si une des deux zones de texte est vide, le message «** UNE CASE EST VIDE **» est affiché sur fond rouge sous l’étiquette «lbMessageInterv»
  • Si l’intervalle configuré est plus court que le temps total de l’opération du relais, le message «** L’intervalle est trop court pour la configuration de déclenchement **» est affiché sur fond rouge sous l’étiquette «lbMessageInterv»
  • Si la période est plus courte que la fréquence le message «** «PENDANT» DOIT ÊTRE PLUS GRAND QUE «À TOUS LES» **» est affiché sur fond rouge sous l’étiquette «lbMessageInterv»

Si les deux champs sont bien configurés

  • Les boutons sont désactivés
  • Le «ChronoPériode» est réglé sur le nombre de secondes de «ztPériode» multiplié par 1000 pour avoir le nombre en millisecondes et il est activé
  • Le «ChronoFréquence» est réglé sur le nombre de secondes de «ztfréquence» multiplié par 1000 pour avoir le nombre en millisecondes et il est activé
  • Le bouton «ARRÊTER» est activé et le texte est mis en vert
  • Le message «+ C’EST DÉMARRÉ » s’affiche sur fond vert sous l’étiquette
    «lbMessageInterv»
  • La commande «CLIC,D» est envoyé au ESP32

Le «ChronoFréquence»

À l’expiration du délai du «ChronoFréquence»

  • Le chronomètre de fréquence est mis à «faux»
  • Si la période est encore active
    • Le «ChronoFréquence» est redémarré
    • La commande «CLIC,D» est envoyé au ESP32

Le «ChronoPériode»

À l’expiration du délai du «ChronoPériode»

  • Le «ChronoPériode» est désactivé
  • La couleur du texte du bouton ARRÊTER est mise à noir et il est désactivé
  • «lbMessageInterv» est vidé et son arrière-plan est mis en blanc
  • Configure «ChronoCmdDésactivé». Le temps du chronomètre doit être supérieur au temps total de l’opération du relais. 1 seconde est ajoutée
  • «ChronoCmdDésactivé» est mis en marche
  • Mets à «vrai» la variable «vrCmdClicEncours»
  • Envoie la commande «CLIC,D» au ESP32. C’est un clic supplémentaire pour compléter le bon nombre de clics par période.

À la fin du délai, «ChronoCmdDésactivés» est lancé, les boutons sont réactivés comme vu précédemment.

Le bouton «ARRÊTER»

L’utilisateur a la possibilité d’arrêter la séquence à tout moment.

  • «ChronoFréquence» est mis à zéro et est arrêté.
  • «ChronoPériode» est mis à zéro et est arrêté.
  • Le bouton «ARRÊTER» est désactivé et son texte est mis en noir
  • «lbMessageInterv» est vidé et son arrière-plan est mis en blanc
  • Le processus de réactivation des boutons est lancé

<- L’interface Web du déclencheur de relais        L’interface BLUETOOTH du déclencheur de relais (2 de 2) ->