Bluetooth & HC-05

comme tout equipement a la pointe de la technologie, Arduino peut communiquer via bluetooth. il existe differents modules compatibles, ici nous allons voir l’utilisation du module HC-05. il est possible d’utiliser des modules HC-06 mais celui ci ne fonctionne qu’en mode esclave alors que le HC-05 peut etre utilisé en maitre et/ou en esclave , il est donc plus polyvalent . derniere possibilité comparable , l’utilisation d’un Module HM-10. ce module est compatible BT V4.0 et BT LE ce qui n’est pas le cas du HC-05 compatible uniquement BT V2.0

Le module Bluetooth HC-05 présente 6 broches :

  • 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. connecté à la broche de transmission (TX) de l’Arduino
  • TX broche de transmission. 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 doit être déconnecté pour être en mode communication.

NOTA: dans les montage arduino , de façon a eviter de bloquer le moniteur serie de L’IDE arduino , au lieu d’utiliser les broches standard Tx et Rx de l’ARDUINO (broche D0 et D1), on va utiliser des borches compatibles du mode Tx et Rx , en general la broche D2 et la broche D3 et utiliser la bibliothèque “SoftwareSerial.h”.

SCHEMA DE CABLAGE POUR LE MODE CONFIGURATION

La configuration du module Bluetooth est utile pour modifier ses paramètres . pour passer le HC-05 en mode configuration , il faut connecter la broche KEY/EN au 3,3 V de l’arduino. et relier respectivement les broches GND et 5V du module a celles de l’arduino. puis ensuite le Tx du module au Rx de l’Uno (broche D2) et le RX du module au Tx arduino (broche D3) . Lorsque le module est en mode configuration, la LED s’allume deux secondes toutes les deux secondes.

la configuration du HC-05 va se faire au moyen de commandes AT . 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. c’est le moniteur série qui va servir d’interface de configuration.

pour cela saisir le petit bout de programme suivant qui va permettre de saisir des commandes AT dans le moniteur serie et de visualiser le resultat en retour . le programme configure la vitesse de transmission. si vous rencontrez des problemes de connexion, verifier le cablage et la vitesse de communication.

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
String msg;
SoftwareSerial hc05(rxPin ,txPin);

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

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
   }
 }
}

Commandes de configuration

le module Bluetooth HC-05 permet de connaître ses paramètres enregistrés:

taper dans le moniteur série “AT+<command>?“, vous obtenez la valeur enregistré dans le module , par exemple avec ” AT+PSWD? ” vous aurez le code PIN du module. suivant les modules , le “?” n’est pas nécessaire. sur certains module “AT+NAME?” ne retourne rien . mais la commande de parametrage du nom (voir ci dessous ) fonctionne.

Si vous tapez ” AT+<command>=<Param>” , vous définissez la valeur du module . par exemple ” AT+PWSD=1234 ” pour fixer le code PIN en 1234.

Voici les commandes AT principales:

  • Pour tester la communication: tapez AT , le module doit répondre OK si tout fonctionne
  • Pour modifier le nom du module, tapez AT+NAME=<Param> . exemple: Pour changer le nom du module en “HC5V01” tapez “AT+NAME=HC5V01
  • Pour modifier le code PIN du module, AT+PSWD=<Param> .
  • pour modifier le role du module (esclave ou maître):AT+ROLE=<Param>
  • Pour modifier la vitesse de communication AT+UART=<Param1>,<Param2>,<Param3> avec Param1, 2 et 3 = paramètres de communication série (baud rate, bit d’arrêt et bit de parité) 

dans le fichier ci dessous , detail des commandes AT du HC-05

Configuration du module en mode esclave

ci dessous les paramètres d’une configuration esclave ( idem pour un HC-06)

  • AT retourne OK
  • AT+NAME=HC05-Esclave
  • AT+UART=9600,0,0
  • AT+ROLE=0
  • AT+ADDR pour obtenir l’adresse du module esclave

Configuration du module maître

ci dessous les paramètres d’une configuration maitre

  • AT retourne OK
  • AT+NAME=HC05-Maitre
  • 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: exemple “AT+BIND=98d3,32,21450e “

SCHEMA DE CABLAGE POUR LE MODE COMMUNICATION

pas de gros changement par rapport au mode configuration, on débranche juste le câble entre Key/En et le 3,3V.

EXEMPLE d’application: communication entre 2 ARDUINO UNO

pour cet exemple, il faudra 2 ARDUINO UNO avec chacun leur module HC-05 connectés a 2 PC differents par exemple ,l’un configuré en mode maitre et l’autre configuré en mode esclave. puis telecharger dans chacun les 2 programmes ci dessous et ensuite ouvrir le moniteur serie sur chacun des PC puis taper du texte sur le monituer serie du maitre et voir l’affichage sur l’esclave.

Programme du maitre

#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(){
   readSerialPort();  
   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
   }
 }
  if(msg!=""){
    Serial.print("Master sent : ");
    Serial.println(msg);
    ArduinoSlave.print(msg);
    msg="";
  }
  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();

Programme de l’esclave

#include <SoftwareSerial.h>
SoftwareSerial ArduinoMaster(2,3);
String msg;

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

void loop(){
  readSerialPort();  
  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();
}

pour aller plus loin voir la rubrique Bluetooth et smartphone, qui développe la comm entre un smartphone et ARDUINO via l’appli REMOTE XY .