Module Bluetooth HC-05 : piloter ton Arduino depuis ton téléphone
Comment câbler le module Bluetooth HC-05 ? Broches et pont diviseur, appairage avec le téléphone, commande d'une LED et d'un relais, commandes AT, HC-05, HC-06 et HM-10, compatibilité iPhone, ESP32 et Pico.
Le HC-05 est un module Bluetooth bon marché et très répandu qui ajoute une liaison série sans fil aux projets Arduino. Avec lui, tu peux allumer une LED depuis ton téléphone, allumer et éteindre une lampe via un relais, piloter une voiture radiocommandée ou envoyer des données de capteurs sur ton téléphone. Dans cet article, tu verras pas à pas comment câbler le HC-05 correctement et sans risque, l'appairer avec ton téléphone, écrire tes premiers programmes et utiliser les commandes AT qui modifient les réglages du module.

Comment fonctionne le HC-05 ?
Le HC-05 utilise le profil SPP (Serial Port Profile) du Bluetooth classique et se comporte comme un « câble série sans fil ». Une fois le téléphone appairé et connecté, chaque caractère envoyé par le téléphone arrive à l'Arduino par la broche TXD du module, et tout ce que l'Arduino écrit sur la broche RXD part vers le téléphone. Côté Arduino, tu n'as rien à savoir sur le Bluetooth : tu utilises Serial.print() et read() comme si tu parlais au moniteur série.
| Caractéristique | Valeur |
|---|---|
| Version Bluetooth | 2.0 + EDR (classique, SPP) |
| Portée | ~10 m en champ libre |
| Tension d'alimentation | 3,6–6 V (la carte du module a un régulateur) |
| Niveau logique | 3,3 V |
| Débit par défaut | 9600 bauds (38400 en mode AT) |
| PIN par défaut | 1234 ou 0000 |
| Rôle | Maître et esclave |
HC-05, HC-06 et HM-10 : les différences
| Module | Bluetooth | Rôle | Broches | iPhone |
|---|---|---|---|---|
| HC-05 | 2.0 classique | Maître et esclave | 6 | Ne fonctionne pas |
| HC-06 | 2.0 classique | Esclave uniquement | 4 | Ne fonctionne pas |
| HM-10 | 4.0 BLE | Maître et esclave | 6 | Fonctionne |

Broches et câblage du HC-05
Le module peut être alimenté en 5V car la carte comporte un régulateur, mais ses broches de données fonctionnent en 3,3 V. L'Arduino lit sans problème le signal de 3,3 V de la broche TXD du HC-05. Dans l'autre sens, au lieu de relier directement le signal TX en 5 V de l'Arduino à la broche RXD du module, utilise un pont diviseur : TX de l'Arduino → 1 kΩ → RXD, RXD → 2 kΩ → GND. Ainsi, environ 3,3 V arrivent sur RXD.
| Broche du HC-05 | Rôle | Arduino Uno |
|---|---|---|
| EN (KEY) | Passage en mode AT | Non branchée (3,3 V pour le mode AT) |
| VCC | Alimentation | 5V |
| GND | Masse | GND |
| TXD | Sortie de données du module | D10 (RX de SoftwareSerial) |
| RXD | Entrée de données du module (3,3 V) | D11, via un pont 1 kΩ / 2 kΩ |
| STATE | HIGH une fois connecté | Non branchée, ou une broche d'entrée si besoin |
États de la LED et appairage avec le téléphone
Quand tu alimentes le module, sa LED clignote rapidement : il attend une connexion. Dans les réglages Bluetooth de ton téléphone Android, trouve l'appareil « HC-05 » et appaire-le avec le code PIN 1234 (ou 0000 si ça ne marche pas). L'appairage seul n'ouvre pas la connexion ; c'est une application de terminal série Bluetooth qui s'en charge. Une fois connecté, la LED émet deux brefs clignotements toutes les 2 secondes. Si la LED reste allumée 2 secondes puis éteinte 2 secondes, le module est en mode commandes AT.
Premier échange avec le téléphone
Le code ci-dessous transforme l'Arduino en passerelle entre le téléphone et l'ordinateur : chaque caractère venant du téléphone s'affiche dans le moniteur série, et tout ce que tu tapes dans le moniteur série part vers le téléphone. C'est le meilleur point de départ pour tester la connexion :
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX → HC-05 TXD, RXD
4
5void setup() {
6 Serial.begin(9600);
7 bt.begin(9600); // veri modu hızı / data mode baud rate
8}
9
10void loop() {
11 if (bt.available()) {
12 Serial.write(bt.read()); // telefondan bilgisayara / phone to PC
13 }
14 if (Serial.available()) {
15 bt.write(Serial.read()); // bilgisayardan telefona / PC to phone
16 }
17}Téléverse le code et ouvre le moniteur série à 9600 bauds. Sur le téléphone, connecte-toi au HC-05 avec une application de Google Play comme Serial Bluetooth Terminal et tape quelque chose : ton texte apparaît dans le moniteur série. Ce que tu tapes dans le moniteur série s'affiche aussi sur le téléphone. Si cela fonctionne, la connexion, le câblage et le débit sont corrects.
Commander une LED et un relais depuis le téléphone
Réagissons maintenant aux caractères reçus du téléphone : un 1 allume la LED, un 0 l'éteint. Après chaque commande, l'Arduino renvoie aussi une réponse au téléphone :
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX
4const int LED = 13;
5
6void setup() {
7 pinMode(LED, OUTPUT);
8 bt.begin(9600);
9 bt.println("Ready");
10}
11
12void loop() {
13 if (bt.available()) {
14 char c = bt.read();
15 if (c == '1') {
16 digitalWrite(LED, HIGH); // LED'i yak / turn the LED on
17 bt.println("LED ON");
18 } else if (c == '0') {
19 digitalWrite(LED, LOW); // LED'i söndür / turn the LED off
20 bt.println("LED OFF");
21 }
22 }
23}Beaucoup d'applications Bluetooth permettent d'associer le caractère de ton choix à un bouton : tu peux ainsi créer sur ton téléphone une petite télécommande avec des boutons « Marche » et « Arrêt ». Si tu branches un module relais à la place de la LED, le même code commande une lampe ou un ventilateur depuis ton téléphone. Transmettre les caractères F, B, L et R (avant, arrière, gauche, droite) à un pilote moteur L298N est aussi la base d'une voiture pilotée en Bluetooth.
Régler le module avec les commandes AT
Tu peux changer le nom, le code PIN et le débit du HC-05 avec les commandes AT. Pour passer en mode AT, alimente le module en maintenant appuyé le petit bouton qu'il porte (ou avec la broche EN reliée au 3,3 V) ; la LED se met à clignoter lentement, une fois toutes les 2 secondes. Dans le code passerelle, écris bt.begin(38400), choisis Both NL & CR (NL et CR) comme fin de ligne dans le moniteur série et envoie les commandes :
| Commande | Rôle |
|---|---|
| AT | Test de connexion, réponse OK |
| AT+NAME=BlueGrays | Change le nom visible du module |
| AT+PSWD="4321" | Change le code PIN (sans guillemets sur les anciennes versions) |
| AT+UART=9600,0,0 | Règle le débit en mode données |
| AT+ROLE=0 | Le passe en esclave (1 pour maître) |
| AT+VERSION? | Affiche la version du firmware |
| AT+ORGL | Rétablit les réglages d'usine |
Le Bluetooth avec l'ESP32 et le Raspberry Pi Pico
L'ESP32 classique intègre à la fois le Bluetooth classique et le BLE ; avec la bibliothèque BluetoothSerial, tu te connectes à ton téléphone sans HC-05. Les ESP32-S3 et ESP32-C3, eux, ne gèrent que le BLE. Le Raspberry Pi Pico W possède aussi le Bluetooth intégré. Sur le Raspberry Pi Pico standard, sans Bluetooth, tu branches le HC-05 sur les broches UART ; comme le Pico fonctionne en 3,3 V, aucun pont diviseur n'est nécessaire cette fois. Alimente le module par la broche VBUS (5V) :
1from machine import UART, Pin
2
3bt = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # GP0 → RXD, GP1 ← TXD
4led = Pin("LED", Pin.OUT) # kart üstü LED / onboard LED
5
6while True:
7 if bt.any():
8 c = bt.read(1)
9 if c == b'1':
10 led.on()
11 bt.write(b'LED ON\n')
12 elif c == b'0':
13 led.off()
14 bt.write(b'LED OFF\n')Idées de projets avec le HC-05
- Voiture pilotée en Bluetooth : un robot conduit depuis le téléphone avec un pilote L298N et deux moteurs à courant continu.
- Interrupteur domotique : allume et éteins lampes et prises depuis ton téléphone avec un module relais.
- Lampe à sélecteur de couleur : règle la couleur d'une LED RGB avec des valeurs envoyées depuis le téléphone.
- Affichage de capteurs sans fil : envoie la température et l'humidité d'un DHT11 vers le terminal du téléphone.
- Bras robotisé : commande des servomoteurs avec des curseurs sur le téléphone.
- Dialogue entre deux Arduino : configure un HC-05 en maître et l'autre en esclave pour échanger des données sans fil.
Erreurs fréquentes et solutions
- Le téléphone ne trouve pas le module : tu utilises un iPhone, le module est connecté à un autre appareil ou il est resté en mode AT.
- Des caractères incompréhensibles arrivent : les débits ne correspondent pas ; en mode données on utilise généralement 9600, en mode AT 38400.
- Pas de réponse aux commandes AT : le module n'est pas en mode AT, le débit n'est pas 38400 ou la fin de ligne Both NL & CR n'est pas sélectionnée.
- Le code ne se téléverse pas : le module est branché sur les broches 0 et 1 ; débranche-le pendant le téléversement ou utilise SoftwareSerial.
- La connexion coupe quand les moteurs démarrent : les moteurs perturbent l'alimentation ; alimente-les par une source séparée et ajoute un condensateur sur l'alimentation du module.
- Le module a lâché au bout d'un moment : la broche RXD a sans doute reçu 5 V sans pont diviseur ; utilise toujours un pont 1 kΩ / 2 kΩ.
Le HC-05 est le moyen le plus simple de rendre tes projets filaires sans fil ; associé à la commande de moteurs, il te permet de construire ton premier robot télécommandé. Dans l'application BlueGrays, tu trouveras une voiture pilotée en Bluetooth avec L298N et un robot qui évite les obstacles, avec schémas et code.
Questions fréquentes
Le HC-05 fonctionne-t-il avec un iPhone ?
Non. iOS ne permet pas aux applications ordinaires d'ouvrir la liaison série en Bluetooth classique qu'utilisent le HC-05 et le HC-06. Pour un iPhone, il faut un module BLE comme le HM-10 ou un ESP32 avec BLE.
Quelle est la portée du HC-05 ?
Environ 10 mètres en champ libre. Les murs, les surfaces métalliques et les autres appareils sans fil réduisent cette distance. À la maison, il fonctionne de façon fiable dans la même pièce ou la pièce voisine.
Quelle différence entre le HC-05 et le HC-06 ?
Les deux utilisent le Bluetooth classique. Le HC-05 peut être maître ou esclave et a 6 broches ; le HC-06 est uniquement esclave et a généralement 4 broches. Les deux suffisent pour dialoguer avec un téléphone ; pour relier deux Arduino, il faut au moins un HC-05.
Quel est le code PIN par défaut du HC-05 ?
C'est 1234 sur la plupart des modules et 0000 sur certains. Tu peux le changer en mode AT avec la commande AT+PSWD ; si tu ne veux pas que d'autres pilotent ton projet, changer le code par défaut est une bonne idée.
Peut-on faire communiquer deux Arduino avec des HC-05 ?
Oui. Configure un HC-05 en maître avec AT+ROLE=1 et indique-lui l'adresse de l'autre module avec la commande AT+BIND ; le second module reste esclave. À la mise sous tension, le maître se connecte automatiquement à l'esclave et les deux Arduino dialoguent par le port série.
Le pont diviseur sur la broche RXD est-il vraiment nécessaire ?
Il est recommandé. Les broches de données du HC-05 fonctionnent en 3,3 V ; beaucoup de modules supportent le 5 V un certain temps, mais peuvent s'abîmer à la longue. Un simple pont de 1 kΩ et 2 kΩ supprime ce risque. La broche TXD n'a pas besoin de pont diviseur.
Projets à réaliser après cet article
Voir tous les projets
Voiture contrôlée par Bluetooth avec L298N
Projet de voiture robot 2WD (deux moteurs, quatre roues) qui peut être contrôlée depuis le téléphone avec Arduino et le module Bluetooth HC-05. Un total de quatre roues est entraîné simultanément en c

Robot évitant les obstacles
Que diriez-vous de construire un véhicule intelligent qui trouve son propre chemin ? Le Robot Évitant les Obstacles scrute en permanence son environnement grâce au capteur ultrasonique situé devant lu
Autres articles
Apprends pas à pas à brancher le module Bluetooth HC-05 sur un Arduino en toute sécurité, à l'appairer avec ton téléphone, à commander une LED et un relais depuis le téléphone et à changer son nom et son code PIN avec les commandes AT.

