Le HC-06 est le module qui transforme une liaison série en liaison sans fil. Vu du microcontrôleur, rien ne change : ce qui partait sur Serial s’envoie dans les airs, et ce que le téléphone tape se lit comme un caractère reçu sur le port série. Pas de bibliothèque Bluetooth, pas de profil à négocier, aucun bouleversement du programme.
Il parle le profil SPP (Serial Port Profile) du Bluetooth classique : après appairage, la liaison se comporte exactement comme un câble. C’est le module des robots pilotés depuis un smartphone Android, des mesures envoyées à un ordinateur sans fil, et des afficheurs qui reçoivent leurs données d’une pièce voisine. La carte porte la puce CSR BC417 et une antenne imprimée ; quatre broches suffisent à l’utiliser.
Le HC-06 est un module esclave : il attend qu’un téléphone, un ordinateur ou une autre carte vienne le chercher. C’est la nuance qui le distingue de son cousin, et elle décide de l’usage.
HC-06 ou HC-05 : la différence tient à un rôle
Les deux cartes se ressemblent et se branchent de la même façon, mais elles ne jouent pas le même rôle. Le HC-05 est maître ou esclave : il peut prendre l’initiative de la connexion, ce qui permet à deux montages de dialoguer sans téléphone ni ordinateur. Le HC-06 ne peut pas appeler : il se contente de répondre.
Trois différences pratiques en découlent :
- Le brochage. Quatre broches ici (VCC, GND, TXD, RXD) contre six sur le HC-05, qui ajoute la broche
ENet la sortie d’étatSTATE. - L’accès au mode configuration. Le HC-06 entre en mode commandes tout seul à la mise sous tension, tant qu’aucune connexion n’est établie. Le HC-05 demande de maintenir sa broche
ENau niveau haut au démarrage. - Le débit du mode configuration. 9600 bps sur le HC-06 — le même débit que la liaison de données — contre 38400 bps imposés sur le HC-05.
Pour piloter un robot depuis un smartphone ou envoyer des relevés vers un ordinateur, les deux conviennent et le HC-06 est le plus simple à mettre en œuvre. Pour faire parler deux cartes entre elles sans intermédiaire, il faut un HC-05 du côté qui appelle.
Caractéristiques techniques
| Version Bluetooth | 2.0 + EDR, Bluetooth classique — profil SPP |
|---|---|
| Puce | CSR BC417 (BlueCore 4), mémoire flash externe 8 Mbit |
| Rôle | Esclave uniquement |
| Alimentation de la carte | 3,6 à 6 V sur la broche VCC — régulateur 3,3 V embarqué |
| Niveau logique | 3,3 V sur TXD et RXD (voir la section sur le diviseur) |
| Débit en données | 9600 bps par défaut, réglable par commande AT |
| Débit en mode commandes | 9600 bps, celui de la liaison de données |
| Portée | Environ 10 m en champ libre (classe 2, +4 dBm) |
| Consommation | Environ 30 mA en liaison active |
| Code d’appairage par défaut | 1234 |
| Bandes de fréquence | 2,4 GHz ISM, sauts de fréquence adaptatifs |
| Dimensions de la carte | Environ 27 × 13 mm, pas des broches 2,54 mm |
Brochage : quatre broches, pas une de plus
| VCC | Alimentation. Le régulateur de la carte accepte 3,6 à 6 V : le 5 V de l’Arduino convient et donne la meilleure portée radio. |
|---|---|
| GND | La masse, commune avec celle de la carte de commande. Sans elle, la liaison ne reçoit que du bruit. |
| TXD | Sortie du module, en 3,3 V. Elle se relie directement à l’entrée RX du microcontrôleur, qui lit sans difficulté un niveau haut de 3,3 V. |
| RXD | Entrée du module, en 3,3 V également. C’est la seule broche à protéger : voir la section suivante. |
La petite LED de la carte renseigne sur l’état sans instrument : clignotement rapide, le module attend une connexion ; clignotement lent et régulier, il est en mode commandes ; clignotement double, une liaison est établie.
Le diviseur : le seul vrai piège de ce module
Le HC-06 fonctionne en 3,3 V, et sa broche RXD n’accepte pas les 5 V d’un Arduino. Le branchement direct fonctionne quelques minutes — le temps de conclure que tout va bien — puis l’entrée du module se dégrade et finit par ne plus répondre. C’est de très loin la première cause de « mon module a marché, puis il est mort ».
La parade coûte deux résistances. Entre la sortie TX de l’Arduino et la broche RXD du module, une résistance de 1 kΩ en série, puis une résistance de 2 kΩ entre la broche RXD et la masse : les 5 V se partagent et l’entrée ne voit plus que 3,3 V. Dans l’autre sens, aucune protection n’est nécessaire — la sortie TXD du module en 3,3 V est lue sans problème par une entrée en 5 V.
Sur un microcontrôleur déjà en 3,3 V — un ESP32, un ESP8266, un Raspberry Pi, un STM32 — le diviseur devient inutile : les quatre fils se branchent directement.
Le mode configuration : quatre commandes AT suffisent
Le module sort d’usine avec un nom (HC-06), un code d’appairage (1234) et un débit de 9600 bps. Pour le reconfigurer, il suffit de l’alimenter sans qu’aucune connexion Bluetooth soit établie, puis d’ouvrir un terminal sur la liaison série à 9600 bps : le module répond OK à chaque commande acceptée. Les commandes s’écrivent en majuscules et sans retour à la ligne.
AT | Test de présence — répond OK si le mode commandes est actif. |
|---|---|
AT+VERSION | Affiche la version du micrologiciel. |
AT+NAMEmonrobot | Renomme le module : c’est le nom visible lors de l’appairage, 20 caractères au maximum. |
AT+PIN2580 | Change le code d’appairage, quatre chiffres. |
AT+BAUD8 | Change le débit de la liaison. Le chiffre est un code : 4 = 9600, 5 = 19200, 6 = 38400, 7 = 57600, 8 = 115200. |
AT+PN | Fixe la parité : aucune (PN), paire (PE) ou impaire (PO). |
Deux mises en garde, car ce module ne se rattrape pas toujours : le débit et le code d’appairage ne peuvent pas être relus, seulement écrits. Réglez le débit en dernier, et notez la valeur choisie — c’est elle qu’il faudra mettre dans le programme et dans le terminal. En cas de doute, la commande AT+BAUD4 remet le débit d’usine à 9600 bps, à condition d’avoir deviné le débit courant pour l’envoyer.
Pour configurer le module sans passer par un microcontrôleur, un convertisseur USB vers TTL branché sur TXD, RXD, GND et VCC fait l’affaire : le mode commandes s’ouvre depuis un simple terminal sur l’ordinateur, sans carte intermédiaire.
Ce qu’on en fait
- Piloter un robot depuis un téléphone. Un caractère reçu devient un ordre : avancer, tourner, lever un bras. C’est le montage le plus courant, et il tient en une dizaine de lignes.
- Relever des mesures à distance. Une température, un niveau d’eau ou une tension partent vers le téléphone sans câble entre les deux.
- Ajouter une liaison sans fil à un montage existant. Un appareil déjà commandé par liaison série reçoit le module sans modification de son programme, hormis le port utilisé.
- Commander un appareil du quotidien. Le module et un module de relais suffisent pour allumer une lampe ou ouvrir un portail depuis un téléphone.
Mini-projet : échanger dans les deux sens avec un smartphone
Un montage qui montre la mécanique complète : l’Arduino reçoit des ordres du téléphone, lui renvoie une mesure toutes les secondes, et lui signale la pression d’un bouton local. Une fois ce va-et-vient compris, le même programme pilote un relais, un moteur ou un servo.
Ce qu’il faut
| Le module | Le module Bluetooth HC-06 de cette page, broches soudées |
|---|---|
| La carte | Uno R3 + câble USB |
| Le support | Plaque d’essai 830 points |
| Les liaisons | 10 × fil femelle-femelle — l’extrémité femelle se clipse sur les broches du module |
| Le voyant | LED 5 mm rouge et sa résistance 220 Ω |
| Le bouton | Mini bouton poussoir |
| Deux résistances | 1 kΩ et 2 kΩ pour le diviseur sur la broche RXD du module |
Le câblage
Module VCC | → Arduino 5V |
|---|---|
Module GND | → Arduino GND |
Module TXD | → Arduino D10 |
Module RXD | → Arduino D11, à travers le diviseur 1 kΩ et 2 kΩ |
| LED | Anode sur D9 à travers la résistance de 220 Ω, cathode sur GND |
| Bouton | Une patte sur D2, l’autre sur GND (résistance interne activée) |
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte :
/*
* Module Bluetooth HC-06 : liaison bidirectionnelle avec un smartphone
* Carte : Arduino Uno R3 -- liaison logicielle : RX sur D10, TX sur D11
* Le TX de l Arduino rejoint le RXD du module a travers un diviseur 1 k / 2 k
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "SoftwareSerial.h"
SoftwareSerial bluetooth(10, 11); // 10 = RX de l Arduino, 11 = TX de l Arduino
const byte PIN_LED = 9; // LED, via une resistance de 220 ohms
const byte PIN_BOUTON = 2; // bouton poussoir entre D2 et GND
const byte PIN_SONDE = A0; // entree analogique libre
char commande = 0;
byte boucles = 0; // compteur pour espacer les envois
void setup() {
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
pinMode(PIN_BOUTON, INPUT_PULLUP); // la resistance interne evite un fil de plus
Serial.begin(9600); // moniteur serie de l ordinateur
bluetooth.begin(9600); // liaison avec le module HC-06
Serial.println("HC-06 pret. Envoyez 1 ou 0 depuis le telephone.");
}
void loop() {
// 1) Ce qui vient du telephone : un caractere, une action
if (bluetooth.available()) {
commande = bluetooth.read();
if (commande == '1') {
digitalWrite(PIN_LED, HIGH);
bluetooth.println("LED allumee");
} else if (commande == '0') {
digitalWrite(PIN_LED, LOW);
bluetooth.println("LED eteinte");
}
}
// 2) Ce qui part vers le telephone : une mesure toutes les 50 boucles,
// soit environ une seconde avec la pause de 20 ms en fin de boucle
boucles = boucles + 1;
if (boucles == 50) {
boucles = 0;
bluetooth.print("mesure A0 : ");
bluetooth.println(analogRead(PIN_SONDE));
}
// 3) Un evenement local annonce au telephone
if (digitalRead(PIN_BOUTON) == LOW) {
bluetooth.println("Bouton presse");
delay(300); // anti-rebond simple
}
delay(20); // cadence de la boucle
}Comment ça marche
- Le module est une simple passerelle :
bluetooth.read()renvoie les octets reçus du téléphone,bluetooth.print()lui envoie du texte. Rien d’autre à apprendre. - La broche
D10reçoit, la brocheD11émet. Sur un Arduino Uno, les broches 0 et 1 servent au port USB : les employer pour le module obligerait à le débrancher à chaque téléversement. - Le programme n’attend jamais : les trois blocs s’exécutent à chaque tour de boucle, donc un ordre reçu est traité dans la milliseconde qui suit.
INPUT_PULLUPactive la résistance interne du microcontrôleur : le bouton se câble directement entre la broche et la masse, sans résistance externe.- Côté téléphone, une application de terminal Bluetooth série suffit : on s’appaire avec le module, code 1234, puis on envoie le caractère
1. Aucun développement d’application n’est nécessaire pour ce premier essai.
Points d’attention
- Le diviseur sur RXD n’est pas facultatif. C’est la seule protection à ne pas oublier, et elle coûte deux résistances.
- Le module appelle du courant au démarrage. Sur la sortie 3,3 V d’un Arduino Uno, cette pointe fait chuter la tension et le module redémarre en boucle : alimentez-le en 5 V, ou sur une alimentation 5 V séparée avec masse commune.
- Le débit doit être identique des deux côtés. Un programme ouvert à 9600 face à un module réglé à 115200 ne renvoie que des caractères parasites.
- Les iPhone ne conviennent pas. Le profil SPP est absent d’iOS : cette liaison série Bluetooth classique est réservée à Android, aux ordinateurs et aux cartes entre elles.
- Le mode commandes se referme tout seul. Dès qu’une connexion Bluetooth est établie, le module passe en transmission et n’écoute plus les commandes AT : pour le reconfigurer, déconnectez d’abord le téléphone.
- Le module reste alimenté en permanence sans dommage. Sa consommation de veille est faible : sur un montage fixe, il peut rester sous tension, la LED clignotant en attendant un client.
Questions fréquentes
Le module n’apparaît pas dans la liste Bluetooth du téléphone, que vérifier ?
Dans l’ordre : la LED de la carte clignote-t-elle ? Éteinte, l’alimentation est en cause. Clignotement lent et régulier, le module est en mode commandes — il attend un terminal, pas un téléphone. Ensuite, la recherche doit durer une vingtaine de secondes : le module se présente sous le nom HC-06, sauf s’il a été renommé.
L’appairage réussit mais rien ne s’affiche dans le moniteur série
Trois causes couvrent presque tous les cas : un débit différent entre le programme et le module, les deux lignes de données croisées (le TXD du module doit rejoindre le RX de l’Arduino, et non le même numéro), ou une application de terminal qui se connecte à la mauvaise liaison. Vérifiez aussi que le module est bien déclaré sur les broches 10 et 11 du programme, et non sur 0 et 1.
Peut-on utiliser les broches 0 et 1 au lieu de la liaison logicielle ?
C’est possible et cela libère le programme d’une bibliothèque, mais les broches 0 et 1 servent au téléversement et au port USB : il faut débrancher le module avant chaque téléversement, puis les remettre. Sur un montage définitif, c’est pratique ; pendant la mise au point, la liaison logicielle fait gagner beaucoup de temps.
Deux modules HC-06 peuvent-ils se parler directement ?
Non. Le HC-06 est esclave : aucun des deux ne prendra l’initiative de la connexion. Pour relier deux cartes entre elles, il faut un HC-05 en maître d’un côté, appairé à l’adresse du module esclave.
Puis-je alimenter le module sur la sortie 3,3 V de l’Arduino ?
Ce n’est pas conseillé. Le régulateur de la carte Uno ne fournit que quelques dizaines de milliampères sur cette sortie, et la pointe de courant du module suffit à faire chuter la tension : les redémarrages en boucle en sont le symptôme typique. La sortie 5 V est le bon choix, l’alimentation interne du module étant régulée.
Comment revenir aux réglages d’usine ?
Il n’existe pas de commande de réinitialisation générale sur ce module. Les valeurs se reprennent une à une : AT+NAMEHC-06 pour le nom, AT+PIN1234 pour le code, AT+BAUD4 pour le débit à 9600 bps. Le débit est la valeur à envoyer en premier si le module ne répond plus à rien.
À combiner avec
Le socle du mini-projet de cette page réunit une carte Uno R3, sa plaque d’essai et une dizaine de fils femelle-femelle : c’est le montage de départ, sans surprise. Pour une application sans fil complète, le kit robot 4WD IR Bluetooth fournit un châssis roulant prêt à recevoir ce module et à être piloté depuis un smartphone. Et si vous cherchez à faire dialoguer deux montages entre eux sans téléphone, c’est le HC-05 qu’il faut choisir.









