Skip to main content

Le module Bluetooth HC-05

Test et configuration du module

  • Suivre les instructions pour le module HC-05, qui peut être configuré en module maître ou esclave. Le module HC-06 lui ne peut être que esclave, mais il est plus simple à configurer.

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 opposée.
    • suivre les instructions pour le module HC05, qui peut être maître ou esclave

    Si on prend les pinsPins RX (Digital 0) et TX (Digital 1) de l'arduino pour connecter RXD et TXD du HC-05, çacela rentre en conflit avec la connexion USB entre l'arduino et le PC.

  • Donc on prend desles pinsPins Digital 2 et 3 et on utilise la bibliothèque SoftwareSerial qui comprend la fonction BTserie

    SoftwareSerial
//Test et Configuration du module Bluetooth HC-05

//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); 

char caractereTexte;
String phraseTexte;

void setup()

{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);  
Serial.println("En mode communication USB - 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
if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}

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 la console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

void loop(){
  //On lit ce qui est envoyé à l'Arduino depuis la console via la liaison Serial
  readSerialPort();
  //Et on l'Arduino l'envoie au HC-05 via la liaison SoftwareSerial
  if(phraseTexte!="") BTSerie.println(phraseTexte);
  //L'Arduino lit ce que le HC-05 envoie via la liaison SoftwareSerial et l'envoie vers la console
  if (BTSerie.available()>0){
    Serial.write(BTSerie.read());
  }
}
void readSerialPort(){
  phraseTexte="";
  while (Serial.available()) {
    delay(10);
    if (Serial.available() >0) {
      caractereTexte = Serial.read(); 	//le port série envoie des caractères de texte octet par octet (byte from serial buffer)
      phraseTexte += caractereTexte; //construction d'une phrase en concaténant les caractères reçus
    }
 }
}

Pilotage d'un moteur CC à partir d'un smartphone

image.png

    //Voiture ARDUINOmodélisée radiocommandée (RC CARcar) WITHavec 2deux REARmoteurs WHEELSCC MOTORSà ANDl'arrière SG90et SERVOun STEERINGservomoteur //charde caractereRecu;direction
    
    #include <Servo.h>
    Servo myservo;  // create servo object to control a servo 
    
    //Le Laport connexionsérie hardwarematériel seriede l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisée pour la liasonliaison USB-ArduinoArduino-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 RxDRxDpin 2    //Pin Digital 2 pour arduino RXRx (pin0=serial) 
    #define TxDTxDpin 3    //Pin Digital 3 pour arduino TXTx (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(RxD,TxD)RxDpin,TxDpin); 
    
    char caractereTexte;
    String phraseTexte;
    
    void setup()
    
    {
    Serial.begin(9600); //Vitesse (baudRate) pour la liasonliaison USB-Arduino //57600);    //115200 si on veutArduino-USB
    delay(500);  
    
    //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
    if (baudrate==38400) {
      Serial.println("BonjourEn mode communication USB - Pret pour les commandes AT");
      Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
    //}
    Configurationelse duif bluetooth(baudrate==9600){
      pinMode(RxD,Serial.println("En INPUT)mode smartphone - Pret pour être appairé");
      //Serial.println("Le ConfigurationHC-05 doit clignoter rapidement avant d'être appairé");
    }
    else{
      Serial.println("La vitesse de la pin RxDcommunication (receive)baudrate) ena entréeété pinMode(TxD, OUTPUT)personnalisée");
    // 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-ArduinoArduino-USB et on affiche sur la liaison Arduino-HC05
      if (Serial.available()) {  
        caractereRecucaractereTexte = Serial.read();  
        BTSerie.write(caractereRecu)caractereTexte);  
        // 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-ArduinoArduino-USB
      if (BTSerie.available()) {  
        caractereRecucaractereTexte = BTSerie.read();  
        Serial.print(caractereRecu)caractereTexte);  
      // }  
    
    if(caractereRecucaractereTexte == '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(caractereRecucaractereTexte == '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(caractereRecucaractereTexte == '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(caractereRecucaractereTexte == '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(caractereRecucaractereTexte == '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)char) est envoyé par le téléphone au HC-05 puis à l'Arduino via la liaison série Software bluetoothArduino-HC05 qui est configurée par défaut en baudrate 9600 (vérifiable en envoyant la commande BTSerie.print("AT+UART?"); au HC-05)
    • Quand on relâche le boutonbouton, le caractère S est envoyé

    L'application suivante testée ne semble pas fonctionner avec les Android récents :

    Sources

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