Étiquettes : , , , ,

Votre carte Arduino peut communiquer avec d’autres appareils(Smartphone, ordinateur ou un autres microcontrôleurs) par liaison Bluetooth en utilisant un module HC-05 (maître/esclave). Cela vous permet de connecter la carte Arduino à un autre système afin d’envoyer et de recevoir des données. La communication par Bluetooth permet, par exemple, de piloter votre robot via une application Smartphone, récupérer les mesures d’un capteur sur votre ordinateur ou encore permettre à deux robots de communiquer entre eux.

Prérequis : Communication Série avec Arduino

Matériel

  • Ordinateur
  • Arduino UNO x2
  • câble USB pour connecter l’Arduino à l’ordinateur x2
  • Module Bluetooth HC-05 ZS-040 x2 (ou 1x HC-06 et 1x HC-05)
  • Câbles Dupont M/F

Présentation du module Bluetooth HC-05

module-bluetooth-hc05 Votre Arduino communique avec le module HC-05

Le module Bluetooth HC-05 présente 6 broches pour permettre d’établir la connexion.

  • VCC broche d’alimentation. Typiquement connectée à la broche 5V de l’Arduino.
  • GND masse. Typiquement connectée à la broche GND de l’Arduino
  • RX broche de réception. Typiquement connecté à la broche de transmission (TX) de l’Arduino
  • TX broche de transmission. Typiquement connecté à la broche de réception (RX) de l’Arduino
  • State retourne 1 lorsque le module est connecté
  • Key ou EN doit être alimentée pour entrer dans le mode de configuration et ne doit pas être connecté pour être en mode communication.

La particularité du module Bluetooth HC-05 est qu’il peut être utilisé en mode esclave (dans ce cas il est équivalent à un module HC-06 et s’utilise de la même manière) ou en mode maître, ce qui veut dire qu’il peut de manière autonome se connecté à un autre module Bluetooth (HC-06, HC-05 en mode esclave ou autre) sans action extérieure.

Schéma de câblage pour la configuration

arduino-bluetooth-hc05_bb Votre Arduino communique avec le module HC-05


ATTENTION :

  • Nous utilisons les broches 2 et 3 pour la communication série avec Arduino UNO. Selon la carte que vous utilisez, ces broches peuvent ne pas être compatibles avec la communication SoftwareSerial. Notamment, pour les carte Mega, Micro et leonardo. Vérifiez la documentation.
  • La logique du module Bluetooth étant en 3,3V, il est conseillé d’utiliser un pont diviseur de tension afin de réduire la tension de 5V de l’Arduino (résistance 1k entre pin3 et Rx, et 2k Ohm entre Rx et GND).
arduino-bluetooth-hc05-voltage-div_bb Votre Arduino communique avec le module HC-05

Configuration du module HC-05

La configuration du module Bluetooth peut être intéressante pour vérifier le bon fonctionnement du module et pour modifier ses paramètres notamment lorsque vous voulez utiliser le module en mode maître. Le module doit être alimenté mais non-appairé et la broche Key/EN doit être à alimentée à 3V à l’allumage du module. Lorsque le module est en mode configuration, la LED s’allume deux secondes toutes les deux secondes.

Ouvrez le moniteur série de l’Arduino et assurez vous que l’option de fin de ligne affiche « Nouvelle ligne »  et que le baudrate est réglé à 9600.

Notez que le module Bluetooth HC-05 entre dans le mode AT avec une vitesse de communication (baudrate) de 38400 bps.

Code de configuration

Pour gérer la communication avec le module HC-05, nous utilisons la librairie SoftwareSerial.h qui permet de créer un port série autre que celui utilsé par le port USB. Le code suivant permet de modifier les paramètres du module HC-05 (nom, le code PIN, la vitesse de communication(baudrate), etc.) et de trouver des informations comme le numéro de version du firmware.

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define baudrate 38400

String msg;

SoftwareSerial hc05(rxPin ,txPin);

void setup(){
  pinMode(rxPin,INPUT);
  pinMode(txPin,OUTPUT);
  
  Serial.begin(9600);
  Serial.println("ENTER AT Commands:");
  hc05.begin(baudrate);
}

void loop(){
    readSerialPort();
    if(msg!="") hc05.println(msg);
    
    if (hc05.available()>0){
      Serial.write(hc05.read());
    }
}

void readSerialPort(){
  msg="";
 while (Serial.available()) {
   delay(10);  
   if (Serial.available() >0) {
     char c = Serial.read();  //gets one byte from serial buffer
     msg += c; //makes the string readString
   }
 }
}

Pour une bonne communication, assurez-vous de sélectionner le bon baudrate dans le moniteur série ainsi que « nouvelle ligne »(NL) dans les paramètres de communication.

Commandes de configuration

Autre le fait qu’il puisse être utilisé en mode maître, le module Bluetooth HC-05 vous permet aussi de connaître ses paramètres enregistrés.

en général, si vous tapez dans le moniteur série AT+<command>?, vous obtenez la valeur enregistré dans le module (ex: AT+PSWD? pour connaitre le code PIN du module). Si vous entrez la ligne AT+<command>=<Param>, vous définissez la valeur du module (ex: AT+PWSD=0000 pour modifier le code PIN en 0000).

Voici certaines commandes AT de base à connaître:

  • Pour tester la communication, tapez AT dans le monitor série de l’IDE Arduino. Si tout va bien, le module doit répondre OK.
  • Pour modifier le nom du module, tapez AT+NAME=<Param> module. Le module devrait répondre OK. (Ex: Pour changer le nom du module en BTM1 tapez AT+NAME=BTM1)
  • Pour modifier le code PIN du module, tapez AT+PSWD=<Param> . Le module devrait répondre OK. (Ex: si vous voulez changer le PIN en 0000 tapez AT+PSWD=0000)
  • AT+ROLE=<Param> pour modifier le role du module esclave ou maître (Ex: pour passer le module en maître AT+ROLE=1).
  • Pour modifier la vitesse de communication du module (seulement si nécessaire), tapez AT+UART=<Param1>,<Param2>,<Param3> avec Param1, 2 et 3 les paramètres de communication série: le baud rate, le bit d’arrêt et le bit de parité  respectivement. (Par défaut, 9600,0,0. Ex: si vous voulez changer le baudrate en 115200 tapez AT+UART=115200,0,0).

Ils existent d’autres commandes AT du module Bluetooth HC-05 que vous pouvez retrouver en suivant le lien.

ATTENTION: Différentes versions du module HC-05 existent et la liste des commandes AT et la procédure peuvent varier. Vérifiez bien le numéro de série écrit sur le module et la version du firmware en tapant la commande AT+VERSION?. Dans notre cas le module HC-05 est libellé ZS-040 et la version est 2.0-20100601.

N.B.: Si ça ne fonctionne pas vérifiez le branchement, la conductivité des câbles et la vitesse de communication (baudrate).

N’hésitez pas à laisser un commentaire si vous rencontrez des difficultés pour configurer votre module Bluetooth HC-05.

Configuration du module esclave

Pour le mode esclave, vous pouvez changer le nom en tapant AT+NAME=HC05-Slave et choisir les paramètres de communication et le mot de passe que vous voulez. Il faudra vous assurer qu’ils sont les mêmes que pour le module maître.

  • AT retourne OK
  • AT+NAME=HC05-Slave
  • AT+UART=9600,0,0
  • AT+ROLE=0
  • Entrez AT+ADDR pour obtenir l’adresse du module esclave (dans notre cas, +ADDR:98d3:32:21450e)

Pour le module esclave, vous pouvez aussi utiliser un module HC-06. Pour trouver l’adresse du module HC-06, il faudra utiliser un ordinateur ou un smartphone.

Configuration du module maître

Pour le mode maître, vous devez modifier le role du module et choisir les même paramètres de communication que pour le module esclave

  • AT retourne OK
  • AT+NAME=HC05-Master
  • AT+UART=9600,0,0
  • AT+ROLE=1
  • Vous devez enregistrer l’adresse du module esclave pour que le module maître puisse s’appairer: AT+BIND=98d3,32,21450e (remplacez les deux points « : » par des virgules « , »)

Schéma de câblage pour la communication

En mode communication la broche Key/EN ne doit pas être alimentée.

arduino-bluetooth-hc05-communication Votre Arduino communique avec le module HC-05

Code de communication

Lorsque les modules sont configurés, vous pouvez débrancher la pin Key ou EN, charger les codes suivant dans deux cartes Arduino et rallumer vos modules HC-05 pour entrer en mode communication.

Comme pour le module HC-06, nous utilisons la librairie SoftwareSerial.h dont voici quelques fonctions:

  • SoftwareSerial hc05(Rx,Tx) pour définir le port série et les broches servant à la communication
  • hc05.begin() pour définir la vitesse de communication
  • hc05.available() pour tester si des données sont disponible dans le buffer du port série
  • hc05.read() pour lire les données du port série, un octet à la fois
  • hc05.print() pour envoyer une chaine de caractères en ASCII
  • hc05.write() pour envoyer des données, un octet à la fois.
  • hc05.flush() pour vider les données du buffer.

Code Maître

#include <SoftwareSerial.h>

SoftwareSerial ArduinoSlave(2,3);
String answer;
String msg;

void setup(){

  Serial.begin(9600);
  Serial.println("ENTER Commands:");
  ArduinoSlave.begin(9600);
                
}

void loop(){
  //Read command from monitor
  readSerialPort();
  
  //Read answer from slave
   while (ArduinoSlave.available()) {
   delay(10);  
   if (ArduinoSlave.available() >0) {
     char c = ArduinoSlave.read();  //gets one byte from serial buffer
     answer += c; //makes the string readString
   }
 }
  //Send data to slave
  if(msg!=""){
    Serial.print("Master sent : ");
    Serial.println(msg);
    ArduinoSlave.print(msg);
    msg="";
  }
  //Send answer to monitor
  if(answer!=""){
    Serial.print("Slave recieved : ");
    Serial.println(answer);
    answer="";
  }
}

void readSerialPort(){
 while (Serial.available()) {
   delay(10);  
   if (Serial.available() >0) {
     char c = Serial.read();  //gets one byte from serial buffer
     msg += c; //makes the string readString
   }
 }
 Serial.flush();
}

Code Esclave

#include <SoftwareSerial.h>

SoftwareSerial ArduinoMaster(2,3);
String msg;

void setup(){
  Serial.begin(9600);
  ArduinoMaster.begin(9600);    
}

void loop(){
  readSerialPort();
  
  // Send answer to master
  if(msg!=""){
    Serial.print("Master sent : " );
    Serial.println(msg);
    ArduinoMaster.print(msg);
    msg=""; 
  }
}

void readSerialPort(){
 while (ArduinoMaster.available()) {
   delay(10); 
   if (ArduinoMaster.available() >0) {
     char c = ArduinoMaster.read();  //gets one byte from serial buffer
     msg += c; //makes the string readString
   }
 }
 ArduinoMaster.flush();
}

Si vous ouvrez les deux moniteurs série correspondant et si vous tapez une commande dans le moniteur de la carte maître, vous pouvez voir le résultat suivant: la carte maître envoie une chaîne de caractères que la carte esclave reçoit et renvoie. On vérifie ainsi que la communication se passe bien dans les deux sens.

master-and-slave-connected-hc05 Votre Arduino communique avec le module HC-05

Si vous avez des difficultés à configurer ou à communiquer avec votre module Bluetooth HC-05, n’hésitez pas à nous contacter ou à laisser un commentaire.

Application

Et vous, que feriez-vous si votre carte Arduino pouvait communiquer avec d’autres systèmes? N’hésitez pas à nous répondre en commentaire.

Source

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie