Site icon AranaCorp

Votre Arduino communique avec le module HC-05

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

Présentation du module Bluetooth HC-05

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

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


ATTENTION :

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:

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.

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

Schéma de câblage pour la communication

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

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:

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.

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

Quitter la version mobile