Accueil > ARDUINO > Android > Android & Arduino : envoyer des informations vers un appareil Android (...)

Android & Arduino : envoyer des informations vers un appareil Android (via Bluetooth)

dimanche 4 décembre 2016, par thebault

Un module bluetooth HC05 ajouté à la carte Arduino permet d’ajouter des commandes wireless assez facilement pour les cartes ARDUINO. Le module HC05 utilise le profil spp de type HC05 (ou HC06).
Pour dialoguer avec ces modules depuis arduino, on utilise la liaison série.
Le code d’appairage par défaut de ces modules est "1234".
Dans cet exemple, lors de la communication Bluetooth, l’appareil Android aura le rôle "Master" et le module HC05 aura le rôle "Slave"

JPEG - 57.6 ko

Matériel

- une carte arduino UNO ou LEONARDO,
- un module bluetooth HC05 (soudé sur support),
- une plaque d’essai, 2 résistances (1K et 2,2k) et des câbles,
- un appareil avec ANDROID et accéléromètre

Branchements

Le module HC05 fonctionne en 3,3V (cf datasheet). On trouve pas mal de montage sur internet où il n’y a pas d’adaptation de niveau entre les signaux venant de la carte Arduino et le module HC05. Cependant, je préfère adapter les niveaux pour ne pas "stresser" le module :
- avec un pont diviseur de tension (1K, 2,2K) pour la transmission Tx -> Rx de l’Arduino vers le module HC05,
- inutile de "remonter" les niveaux de 3,3V à 5V pour la transmission Tx -> Rx du module HC05 car ces derniers fournissent une tension suffisante (une entrée du côté arduino est vue comme un niveau 1 si le signal est > à 0,6xVcc ; c’est à dire 3V)

JPEG - 60.7 ko
JPEG - 127.1 ko

Le programme Arduino

Avec une carte Leonardo, le port Serie noté Rx, Tx sur les broches 0 et 1 est appelé Serial1.

Dans cet exemple, on transmet la chaine de caractères "10,20,45" sur la liaison série Serial1 (sur laquelle est connecté le module bluetooth HC05) toutes les secondes (=1000 ms).

Dans les cas pratiques, on transmettra plutôt une trame qui vienne de différents capteurs avec des valeurs qui varient mais j’ai simplifié l’exemple avec une trame fixe.

Remarque : si l’on ne veut transmettre qu’une seule valeur, il suffit d’adapter le programme suivant

  1. int a = 10;
  2. int b = 20;
  3. int c = 45;
  4.  
  5. void setup() {
  6. // put your setup code here, to run once:
  7. Serial1.begin(9600);
  8. }
  9.  
  10. void loop() {
  11. Serial1.print(a);
  12. Serial1.print(",");
  13. Serial1.print(b);
  14. Serial1.print(",");
  15. Serial1.print(c);
  16. delay(1000);
  17. }

Télécharger

L’application Android

Ces applications sont développées avec APP INVENTOR 2

1ère application : récupérer la trame

On va récupérer toutes les secondes les données transmises par bluetooth depuis la carte Arduino vers l’appareil Android. Pour cela, on utilise un timer nommé ’clock1’ qui permettra de récupérer les données toutes les 1000 ms, soit 1 s.

Le choix de la durée : dans l’exemple, on a 8 caractères à transmettre à une vitesse de 9600 bauds. Or, 8 caractères = 8 x 8 bit (en code ASCII, chaque caractère est codé sur 8 bit).

Par conséquent, la durée de la trame sera de 8x8/9600 s =6,67 ms. Même si il y a une augmentation du fait de la transmission et donc du codage par bluetooth, avec 1s on est largement au dessus de la durée de la trame.

JPEG - 308 ko
JPEG - 174.3 ko

L’élément important à comprendre est le suivant :

JPEG - 24.5 ko

Cela signifie que :

  • on appelle le client bluetooth et on lui demande de récupérer la trame de ’texte’ (=chaine de caractères) reçue de longueur ’le nombre d’octets reçus’ (sachant qu’avec le code ASCII utilisé 1 caractère = 1 octet),
  • on affecte cette chaine de caractères à la variable globale ’trame’

Amélioration du programme  : on voit qu’il y a un message d’erreur concernant le bluetooth tant que l’on est pas connecté au module HC05.

On va modifier le programme pour récupérer la trame SI
"on est connecté" ET "il y a des données reçues"

Cela donne :

JPEG - 56.8 ko

2ème application : séparer les données reçues

JPEG - 288.6 ko
JPEG - 267.9 ko

Pour bien comprendre le processus d’analyse ("parsing") des données :

  • on récupère dans la variable ’trame’ ce qui arrive sur la liaison bluetooth. On a donc dans notre cas du texte (c’est à dire une chaîne de caractères) qui est : trame="10,20,45"
  • on sépare (split) cette chaine aux virgules (caractère ",") et on place les résultats dans une liste, liste=(10 20 45)
  • on affecte l’élément 1 de la liste à la variable globale var1 donc : var1=10
  • on affecte l’élément 2 de la liste à la variable globale var2 donc : var2=20
  • on affecte l’élément 3 de la liste à la variable globale var3 donc : var3=45
SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL