mercredi 14 juin 2017

Programmer une appli Android pour communiquer en bluetooth

L'objectif du tuto d'aujourd'hui est de réaliser, au moyen de MIT App Inventor 2, une application Android qui communiquera par bluetooth avec une carte Arduino.

Une application de ce genre pourrait permettre de contrôler de l'éclairage ou des moteurs (un robot!) au moyen de votre appareil Android, ou encore de lire au moyen de votre appareil Android l'état de capteurs externes branchés à l'Arduino.


Quelques préalables

Pour réaliser l'activité d'aujourd'hui, vous devez disposer d'un ordinateur sur lequel vous programmerez, d'un appareil android (smartphone ou tablette), d'une carte Arduino et d'un module Bluetooth HC-06.

Cette activité suppose que vous avez déjà un tout petit peu d'expérience avec MIT App Inventor.  Si ce n'est pas le cas, je vous conseille vivement de réaliser le programme d'exploration décrit dans mon article Introduction à MIT App Inventor 2.

Je vais également supposer que vous savez comment brancher le module HC-06 à votre carte Arduino, et que vous avez déjà réglé votre appareil Android pour permettre une communication bluetooth avec l'Arduino.  Si ce n'est pas le cas, pas de panique:  tout ça est couvert dans mon article Bluetooth et Arduino:  le module HC-06.

Le produit fini

Je crois que les explications seront plus facile à suivre si vous connaissez, dès le départ, les caractéristiques de l'application que nous désirons réaliser.

Il s'agit d'une appli très générale, qui se divise en trois parties principales:

1)  Dans le haut de la fenêtre, une paire de boutons permet d'établir ou d'interrompre la connexion avec l'Arduino.  Si aucune connexion bluetooth n'est active, le mot "Déconnecté" apparaît en rouge. Si une connexion bluetooth est active, le mot "Connecté" apparaît en vert.

2)  Un peu plus bas, une zone de texte accompagnée d'un bouton permet à l'utilisateur d'envoyer à l'Arduino un message de son choix.

3)  Finalement, un label affiche le plus récent message reçu en provenance de l'Arduino.



Certains lecteurs pourraient mettre en doute la pertinence de réaliser soi-même une telle application alors qu'il en existe déjà des dizaines de ce genre dans le Google Play Store... Sachez qu'une fois réalisé ce programme général de communication bluetooth, il sera facile de le modifier pour en faire une application spécifique à un projet particulier.

Construction de l'interface

Commençons par construire l'interface, dans le mode "Designer":




L'interface comporte 11 composants:

1)  Un rectangle "Arrangement horizontal", pris dans la catégorie "Disposition".  Cet élément (qui n'est pas indispensable) permet de faire en sorte que les éléments 2, 3 et 4 seront disposés dans la fenêtre sur une même ligne horizontale (il faut placer les éléments 2, 3 et 4 à l'intérieur de ce rectangle).

2)  Un "Label" (disponible dans la catégorie "Interface Utilisateur").  Par défaut, ce label portait le nom "Label1", mais je l'ai renommé "StatutConnexion".  La mention "connecté" ou "déconnecté" s'affichera à cet endroit.

3)  Un "Sélectionneur de liste" (disponible dans la catégorie "Interface Utilisateur").  Lorsque l'utilisateur cliquera sur cet élément, la liste des appareils bluetooth disponibles s'affichera à l'écran. J'ai renommé cet élément "BoutonConnecter", et j'ai remplacé son texte par "Connecter".

4)  Un "Bouton" (disponible dans la catégorie "Interface Utilisateur") qui servira à interrompre la connexion avec l'Arduino.  J'ai renommé cet élément "BoutonDéconnecter", et j'ai remplacé son texte par "Déconnecter".

5)  Un deuxième rectangle "Arrangement horizontal", pris dans la catégorie "Disposition".  Les éléments 6 et 7 seront placés à l'intérieur de ce rectangle.

6)  Une "Zone de texte"  (disponible dans la catégorie "Interface Utilisateur") dans laquelle l'utilisateur écrira le message à envoyer vers l'Arduino.  J'ai renommé cet élément "MessageAEnvoyer".

7)  Un "Bouton" (disponible dans la catégorie "Interface Utilisateur") pour envoyer le message.  Je l'ai renommé "BoutonEnvoyer", et j'ai remplacé son texte par défaut par "Envoyer".

8)  Un deuxième "Label" (disponible dans la catégorie "Interface Utilisateur").  Notre programme y placera le dernier message en provenance de l'Arduino.  Je l'ai renommé "MessageRecu", et j'ai remplacé son texte par défaut par "Aucun message reçu".

9)  Une "Horloge" (disponible dans la catégorie "Capteurs").  Grâce à cette horloge, une fois par seconde, notre programme vérifiera s'il a reçu un message en provenance de l'Arduino.

10) Un "Client Blutooth" (disponible dans la catégorie "Connectivité"), indispensable pour toute application qui communique avec bluetooth.

11)  Un "Notificateur" (disponible dans la catégorie "Interface Utilisateur"), qui permet d'afficher un message d'alerte si bluetooth n'a pas été activé sur l'appareil android.

Pour récapituler, voici ma zone "Composants":  on peut y voir le nom et la hiérarchie de chaque composant placé dans la zone "Interface".  (Au cas où vous ne l'auriez pas déjà remarqué: c'est au bas de cette zone qu'on retrouve un bouton "Renommer" qui nous permet d'assigner un nom plus approprié à chaque composant).



Construction du programme

Basculons maintenant en mode "Blocs" pour construire notre programme.  Rappelez-vous que la couleur des blocs vous donne un indice concernant la catégorie où vous pouvez le trouver.

1)  Une première série d'instructions concerne ce que le programme doit faire au démarrage de l'application.

Lors de l'initialisation de la fenêtre, on vérifie si bluetooth est activé sur l'appareil android.  Si ce n'est pas le cas, un message d'alerte est présenté à l'utilisateur.

Que bluetooth soit activé ou non, aucun appareil bluetooth n'est lié à notre application au démarrage. Nous réglons donc le texte du label "StatutConnexion" à "Déconnecté" (en rouge).

2)  Occupons-nous maintenant de notre "Sélectionneur de liste" intitulé "BoutonConnecter".

Cette instruction fait en sorte que, lorsqu'on clique sur cet élément, une liste des appareils bluetooth disponibles s'affiche à l'écran.

3)  Ensuite, il faut décrire les actions à accomplir lorsque l'utilisateur clique sur le nom d'un appareil bluetooth, dans la liste affichée par le sélectionneur de liste "BoutonConnecter".


On se connecte à l'appareil choisi par l'utilisateur et, si la connexion s'effectue avec succès, on remplace le contenu du label "StatutConnexion" par la mention "Connecté" (en vert).

4) Si l'utilisateur clique sur le bouton "Déconnecter"...on se déconnecte!   (En n'oubliant pas de mettre à jour le contenu du label "StatutConnexion").


5) Si l'utilisateur clique sur le bouton "BoutonEnvoyer", on envoie par bluetooth le contenu de la zone de texte "MessageAEnvoyer".

6) Une fois par seconde, l'horloge vérifie si un message a été reçu.  Si c'est le cas, le message est affichée à l'intérieur du label "MessageRecu".


(vous pouvez cliquer sur l'image pour l'agrandir...)

Fichier "aia"

Si vous éprouvez quelques difficultés à reproduire le programme, ou si vous êtes simplement paresseux, vous pouvez télécharger le fichier tout fait et l'importer dans App Inventor.

Mise à l'essai

Pour une première mise à l'essai de notre application android fraîchement programmée, je vous propose d'utiliser, du côté Arduino, le montage et le sketch proposés dans mon article Bluetooth et Arduino: le module HC-06.  Vous pourrez alors envoyer des message à l'Arduino à partir de votre appareil android.  Sur réception de ces message, l'Arduino allumera ou éteindra deux LEDs, et retournera un message expliquant le nouvel état des deux LEDs.

Personnalisation de l'application

J'ai volontairement choisi une application générale qui montre comment envoyer et recevoir n'importe quel message par bluetooth.  Dans le cas particulier de notre Arduino qui allume et éteint deux LEDs, seulement 5 messages sont pertinents (a, b, c, d ou e).  Il serait donc plus approprié de placer 5 boutons:  un bouton qui envoie le message "a", un autre qui envoie le message "b", etc.  Ce serait plus simple pour l'utilisateur, et ça lui éviterait d'envoyer des messages qui ne sont pas pertinents.

C'est là tout l'intérêt de savoir programmer ses propres applis avec App Inventor:  vous pouvez créer une application qui répond à un besoin très spécifique.

Yves Pelletier   (TwitterFacebook)

4 commentaires:

  1. Bonjour,
    Je suis en train de faire un ''compteur d'élèves'' pour les voyages scolaires (lecteur rfid grove directement relié au hc-06) et votre exemple m'aide beaucoup. Merci pour tout ce travail.
    johan rungette

    RépondreSupprimer
  2. Bonjour,

    Vous dites: "Lors de l'initialisation de la fenêtre, on vérifie si bluetooth est activé sur l'appareil android. Si ce n'est pas le cas, un message d'alerte est présenté à l'utilisateur."

    Comment faite vous pour l'activer:
    - via le menu paramètre " wifi et BT" du phone
    - Ou peut on le faire avec une commande dans APPInventor?

    RépondreSupprimer
    Réponses
    1. Oui, c'est par le menu des paramètres. Je ne pense pas qu'il soit possible de le faire à l'intérieur de l'application.

      Supprimer