Pour beaucoup d’applications, il est utile de déconnecter l’arduino de l’ordinateur pour lui donner de la mobilité. Je veux donc pouvoir utiliser des applications android permettant de commander un montage arduino. Dans cette première partie d’une série (Arduino et bluetooth (hc-05 ou hc-06)) sur le bluetooth et arduino, j’explique comment régler les modules HC-O6 ou HC-05 (commandes AT).
Les modules bluetooth HC-05 et HC-06
Il existe deux sortes de module bluetooth, tous deux compatibles arduino et utilisables sur un breadboard (plaque d’essai en français). On les distingue par le nombre de pattes d’entrées / sorties :
- HC-05 : 6 sorties. Ce module peut être « maître » (il peut proposer à un autre élément bluetooth de s’appairer avec lui) ou « esclave » (il ne peut que recevoir des demandes d’appairage). Ce module fait l’objet d’un autre article car il y a quelques différences pour le régler.
- HC-06 : 4 sorties. Ce module ne peut être qu’esclave. C’est ce module que nous utilisons dans cet article.
Les deux modules peuvent être utilisés en mode COMMANDE, pour les programmer avec des « commandes AT »,ou en mode DATA, pour échanger des données.
Le montage pour HC-06
Noter que TXD et RXD du module BlueTooth HC-06 doivent être « inversés » : TXD arrive au port RX de l’arduino (soit le port #3 dans les sketch qui suivent) et RXD au port TX de l’arduino (#2 ici).
Noter aussi le diviseur de tension pour la liaison RXD à TX (#2) : la tension d’entrée des données doit être de l’ordre de 3.3V et non 5V.
Commandes AT pour module bluetooth HC-06
Par défaut les modules HC-06 sont réglés sur une vitesse de 9600 bauds. C’est donc la vitesse de communication que l’on choisira pour ce programme lorsqu’on l’utilise sur un module qu’on vient d’acheter.
Le sketch est fortement inspiré de l’article « Module bluetooth JY-MCU V1.04 pour Arduino« .
Le sketch complet est disponible ici, sur GitHub. Voici quelques explications sur son fonctionnement.
ATTENTION !!! Pour que ce sketch fonctionne, le module HC-06 ne doit PAS être appairé (sa led doit clignoter).
#include <SoftwareSerial.h> demande à l’arduino d’utiliser la librairie SoftwareSerial.h, nécessaire pour que l’arduino puisse utiliser deux connexions séries distinctes, l’une avec le PC, l’autre avec le module BlueTooth. J’en explique le fonctionnement plus bas.
Dans notre cas, la liaison série entre arduino et module bluetooth s’appelle BTSerie , tandis que celle entre l’ordinateur et l’arduino s’appelle Serial .
On utilise l’ordinateur pour taper les commandes. La console doit être réglée (en bas à droite), à la même vitesse que celle indiquée dans Serial.begin(). Et le réglage à côté doit être sur « Pas de fin de ligne« .
Si je tape AT , l’arduino répond « OK ».
Si je tape AT+NAMEname , l’arduino répond « OKSetname » et le module bluetooth prend le nom « name ».
Enfin si je tape AT+BAUD9 , l’arduino répond « OK230400 », ce qui signifie que le module bluetooth a reçu l’instruction de se régler à une vitesse de 230 400 bauds. 9 peut être remplacé par 1 à 8 ou A, B, C. Les vitesses correspondantes sont :
code | Vitesse (bauds) |
1 | 1 200 |
2 | 2 400 |
3 | 4 800 |
4 | 9 600 |
5 | 19 200 |
6 | 38 400 |
7 | 57 600 |
8 | 115 200 |
Attention, on peut régler le module bluetooth à des vitesses supérieures à 115 200 bauds mais dans ce cas on ne peut pas utiliser un arduino car il ne peut pas dépasser cette vitesse.
Pour plus de détails sur toutes les commandes disponibles, voir ce pdf en ligne.
La boucle de notre sketch contient les éléments suivants :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void loop()
{
char recvChar;
//On lit caractere par caractere sur le BTSerie et on affiche sur le Terminal Serie
if (BTSerie.available()) {
recvChar = BTSerie.read();
Serial.print(recvChar);
}
// Serial.write(blueToothSerial.read());
if (Serial.available()) {
recvChar = Serial.read();
BTSerie.write(recvChar);
}
}
|
la première partie lit le contenu de ce qui est transmis par le module bluetooth via BTSerie.read() puis l’imprime sur la console de l’ordinateur.
La seconde partie lit ce qui est écrit dans la console de l’ordinateur par l’utilisateur et l’envoie au module bluetooth.
Nos commandes AT sont ainsi transmises au module Bluetooth et sa réponse est affichée sur la console arduino de l’ordinateur.
Les commandes sont appliquées lorsque le module est éteint puis rallumé.
Montage pour HC-05
On utilise presque le même montage que ci-dessus, à 3 différences près :
- on n’utilise pas de résistances diviseuses de tension (rien ne prouve que c’était indispensable dans le montage du HC-06)
- Le HC-05 a 6 pattes au lieu de 4, avec en plus STATE, que l’on n’utilise pas, et EN ou KEY, que l’on connecte à la sortie 3.3V de l’arduino.
- On doit appuyer sur le petit bouton poussoir au dessus de la patte EN (ou KEY) lorsqu’on met l’arduino sous tension. Sinon, la led du HC-05 clignote rapidement, ce qui signifie qu’elle cherche à s’appairer et pas du tout à recevoir des commandes AT. Si le démarrage est correctement fait la led du HC-05 clignote lentement, toutes les 2 secondes environ.
Commandes AT pour le module HC-05
Le sketch ci-dessus ne fonctionne pas avec un HC-05, même démarré correctement (la led clignote lentement) pour 3 raisons :
- les commandes AT ne sont pas strictement identiques (noter le ? à la fin de BTSerie.print(“AT+VERSION?”); et l’existence de la ligneBTSerie.print(“\r\n”); juste après ;
- la vitesse par défaut d’un HC-05 est 38 400 bauds et pas 9 600 comme pour le HC-06 ;
- La console série de l’ordinateur d’où l’on envoie les commandes AT ne doit pas être réglée pareil : elle doit être réglée de telle sorte que les fins de ligne soient « les deux, NL et CR », ce qui revient à envoyer \r\n à la fin de chaque commande.
Le sketch qui fonctionne est disponible ici (Sketch Bluetooth HC-05 pour commandes AT (.ino)) ou
Lorsque tout est correct, la console série sur l’ordinateur affiche les éléments suivants :
1
2
3
4
|
Bonjour – Pret pour les commandes AT
Le HC–05 doit clignoter lentement (2 secondes)
–1+VERSION:2.0–20100601
OK
|
Les deux dernières lignes correspondent au retour du module bluetooth provoqué par cette partie du sketch :
1
2
3
|
BTSerie.print(“AT+VERSION?”); //Demande le N° de version
BTSerie.print(“\r\n”); // sur HC-05, terminer par \r\n
Serial.print( BTSerie.read() ); // afficher sur console ce qui est lu sur BT
|
Les commandes AT utilisables avec un HC-05
Des « questions » au module, avec les réponses associées :
- AT : si tout va bien, le module répond OK
AT+NAME? : le nom du module + OK
AT+VERSION? : Sa version + OK
AT+UART? : sa vitesse, et OK (par exemple +UART:38400,0,0 )
AT+ROLE?: Son rôle (1=master /0=slave)
AT+PSWD?: le mot de passe (en général +PSWD:1234 ) lorsque le mot de passe par défaut (1234) a été conservé.
Des ordres au module
Pour plus d’informations, voir ce pdf ici.
- AT+NAME=NoRobo-HC-05 –> OK mais bizarrement AT+NAME? ne dit pas quel est le nom du module
- AT+UART=57600,0,0 règle la vitesse à 57600 bauds et AT+UART? renvoie bien +UART:57600,0,0
Les commandes sont appliquées lorsque le module est éteint puis rallumé.