Vous pouvez communiquer avec votre carte Arduino par liaison Bluetooth en utilisant un module HC-06 (esclave). Cela vous permet de connecter la carte Arduino à un autre système (Smartphone, ordinateur ou un autres microcontrôleurs) afin d’envoyer et de recevoir des données. La communication par Bluetooth permet, par exemple, de piloter votre robot via une application Smartphone ou récupérer les mesures d’un capteur sur votre ordinateur.
Prérequis : Communication Série avec Arduino
Matériel
- Ordinateur
- Arduino UNO
- câble USB pour connecter l’Arduino à l’ordinateur
- Module Bluetooth HC-06
- Câbles Dupont M/F
Présentation du module HC-06
Le module Bluetooth HC-06 présente 4 broches pour permettre d’établir la connexion série.
- 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. Typiquement connecté à la broche de transmission (TX) de l’Arduino
- TX broche de transmission. Typiquement connecté à la broche de réception (RX) de l’Arduino
N.B.: Le module HC-06 étant un module esclave, il ne peut pas se connecter à d’autres appareils tout seul. Pour cela, vous aurez besoin d’un module maître comme le module Bluetooth HC-05.
Schéma de câblage
Certains modules HC-06 fonctionnent en 3V3 et ne supportent pas le niveau de tension 5V sur la broche Rx. Dans ce cas, un pont diviseur de tension est nécessaire pour convertir le signal logique (résistance 1kOhm entre pin3 et Rx, et 2kOhm entre Rx et GND).
ATTENTION : Nous utilisons ici, les broches 2 et 3 de l’Arduino UNO. Selon le microcontrôleur utilisé, les broches utilisables pour la communication SoftwareSerial peuvent être différentes. Notamment pour les cartes Arduino Mega, Micro, Leonardo. Vérifiez la documentation.
Configuration du module HC-06
La configuration du module Bluetooth peut être intéressante pour vérifier le bon fonctionnement du module et pour modifier ses paramètres notamment lorsque vous utilisez plusieurs modules. Le module doit être alimenté mais non-appairé (la LED doit clignoter).
Le code suivant permet de modifier le nom, le code PIN et la vitesse de communication(baudrate) du module HC-06
#include <SoftwareSerial.h> SoftwareSerial hc06(2, 3); void setup() { //Initialize Serial Monitor Serial.begin(9600); Serial.println("ENTER AT Commands:"); //Initialize Bluetooth Serial Port hc06.begin(9600); } void loop() { //Write data from HC06 to Serial Monitor if (hc06.available()) { Serial.write(hc06.read()); } //Write from Serial Monitor to HC06 if (Serial.available()) { hc06.write(Serial.read()); } }
Pour tester la communication, tapez AT dans le monitor série de l’IDE Arduino. Assurez-vous de sélectionner le bon baudrate (9600) et « Pas de fin de ligne » dans les options de communication. Si tout va bien, le module doit répondre OK. Si ça ne fonctionne pas vérifiez le branchement et la version du module.
Pour modifier le nom du module, tapez AT+NAMEnom_module. Le module devrait répondre OKsetname. (Ex: si vous voulez changer le nom du module en BTM1 tapez AT+NAMEBTM1)
Pour modifier le code PIN du module, tapez AT+PINxxxx. Le module devrait répondre OKsetPIN. (Ex: si vous voulez changer le PIN en 0000 tapez AT+PIN0000)
Pour modifier la vitesse de communication du module (seulement si nécessaire), tapez AT+BAUDx. Ex: si vous voulez changer le baudrate en 9600 tapez AT+BAUD4. Le module devrait répondre OK9600. (Note: 1 pour 1200, 2 pour 2400, 3 pour 4800, 4 pour 9600, 5 pour 19200, 6 pour 38400, 7 pour 57600, 8 pour 115200)
ATTENTION: Différentes versions du module HC-06 éxistent et la liste des commandes AT peut varier. Vérifiez bien le numéro de série écrit sur le module et la version du firmware en tapant la commande AT+VERSION.
Par exemple, le module HC-06 labellisé ZS-040 avec la version 3.0-20170609 retourne ERROR(0) lorsqu’on envoie la commande AT+NAMExxxx (avec xxxx le nouveau nom choisi pour le module). Les commandes AT pour ce module sont:
- AT+NAME=xxxx pour configurer le nom du module
- AT+PSWD: »xxxx » pour configurer le mot de passe du module
- AT+UART=115200,0,0 pour configurer le baudrate
N’hésitez pas à laisser un commentaire si vous rencontrez des difficultés pour configurer votre module Bluetooth HC-06.
Appairage
Une fois la configuration du module effectuée comme vous le désirez, vous pouvez appairé le module HC-06 avec le système de votre choix comme n’importe quel périphérique Bluetooth. Sélectionnez le nom dans la liste des périphériques détectés (par défaut: HC-06) et entrez le code PIN que vous avez choisi (par défaut: 1234). Lorsque cela est fait, la LED présente sur le module doit cesser de clignoter.
Code
Une fois votre module appairé vous pouvez modifier le code suivant pour obtenir la fonctionnalité désirée. Dans l’exemple suivant, nous supposons qu’une application envoie la commande ON ou OFF au module Bluetooth pour activer une fonction du code.
Pour gérer le module HC-06 dans le programme, la librairie utilisée est SoftwareSerial.h qui gère les liaisons séries de la carte Arduino. Les fonctions à connaître sont:
- SoftwareSerial hc06(Rx,Tx) pour définir le port série et les broches servant à la communication
- hc06.begin() pour définir la vitesse de communication
- hc06.available() pour tester si des données sont disponible dans le buffer du port série
- hc06.read() pour lire les données du port série, un octet à la fois
- hc06.print() pour envoyer une chaine de caractères en ASCII
- hc06.write() pour envoyer des données, un octet à la fois.
#include <SoftwareSerial.h> SoftwareSerial hc06(2,3); String cmd=""; float sensor_val=0; void setup(){ //Initialize Serial Monitor Serial.begin(9600); //Initialize Bluetooth Serial Port hc06.begin(9600); } void loop(){ //Read data from HC06 while(hc06.available()>0){ cmd+=(char)hc06.read(); } //Select function with cmd if(cmd!=""){ Serial.print("Command recieved : "); Serial.println(cmd); // We expect ON or OFF from bluetooth if(cmd=="ON"){ Serial.println("Function is on"); }else if(cmd=="OFF"){ Serial.println("Function is off"); }else{ Serial.println("Function is off by default"); } cmd=""; //reset cmd } // Simulate sensor measurement sensor_val=(float)random(256); // random number between 0 and 255 //Write sensor data to HC06 hc06.print(sensor_val); delay(100); }
Bonus: scan du baudrate
Si vous avez du mal à trouver la vitesse de communication de votre module Bluetooth, voici un code qui pour chaque valeur de baudrate initialise le module Bluetooth HC-06 et envoie la commande AT.
#include <SoftwareSerial.h> SoftwareSerial hc06(2, 3); void setup() { //Initialize Serial Monitor Serial.begin(9600); // scan scanBaudrate(); } void loop() {} void scanBaudrate() { unsigned long bauds[12] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000}; for (int i = 0; i < 12; i++) { hc06.begin(bauds[i]); delay(10); Serial.print(F("Baudrate ")); Serial.println(bauds[i]); command("AT", 2000); } } String command(const char *toSend, unsigned long milliseconds) { String result; Serial.print("Sending: "); Serial.println(toSend); hc06.print(toSend); unsigned long startTime = millis(); Serial.print(F("Received: ")); while (millis() - startTime < milliseconds) { if (hc06.available()) { char c = hc06.read(); Serial.write(c); result += c; // append to the result string } } Serial.println(); // new line after timeout. return result; }
Lorsque la valeur de baudrate est correcte, le module Bluetooth devrait répondre OK. Ce code vous permettra de trouver facilement si votre module fonctionne et quel baudrate il utilise.
Application
- Communiquer entre deux Arduino via Bluetooth
- Pilotez votre robot avec votre smartphone
- Récupérez les mesures d’un capteur sur votre smartphone
- Tous nos robots peuvent être piloté via Bluetooth.
Source
- Communication Série avec Arduino
- Module Bluetooth HC-06
- Créez votre application smartphone avec App Inventor 2
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie
bonjour
je galere depuis 1 semaine car mon module hc06 de chez DSD TECH ne me rend pas OK apres avoir teste votre script sur arduino nano aux pattes D2 et D3
la led bluetooth clignote , donc pas appairée et j’envoie AT dans moniteur serie
rien
j ai fait un script pour robot
la connection entre tel et bluetooth fonctionne mais pas de transmission de message
merci
re
voila copie moniteur
je rentre AT et resultat 84-1
merci
Entrer la commande AT:
84-1
Bonjour,
Merci pour votre message.
Dans le moniteur série avez-vous sélectionné l’option de fin de ligne NL & CR avec la vitesse de communication 9600 baud?
Il se peut que la vitesse de communication par défaut du module soit différente de 9600. Avez-vous essayer d’autre baudrate?
Bonsoir, Madame, Monsieur,
Je débute sur le Bluetooth, et je voudrais modifier un HC 06 zs040. version 3.0.20170609
Avec Arduino ide 1.8.8 j’arrive à faire la commande AT, la commande AT+VERSION, et la commande AT+NAME=xxxx . dans le moniteur serie les deux lignes, NL et CR.
Par contre je n’arrive pas à changer le code pin et la vitesse BAUD. Pour la vitesse je souhaiterais mettre 115200 bauds.
Pouvez vous m’aider.
Cordialement.
JP CARALP
Bonjour Monsieur,
Quelles commandes AT entrez-vous pour modifier le PIN et le Baudrate?
Que renvoie le module Bluetooth une fois les commandes AT entrées?
Bonjour je rencontre le meme problème avec le changement du baudrate…jutilise la meme version. Merci d’avance
Pouvez-vous tester les commandes suivantes:
et me dire si cela résout votre problème?
Comment faire le câblage du Bluetooth?
Bonjour,
Pour les modules Bluetooth HC-06, il faut relier la broche TX du module à la broche 2 de l’Arduino et la broche RX à la broche 3 de l’Arduino. Pour l’alimentation GND à la broche GND et Vcc à la broche 5V (ou 3.3V selon modèle).
Pour cela, tu peux utiliser des câbles Dupont M/F.
Dans le code Arduino, il faut ensuite créer un objet SoftwareSerial avec les broches utilisées pour la communication. Dans notre cas, SoftwareSerial HC06(2,3);. Est-ce que cela répond à votre question?
VCC sur le 5V de l’Arduino, GND sur la masse, TXD sur le 2 et RXD sur le 3.
bonjour,
Question de débutant : sur mon module HC-06 est écrit LEVEL 3.3V devant RX et TX. Ne faudrait il pas un pont diviseur à la sortie de l’arduino pour éviter de griller le module HC-06 ?
Merci par avance.
Nicolas
Bonjour, Il est effectivement conseillé de rajouter un diviseur de tension sur la borne RX seulement afin d’adapter le niveau de tension au module HC-06 ou HC-05. En pratique, j’ai utilisé plusieurs modules sans diviseur de tension et je n’ai eu aucun soucis.
Bonjour,
C’est mon deuxième module HC-06.
La led ne s’allume pas, le moniteur série n’affiche rien.
Je nesais pas quoi faire, j’ai scrupuleusement suivi les instructions.
Neodali
Merci
Pourriez-vous envoyer la référence et une photo du module que vous avez acheté?
bonjour
j’essai de mettre en place un système de commande sur mon drone a partir du HC06 et j’aimerai savoir la distance du signal de celui ci et est ce possible de l’empecher de se connecter a un autre périphériques lorsqu’il est déjà connecter a un autre
Bonjour, la distance de communication est d’environ 10m si tout est dégagé. Je n’ai jamais essayé de me connecter à un module bluetooth déjà connecté à un autre appareil. A tester!
Bonjour, pour du bluetooth 4.2 (ce qu’il y a dans la plupart des téléphones et HC-06) la portée est de 15m dans un endroit dégagé (avec un débit de données réduit en fonction de la distance) et elle peut diminuer fortement si il y a un obstacle comme un mur, arbre … On trouve dans les smartphones récents une norme bluetooth 5.0 qui peut porter à 100m mais il faut que le module le soit aussi pour que ça fonctionne (et je ne sais pas si ça existe, des modules en bluetooth 5.0).
Bonjour, j’ai comme projet d’utiliser ce dispositif comme un détecteur d’objets perdus. Je m’explique : imaginons que j’ai perdu un appareil utilisant la technologie bluetooth, est-ce possible à partir de mon smartphone par exemple d’avoir la distance me séparant de l’objet en question qui est perdu ?
Merci pour votre réponse !
Bonjour, avec la technologie Bluetooth, comme tout signal radio, la distance de communication est limitée (10m dans notre cas).
Il faudrait pouvoir récupérer la force du signal, le RSSI (Received Strength Signal Indicator) ou définir un temps entre l’émission et la réception de données qui pourrait donner une indication.
Tengo un Arduino Mega y ocupado los puertos PWM con un módulo control de motores. ¿Puedo utilizar otros pines para TX y RX? Desde ya muchas gracias
Claro que si! 10 y 11, por ejemplo. reference SoftwareSerial.h
bonjour, j’ai comme projet la réalisation d’un robot mobile commandé à distance avec bluetooth, je veut juste avoir la porté maximal qui peut supporte ce module HC-06.
merci d’avance.
Bonjour,
Je n’ai pas testé la portée maximale mais il semble qu’elle soit de 10m environ.
LES COMMANDE AT FONCTIONE MAIS AT+PIN NON
MERCI D AVANCE
Et AT+PSWD ?
Pourquoi on permute les pins du bleutooth avec celle de l’arduino ? Genre tx du Bluetooth connecté au rx de l’arduino et le rx de l’arduino connecté au tx du Bluetooth
Le label Rx vient de Réception et Tx de Transmission. Pour chaque ligne du port série, un appareil envoie des données et l’autre les reçoit:
Appareil 1 Appareil 2
Rx1 <-- Tx2
Tx1 –> Rx2
Je souhaite communiquer entre deux arduino en bluetooth.
J’appuie sur un bouton poussoir. J’envoie la commande par bluetooth à l’autre arduino qui est lui-même équipé de bluetooth receptionne l’information et allume une led. Jai deux bluetooth hc06.
Bonjoyr à toutes et à tous,
Pourriez vous m’aider à réaliser le code pour mon projet suivant :
Je souhaite communiquer entre deux arduino en bluetooth.
Lorsque j’appuie sur un bouton, j’envoie la commande par bluetooth à autre arduino qui est lui-même équipé de bluetooth receptionne l’information et fait tourner une pompe. Jai deux bluetooth hc06.
Bonjour,
Il est impossible de communiquer entre deux modules HC-06. En effet, le module HC-06 ne fonctionne qu’en mode esclave. Il vous faut utiliser un module maître comme le module HC-05.
Vous pourrez ensuite suivre ce tutoriel
Bonjour,
impossible de paramétrer mon HC06 :
si je test le sketch pour connaître les bauds de transmission, aucun ne me remonte ‘OK’.
Avez vous une idée ?
Par contre, en ce qui concerne un HC05 à ma disposition, cela fonctionne correctement, d’ou le fait que je sois dubitatif….
Une idée ?
Les commandes AT ne fonctionnent pas du tout sur le module HC06?
Bonjour,
Je pense qu’il serait intéressant d’ajouter dans l’article qu’avec la version 3.0-20170609 il faut avoir dans le moniteur série les deux fins de lignes, NL et CR et pour linvorV1.8 pas de fin de ligne.
La commande AT de test devant renvoyer OK étant à tester avec ces deux fins de ligne pour pouvoir connaitre la version.
Bonjour,
J’ai suivie votre tuto sauf que quand je me connecte a partir de mon appareil la led continue a clignoter alors que mon appareil est correctement connecter et le moniteur serie me repond du cou est ce que ‘est normal ?
Bonjour,
C’est possible que la version de votre module soit un peut différente. Cela ressemble au comportement d’un HC05
bonsoir,
j’ai effectuer votre programme avec mon module bluetooth HC-06 et mon Arduino UNO cependant le programme m’indique une erreur. J’aurais besoins d’aide svp.
merci par avance
Bonjour,
Quelle est l’erreur qui s’affiche?
bluetooth__3:6:2: error: stray ‘\302’ in program
//Initialize Serial Monitor
^
bluetooth__3:6:3: error: stray ‘\240’ in program
//Initialize Serial Monitor
^
Bonjour, cette erreur vient de caractères cachés qui se rajoutent lors du copier-coller. Cela vient du navigateur. La copie manuelle (en surlignant avec la souris puis Ctrl+C) fonctionne. Le bouton copier fonctionne sur Firefox.
Si vous faites Ctrl+F5 sur la page, vous devriez pouvoir utiliser le bouton copier sans soucis.
Dites-moi si ça résout votre problème?
bonjour,
Merci il y a plus d’erreur cependant il y a encore un problème quand j’ouvre le moniteur série et que j’entre la commande AT rien ne se passe , pas de OK ni rien
Bonjour,
Bonne nouvelle!
Pour la commande AT, avez-vous sélectionné la bonne fin de ligne? Avez-vous branché les câbles comme il faut et testé leur continuité?
bonjour,
oui oui tout es bien branche le module s’allume et tout est bien sélectionné dans le moniteur sérieux , je ne comprend vraiment pas d’ou vient l’erreur …
Avez-vous essayé un de faire un scan du baudrate?
Pouvez-vous partager le lien du module que vous avez acheté?
bonjour.
je souhaite utiliser ce script pour le contrôle des paramètres d humidité , température et lumière dans la réalisation du système d irrigation intelligent en utilisant les IOT.
Je désire savoir ci votre programme peut être adapte en changeant et augmentant les variables qui décrivent les capteurs et qui se trouvent dans le programme MIT INVENTOR et dans le code Arduino.
je parle des variables sensor_lB dans mit inventor et sensor_val dans arduino.
merci pour votre tuto très intéressant et les conseils et orientations sont la bienvenue,
Bonjour,
Merci beaucoup pour votre commentaire. Le code présenté,ici, peut tout à fait être adapté à votre besoin pour de l’IOT. Il vous suffit d’augmenter le nombre de données envoyées:
HC06.print(humidity);
HC06.print(« x »);
HC06.print(temperature);
HC06.print(« x »);
HC06.print(brightness);
et dans le code App Inventor ajouter une valeur à global_data.
je vous invite à lire ce tutoriel et celui-ci qui peuvent vous aider.
Bonjour je souhaite connecter en bluetooth 2 module Bluetooth, un hc-05 en maitre et un hc-06 en esclave sauf que je n’arrive pas récupérer l’adresse de mon module hc-06, l’esclave avec AT+ADDR, rien est renvoyé or pour connecter le maitre et l’esclave il faut l’adresse de l’esclave pour ensuite le connecter au maitre. Peux-tu m’aider dans ce problème merci d’avance.
Bonjour,
tu peux trouver l’adresse du HC-06 avec un ordinateur ou un smartphone