Le HC-05 est le module qui donne à un montage filaire une liaison série sans fil. Vu du microcontrôleur, il ne change rien : tout ce qui sortait sur Serial part dans les airs, et tout ce qui arrive du téléphone se lit comme un caractère reçu sur le port série. Aucune bibliothèque Bluetooth, aucun profil à négocier, aucune modification du programme au-delà de la liaison choisie.
Le module parle le profil SPP (Serial Port Profile) du Bluetooth classique : après appairage, la liaison se comporte exactement comme un câble. C’est ce qui le rend utile pour piloter un robot depuis un smartphone Android, envoyer les mesures d’un capteur vers un ordinateur, ou relier deux cartes entre elles sans tirer un fil. Il fonctionne sur la puce CSR BC417 avec une antenne imprimée sur la carte, et se configure par une série de commandes courtes, dites commandes AT.
La carte que nous livrons est la version à six broches, la plus complète : elle donne accès à la broche EN qui ouvre le mode configuration, et à la broche STATE qui signale au microcontrôleur que la liaison est établie.
HC-05 ou HC-06 : la différence tient à un rôle
Les deux modules se ressemblent et se branchent de la même façon, mais ils 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 se parler sans téléphone ni ordinateur. Le HC-06 est esclave uniquement : il attend qu’un téléphone ou un ordinateur vienne le chercher. Pour dialoguer avec un smartphone, les deux conviennent. Pour faire communiquer deux cartes entre elles, il faut au moins 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 | Maître ou esclave, réglable par commande AT |
| Alimentation de la carte | 3,6 à 6 V sur la broche VCC — régulateur 3,3 V embarqué |
| Niveau logique | 3,3 V sur TX et RX (voir la section sur le diviseur) |
| Débit en données | 9600 bps par défaut, réglable de 1200 à 1,3 M |
| Débit en mode AT | 38400 bps |
| Portée | Environ 10 m en champ libre (classe 2, +4 dBm) |
| Consommation | Environ 30 mA en liaison active, 8 mA au repos |
| Code d’appairage par défaut | 1234 (certains lots sortent avec 0000) |
| 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 : six broches, dont quatre indispensables
| 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. Elle doit être commune avec celle de la carte de commande, sans quoi la liaison série ne reçoit que du bruit. |
| TX | Sortie du module, en 3,3 V. Elle se relie directement à l’entrée RX du microcontrôleur, qui lit correctement 3,3 V comme un niveau haut. |
| RX | Entrée du module, en 3,3 V également. C’est la seule broche à protéger : voir le paragraphe suivant. |
| EN | Aussi appelée KEY sur les anciennes cartes. Maintenue au niveau haut à la mise sous tension, elle place le module en mode commandes AT. Pour le fonctionnement normal, la laisser libre. |
| STATE | Sortie de statut. Elle est au niveau bas quand aucune liaison n’est établie, et au niveau haut dès que le téléphone est appairé. Pratique pour allumer une LED « connecté » ou pour que le programme attende un client avant d’envoyer des données. |
Le diviseur : le seul vrai piège de ce module
Le HC-05 fonctionne en 3,3 V, et sa broche RX 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 RX du module, une résistance de 1 kΩ en série, puis une résistance de 2 kΩ entre la broche RX et la masse : les 5 V se retrouvent partagés et l’entrée ne voit plus que 3,3 V. Dans l’autre sens, aucune protection n’est nécessaire : la sortie TX du module en 3,3 V est lue sans problème par un Arduino en 5 V.
Sur un microcontrôleur déjà en 3,3 V — une carte WiFi type ESP, un Raspberry Pi, un STM32 —, le diviseur devient inutile : les deux côtés sont au même niveau et les quatre fils se branchent directement.
Le mode commandes AT : renommer, changer le code, choisir le rôle
Le module sort d’usine avec un nom (HC-05), un code d’appairage (1234) et un débit de 9600 bps. Les commandes AT modifient ces réglages. Pour y accéder, il faut maintenir la broche EN au niveau haut au moment de la mise sous tension, puis ouvrir le port série à 38400 bps : chaque commande se termine par un retour à la ligne, et le module répond OK.
AT | Test de présence — répond OK si le mode commandes est actif. |
|---|---|
AT+VERSION? | Affiche la version du micrologiciel et son numéro. |
AT+NAME=RobotSalon | Renomme le module : c’est le nom visible lors de l’appairage. |
AT+PSWD=2580 | Change le code d’appairage, quatre chiffres. |
AT+UART=115200,0,0 | Change le débit en données, le nombre de bits d’arrêt et la parité. |
AT+ROLE=1 | Passe le module en maître (1) au lieu d’esclave (0). |
AT+ADDR? | Donne l’adresse Bluetooth du module, à utiliser pour appairer deux cartes entre elles. |
AT+ORGL | Restaure tous les réglages d’usine — la commande à connaître avant de s’inquiéter. |
AT+RESET | Redémarre le module pour appliquer les changements. |
Une précision utile : le débit réglé en mode AT est aussi celui de la liaison en fonctionnement normal. Si vous changez le débit, remplacez le 9600 du programme par la même valeur, sinon la conversation part en caractères incompréhensibles.
Pour configurer le module sans passer par un microcontrôleur, un convertisseur USB vers TTL branché sur TX, RX et GND fait l’affaire : le mode commandes s’ouvre depuis un simple terminal sur l’ordinateur.
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 demande une dizaine de lignes de programme.
- Relever des mesures à distance. Température, humidité ou niveau d’eau sont envoyés au téléphone ou à l’ordinateur sans câble entre les deux.
- Relier deux cartes entre elles. Un HC-05 maître et un second module esclave remplacent un fil de plusieurs mètres, par exemple entre un capteur extérieur et un afficheur à l’intérieur.
- Commander un appareil du quotidien. Une liaison Bluetooth et un module de relais suffisent pour allumer une lampe ou ouvrir un portail depuis un téléphone.
Mini-projet : allumer une LED depuis un smartphone
Un montage complet pour comprendre la mécanique : l’Arduino reçoit un caractère par la liaison Bluetooth, agit sur une LED et renvoie une confirmation au téléphone. 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-05 de cette page, broches soudées |
|---|---|
| La carte | Uno R3 + câble USB — ou une Nano avec câble pour un montage plus compact |
| Le support | Plaque d’essai 830 points |
| Les liaisons | 10 câbles Dupont — femelle-femelle pour relier le module directement sur les broches |
| Deux résistances | 1 kΩ et 2 kΩ pour le diviseur sur la broche RX du module |
| Une LED | Une LED 5 mm et sa résistance de 220 Ω |
Le câblage
Module VCC | → Arduino 5V |
|---|---|
Module GND | → Arduino GND |
Module TX | → Arduino D10 |
Module RX | → Arduino D11, à travers le diviseur 1 kΩ et 2 kΩ |
Module EN | → non connectée en fonctionnement normal |
Module STATE | → non connectée (elle peut commander une LED de statut) |
| LED | Anode sur D9 à travers la résistance de 220 Ω, cathode sur GND |
Le programme
À copier dans l’IDE Arduino, puis à téléverser :
/*
* Module Bluetooth HC-05 : piloter une LED depuis un smartphone
* Carte : Arduino Uno R3 -- liaison SoftSerial : 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 BROCHE_LED = 9;
char commande = 0;
void setup() {
pinMode(BROCHE_LED, OUTPUT);
digitalWrite(BROCHE_LED, LOW);
Serial.begin(9600); // moniteur serie de l ordinateur
bluetooth.begin(9600); // liaison avec le module HC-05
Serial.println("HC-05 pret. Envoyez 1, 0 ou ? depuis le telephone.");
}
void loop() {
if (bluetooth.available()) {
commande = bluetooth.read();
if (commande == '1') {
digitalWrite(BROCHE_LED, HIGH);
bluetooth.println("LED allumee");
} else if (commande == '0') {
digitalWrite(BROCHE_LED, LOW);
bluetooth.println("LED eteinte");
} else if (commande == '?') {
bluetooth.println("Envoyez 1 pour allumer, 0 pour eteindre");
}
}
if (Serial.available()) { // ce qui est tape sur le PC part vers le telephone
bluetooth.write(Serial.read());
}
}
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 sont déjà prises par le port USB : les utiliser pour le module obligerait à débrancher le module à chaque téléversement. - Deux débits distincts, ne pas les confondre :
Serialà 9600 bps pour l’ordinateur, et le même 9600 pour le module tant qu’il n’a pas été changé par commande AT. - Le dernier bloc recopie vers le téléphone ce qui est tapé dans le moniteur série : c’est la voie de retour, utile pour envoyer un ordre à distance depuis l’ordinateur.
- 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 test.
Points d’attention
- Le diviseur sur RX n’est pas facultatif. C’est la seule protection à ne pas oublier, et elle coûte deux résistances.
- Le module consomme jusqu’à 50 mA en pointe. Sur la sortie 3,3 V d’un Arduino Uno, cette consommation fait chuter la tension et le module redémarre sans arrêt : alimentez-le en 5 V, ou sur une alimentation 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 smartphones iPhone ne conviennent pas. Le profil SPP est absent d’iOS : la liaison série Bluetooth classique est réservée à Android, aux ordinateurs et aux cartes entre elles.
- Le mode AT s’active à la mise sous tension. Si vous maintenez EN au niveau haut après le démarrage, la liaison de données ne fonctionne plus : c’est le réglage à remettre d’aplomb quand le module ne répond qu’aux commandes AT.
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 rapidement ? Si elle est éteinte, l’alimentation est en cause. Si elle clignote lentement et régulièrement, le module est resté en mode AT — la broche EN est probablement au niveau haut. Ensuite, dans les réglages Android, la recherche doit durer une vingtaine de secondes : le module se présente sous le nom HC-05.
L’appairage réussit mais rien ne s’affiche dans le moniteur série
Trois causes couvrent la quasi-totalité des cas : un débit différent entre le programme et le module, les deux lignes de données croisées (le TX du module doit aller au RX de l’Arduino, et non au même numéro), ou une application de terminal qui se connecte à la mauvaise liaison. Vérifiez aussi que le module est bien sur les broches 10 et 11 du programme, et non sur 0 et 1.
Puis-je utiliser les broches 0 et 1 au lieu de SoftwareSerial ?
C’est possible et cela libère le module des bibliothèques, mais les broches 0 et 1 servent au téléversement et au port USB : il faut débrancher le module de ces deux broches avant chaque téléversement, puis les remettre. Sur un montage définitif, c’est pratique ; pendant la mise au point, SoftwareSerial fait gagner beaucoup de temps.
Deux modules HC-05 peuvent-ils se parler directement ?
Oui, à condition que l’un des deux soit maître : envoyez AT+ROLE=1 au premier et AT+ROLE=0 au second, puis renseignez l’adresse du second chez le premier avec AT+BIND. Les deux gardent le même code d’appairage. Le débit doit être identique de part et d’autre.
Combien de temps tient-il sur une batterie ?
Environ 30 mA en liaison : sur une batterie 9 V de quelques centaines de milliampères-heures, comptez quelques heures seulement. Pour un montage autonome, une alimentation de plus grande capacité est préférable — et le module peut rester allumé en permanence si la consommation n’est pas contrainte.
À combiner avec
Le socle du mini-projet de cette page réunit une carte Uno R3, sa plaque d’essai et une dizaine de câbles Dupont : c’est le montage de départ, sans surprise. Côté applications, un module 4 relais 5 V transforme la réception d’un caractère en commutation de lampes ou de moteurs, un servomoteur SG90 permet d’actionner un bras depuis le téléphone, et un capteur DHT11 fait de la liaison une vraie station de mesure envoyée à distance. Pour un robot roulant commandé depuis un smartphone, le châssis complet existe déjà : il ne reste qu’à y ajouter ce module.








