Skip to main content

Le module Bluetooth HC-05

image.png

Test et configuration du module

https://www.aranacorp.com/fr/votre-arduino-communique-avec-le-module-hc-05/

  • On peut communiquer avec le module bluetooth HC-05 via la liaison série de l'Arduino Nano
  • Se renseigner sur ce qu'est une liaison série, par ex. ici : https://arduino.blaisepascal.fr/bibliotheque-serial/
  • Réaliser le câblage entre l'Arduino Nano et le module bluetooth HC-05
  • Bien vérifier que le Pin qui Reçoit les données sur l'Arduino (RxDpin) soit connecté au Pin du HC-05 qui Tansmet (TxDpin). Et vice-versa, donc chaque câble transmet les données dans une direction
//Test et Configuration du module Bluetooth HC-05

char caractereTexte;
//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
#define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
// #define baudrate 9600 //Vitesse pour la liaion Arduino-HC05 en mode utilisation smartphone
SoftwareSerial BTSerie(RxDpin,TxDpin); 

void setup()

{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);  
Serial.println("Bonjour - Pret pour les commandes AT");  
Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");

//Configuration de la liaison SoftwareSerial avec le HC-05  
pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate);  //Vitesse pour la liaion Arduino-HC05

delay(500);  
// Commandes AT pour le HC-05
// BTSerie.print("AT+NAME?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+NAME=RCcar-HC-05-1");  //Définir le nom du module.
BTSerie.print("AT+VERSION?");  //Demande le N° de version. Noter le ?
// BTSerie.print("AT+UART?");  //Demande la vitesse série (baudrate). Noter le ?
// BTSerie.print("AT+UART=57600,0,0");  //Définir la vitesse série (baudrate).
// BTSerie.print("AT+ROLE?");  //Demande le mode du module, maitre ou esclave. Noter le ?
// BTSerie.print("AT+PSWD?");  //Demande le mot-de-passe du module. Noter le ?
// La console série de l'ordinateur d'où l'on envoie les commandes AT 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.
BTSerie.print("\r\n");     // sur HC-05, toutes les commandes doivent se terminer par \r\n
// afficher ce que le module bluetooth répond
  Serial.print( BTSerie.read() );     // afficher sur console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

  
  #include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define baudrate 38400
String msg;
SoftwareSerial BTSerie(RxDpin ,TxDpin);
void setup(){
 	pinMode(RxDpin,INPUT);
 	pinMode(TxDpin,OUTPUT);
 	
 	Serial.begin(9600);
 	Serial.println("ENTER AT Commands:");
 	BTSerie.begin(baudrate);
}
void loop(){
 			readSerialPort();
 			if(msg!="") BTSerie.println(msg);
 			
 			if (BTSerie.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
 		}
 }
}

image.png

 

  • suivre les instructions pour le module HC05, qui peut être maître ou esclave

Si on prend les pins RX et TX de l'arduino pour connecter RXD et TXD du HC-05, ça rentre en conflit avec la connexion USB entre l'arduino et le PC.

Donc on prend des pins Digital 2 et 3 et on utilise la bibliothèque SoftwareSerial qui comprend la fonction BTserie

SoftwareSerial

// ARDUINO RC CAR WITH 2 REAR WHEELS MOTORS AND SG90 SERVO STEERING 

//char caractereRecu;
#include <Servo.h>
Servo myservo;  // create servo object to control a servo 
// La connexion hardware serie (Pins 0/RX et 1/TX) est utilisée pour la liason USB-Arduino
// On utilise donc une liaison
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxD 2    //Pin 2 pour arduino RX (pin0=serial) 
#define TxD 3    //Pin 3 pour arduino TX (pin1)
SoftwareSerial BTSerie(RxD,TxD); 

void setup()

{
Serial.begin(9600); //Vitesse pour la liason USB-Arduino //57600);    //115200 si on veut
delay(500);  
Serial.println("Bonjour - Pret pour les commandes AT");  
Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
// Configuration du bluetooth  
pinMode(RxD, INPUT);  // Configuration de la pin RxD (receive) en entrée
pinMode(TxD, OUTPUT);  // Configuration de la pin TxD (transmit) en sortie
//Pour la communication avec le module HC05 à travers le SoftwareSerial depuis l'arduino
//On appuie sur le bouton à côté de la PIN EN au démarrage de l'Arduino
// BTSerie.begin(38400); //Vitesse pour la liaion Arduino-HC05 Bluetooth //57600 / 38400
//Pour la communication avec le module HC05 à travers le bluetooth depuis une appli de smartphone
//On appaire le module depuis l'appli avec le mot-de-passe par défaut : 1234
BTSerie.begin(9600); //Vitesse pour la liaion smartphone-HC05 Bluetooth //57600 / 38400
delay(500);  
// Pour le HC05
// BTSerie.print("AT+NAME?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+NAME=RCcar-HC-05");  //Définir le nom du module.
BTSerie.print("AT+VERSION?");  //Demande le N° de version. Noter le ?
// BTSerie.print("AT+UART?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+UART=57600,0,0");  //Définir le nom du module.
// BTSerie.print("AT+ROLE?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+PSWD?");  //Demande le nom du module. Noter le ?
// La console série de l'ordinateur d'où l'on envoie les commandes AT 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.
BTSerie.print("\r\n");     // sur HC-05, toutes les commandes doivent se terminer par \r\n
// afficher ce que le module bluetooth répond
  Serial.print( BTSerie.read() );     // afficher sur console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
pinMode(5,OUTPUT);   //SG90 steering motor
myservo.attach(5);  // attaches the servo on pin 5 to the servo object
// Serial.begin(9600);

}
 
void loop() {
  char caractereRecu;  
  // Serial.write(blueToothSerial.read());  


  //On lit caractere par caractere sur la liaion USB-Arduino et on affiche sur la liaison Arduino-HC05
  if (Serial.available()) {  
    caractereRecu = Serial.read();  
    BTSerie.write(caractereRecu);  
    // Serial.println("Caractere envoye vers bluetooth : ");  
    // Serial.println(caractereRecu);  
  }  
  //On lit caractere par caractere sur la liaion Arduino-HC05 et on affiche sur la liaison USB-Arduino  
  if (BTSerie.available()) {  
    caractereRecu = BTSerie.read();  
    Serial.print(caractereRecu);  
  // }  

if(caractereRecu == 'F'){            //move forward(all motors rotate in forward direction)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
  digitalWrite(11,HIGH);
  // myservo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereRecu == 'B'){      //move reverse (all motors rotate in reverse direction)
  digitalWrite(13,LOW);
  digitalWrite(11,LOW);
  digitalWrite(12,HIGH);
  digitalWrite(10,HIGH);
  // myservo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereRecu == 'L'){      //turn right (left side motors rotate in forward direction, right side motors doesn'caractereRecu rotate)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(13,LOW);
  digitalWrite(11,HIGH);
  // myservo.write(60);                  // sets the servo position according to the scaled value
}
 
else if(caractereRecu == 'R'){      //turn left (right side motors rotate in forward direction, left side motors doesn'caractereRecu rotate)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(13,HIGH);
  // myservo.write(120);                  // sets the servo position according to the scaled value
}

 
else if(caractereRecu == 'S'){      //STOP (all motors stop)
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
  // myservo.write(90); 
}
delay(100);
  }
}

Application bluetooth

Android :

  • F pour Forward : Avancer
  • B pour Backward : Reculer
  • R pour Right : Aller à droite
  • L pour Left : Aller à gauche
  • S pour Stop : Arrêter

 

  • Quand on appuie sur la flèche du haut, le caractère F (objet char) est envoyé par le téléphone via la liaison série Software bluetooth
  • Quand on relâche le bouton le caractère S est envoyé

https://play.google.com/store/apps/details?id=com.himanshu.ArduinoAutomation&hl=en_GB

 

Sources

https://knowledge.parcours-performance.com/arduino-bluetooth-hc-05-hc-06/