Composants · 6 min de lecture

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.

Module Bluetooth HC-05 et câbles de connexion
Module Bluetooth HC-05 : la piste en zigzag en haut est l'antenne, et à gauche se trouvent 6 broches : EN, VCC, GND, TXD, RXD et STATE.

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éristiqueValeur
Version Bluetooth2.0 + EDR (classique, SPP)
Portée~10 m en champ libre
Tension d'alimentation3,6–6 V (la carte du module a un régulateur)
Niveau logique3,3 V
Débit par défaut9600 bauds (38400 en mode AT)
PIN par défaut1234 ou 0000
RôleMaître et esclave

HC-05, HC-06 et HM-10 : les différences

ModuleBluetoothRôleBrochesiPhone
HC-052.0 classiqueMaître et esclave6Ne fonctionne pas
HC-062.0 classiqueEsclave uniquement4Ne fonctionne pas
HM-104.0 BLEMaître et esclave6Fonctionne
Module Bluetooth HC-06
Module Bluetooth HC-06 : très proche du HC-05, mais avec 4 broches et uniquement en esclave ; c'est suffisant pour dialoguer avec un téléphone.
Le HC-05 et le HC-06 ne fonctionnent pas avec l'iPhone : iOS ne permet pas aux applications ordinaires d'ouvrir une liaison série en Bluetooth classique. Pour communiquer avec un iPhone, utilise un module BLE (Bluetooth Low Energy) comme le HM-10, ou un ESP32 avec BLE. Les téléphones Android et les ordinateurs se connectent sans problème au HC-05.

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-05RôleArduino Uno
EN (KEY)Passage en mode ATNon branchée (3,3 V pour le mode AT)
VCCAlimentation5V
GNDMasseGND
TXDSortie de données du moduleD10 (RX de SoftwareSerial)
RXDEntrée de données du module (3,3 V)D11, via un pont 1 kΩ / 2 kΩ
STATEHIGH une fois connectéNon branchée, ou une broche d'entrée si besoin
Tu peux aussi brancher le HC-05 sur les broches 0 et 1 de l'Uno, mais ces broches servent aussi au téléversement par USB : avec le module branché, le téléversement échoue. Utiliser les broches 10 et 11 avec SoftwareSerial laisse libres à la fois le téléversement et le moniteur série.

É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 :

Arduino (C++)
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 :

Arduino (C++)
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 :

CommandeRôle
ATTest de connexion, réponse OK
AT+NAME=BlueGraysChange le nom visible du module
AT+PSWD="4321"Change le code PIN (sans guillemets sur les anciennes versions)
AT+UART=9600,0,0Règle le débit en mode données
AT+ROLE=0Le passe en esclave (1 pour maître)
AT+VERSION?Affiche la version du firmware
AT+ORGLRétablit les réglages d'usine
Sur certaines versions du HC-05, quelques commandes AT (AT+NAME, par exemple) ne répondent que si tu maintiens le bouton appuyé pendant l'envoi. Si AT renvoie OK mais que certaines commandes restent muettes, réessaie en gardant le bouton appuyé.

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) :

MicroPython
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.

Voir tous les projets

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.