Le module Bluetooth HC-05
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 opposée.
-
- 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 fonctionBTserie
SoftwareSerial - suivre les instructions pour le module HC05, qui peut être maître ou esclave
//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);
char caractereTexte;
String phraseTexte;
void setup()
{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);
Serial.println("BonjourEn 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
#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(){
//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(msg!phraseTexte!="") BTSerie.println(msg)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(hc05.BTSerie.read());
}
}
void readSerialPort(){
msg=phraseTexte="";
while (Serial.available()) {
delay(10);
if (Serial.available() >0) {
char ccaractereTexte = Serial.read(); //getsle oneport série envoie des caractères de texte octet par octet (byte from serial bufferbuffer)
msgphraseTexte += c;caractereTexte; //makesconstruction thed'une stringphrase readStringen concaténant les caractères reçus
}
}
}
Pilotage d'un moteur CC à partir d'un smartphone
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
// 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/