L’Arduino peut communiquer avec d’autres appareils via Bluetooth en utilisant le module HC-05 (maître/esclave). Il permet à l’Arduino de se connecter et d’échanger des données avec d’autres appareils tels que Smartphone, ordinateur ou autres microcontrôleurs.La communication Bluetooth peut être utilisée pour contrôler un robot à distance, Afficher et stocker des données sur votre ordinateur ou sur votre smartphone, par exemple.
Prérequis : Arduino Communication série
Matériel
- Ordinateur
- Arduino UNO x2
- Câble USB
- Module Bluetooth HC-05 ZS-040 x2 (ou 1x HC-.05 et 1x HC-06)
- Câbles Dupont M/F
Vue d’ensemble du module HC-05
Le module Bluetooth HC-05 possède 6 broches, 2 pour l’alimentation, 2 pour établir la connexion, 1 pour entrer en mode configuration et l’autre pour connaître l’état de la connexion.
- VCC alimentation. Typiquement accroché à la broche 5V de l’Arduino.
- GND masse. Typiquement accroché à la broche GND de l’Arduino
- RX broche de réception. Typiquement accroché à la broche de transmission (TX) de l’Arduino
- TX broche de transmission. Typiquement accrochée à la broche de réception (RX) de l’Arduino
- L’état est HAUT lorsque le module est connecté
- Key ou EN doit être mis à HAUT (3,3V) pour entrer en mode configuration et doit être déconnecté pour entrer en mode communication.
La particularité du HC-05 est qu’il peut être utilisé comme un module esclave (équivalent au HC-06) et comme un module maître, ce qui signifie qu’il peut s’appairer seul à un autre dispositif.
Schémas pour la configuration
Attention :
- Nous utilisons les broches 2 et 3 de l’Arduino Uno. Selon le microcontrôleur, certaines broches peuvent ne pas supporter la communication série. En particulier, Arduino Mega, Micro et Leonardo. Vérifiez la documentation.
- Comme le module Bluetooth utilise une logique de 3,3V, il est conseillé d’ajouter un diviseur de tension pour réduire la tension de 5V de l’Arduino. (résistance 1k entre la broche3 et Rx ; 2k Ohm entre Rx et GND).
Configuration du module HC-05
Configurer le module HC-05 peut être intéressant pour vérifier qu’il fonctionne, qu’il est branché correctement et pour modifier ses paramètres tels que son nom (utile lorsque vous utilisez plusieurs modules), son code PIN et sa vitesse de communication (baudrate). Surtout si vous souhaitez l’utiliser comme module maître. Pour permettre la configuration, le module HC-05 doit être alimenté mais pas apparié et la broche KEY/EN doit être placée sur HIGH avant que le module ne soit allumé. En mode configuration, la LED clignotera deux secondes toutes les deux secondes.
Ouvrir le moniteur série et sélectionner l’option de fin de ligne « Nouvelle ligne » et une vitesse de transmission de 9600.
Notez que le HC-05 entre en mode configuration avec une vitesse de transmission de 38400bps.
Code de configuration
Le code suivant vous permet de modifier et de vérifier les paramètres en utilisant le moniteur série et les commandes AT.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String 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 } }}
Commandes AT
Par rapport au module HC-06, le HC-05 peut être utilisé comme module maître et vous pouvez également vérifier les paramètres sauvegardés à l’aide des commandes AT.
En général, taper la commande AT+<command> ? demandera le paramètre sauvegardé (ex : AT+PSWD ? affichera le code PIN du module). Si vous entrez AT+<command>=<Param>, vous pouvez définir la valeur du paramètre(ex : AT+PWSD=0000 pour modifier le code PIN à 0000).
Voici quelques-unes des commandes AT:
- Pour tester la communication, entrez AT dans le moniteur série de l’IDE Arduino. Si tout est configuré correctement, il devrait afficher OK.
- Pour modifier le nom du module, entrez AT+NAME=<Param>. Le module devrait répondre OK (Défaut HC-05, Ex : Pour changer le nom en BTM1 entrez AT+NAME=BTM1).
- Pour modifier le code PIN, entrez AT+PSWD=<Param> . Le module doit répondre OK(Défaut 1234 Ex : Pour changer le code PIN en 0000 entrez AT+PSWD=0000).
- AT+ROLE=<Param> pour midy le rôle du module comme esclave ou maître (Défaut 0, Ex : pour changer le rôle comme maître entrez AT+ROLE=1, comme esclave entrez AT+ROLE=0).
- Pour modifier le débit en bauds, entrez AT+UART=<Param1>,<Param2>,<Param3> avec Param1, 2 et 3 paramètres de communication série : débit en bauds, bit d’arrêt et bit de parité respectivement (Par défaut,fixé à 9600,0,0. Ex : pour modifier le baudrate à 115200 entrer AT+UART=115200,0,0).
D’autres commandes AT existent pour le module Bluetooth HC-05 que vous pouvez trouver en suivant le lien.
CAUTION : Différentes versions du module HC-05 existent et la procédure de configuration peut varier. Veillez à vérifier l’étiquette du module et la version du micrologiciel avant de l’utiliser. Pour ce tutoriel, nous avons utilisé un module HC-05 étiqueté ZS-040 et la version du firmware 2.0-20100601.
N.B. : Si le module ne répond pas, vérifiez le câblage, la conductivité des câbles et la vitesse de transmission.
N’hésitez pas à laisser un commentaire ou à nous contacter si vous avez des problèmes pour configurer votre module HC-05.
Configuration de l’esclave
Pour configurer le module en tant qu’esclave, vous pouvez changer le nom en AT+NAME=HC05-Slave et choisir les paramètres de communication et le code PIN que vous souhaitez. Vous devrez vous assurer que le maître et l’esclave comme les mêmes paramètres de communication.
- AT returns OK
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Entrez AT+ADDR pour obtenir l’adresse du module (ex : +ADDR:98d3:32 :21450e)
Pour le module esclave, vous pouvez également utiliser un module HC-06
Configuration du maître
Pour définir le module comme maître, vous devez changer le rôle et définir le même paramètre de communication que le module esclave.
- AT returns OK
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- L’adresse du module esclave doit être entrée dans le module maître pour lui permettre de s’appairer : AT+BIND=98d3,32,21450e (remplacer les points » : » par des virgules « , »)
Schémas pour la communication
En mode communication, la broche Key/EN n’est pas connectée.
Code de communication
Lorsque les deux modules sont configurés, téléchargez les codes suivants dans les cartes Arduino connectées à vos modules. Allumez les modules pour entrer en mode de communication. Le module maître doit se connecter au module esclave et la LED doit clignoter toutes les secondes.
Nous utilisons la même bibliothèque SoftwareSerial.h que pour le module HC-06:
- SoftwareSerial hc05(Rx,Tx) pour définir les broches du port série
- hc05.begin() pour définir le débit en bauds (la valeur doit être la même que celle de votre module)
- hc05.available() pour tester si des données sont disponibles dans le tampon du module
- hc05.read() pour lire des données un octet à la fois
- hc05.print() pour envoyer une chaîne de caractères sous forme ASCII
- hc05.write() pour envoyer des données un octet à la fois
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 monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(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 buffermsg += 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 masterif(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 buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Si vous ouvrez les deux moniteurs série et si vous entrez une commande dans le moniteur de la carte maître, vous devriez voir les résultats suivants. La carte maître envoie une commande qui est reçue et renvoyée par la carte esclave. Les communications fonctionnent correctement dans les deux sens.
Si vous avez des problèmes pour configurer ou appairer vos modules Bluetooth, n’hésitez pas à nous contacter ou à laisser un commentaire.
Application
- Pilotez votre robot à distance avec votre smartphone
- Envoyez une mesure de température à votre smartphone
.