Component · Communicatie
HC-05 Bluetooth-module
De HC-05 voegt draadloze seriële communicatie aan een robot toe. Koppel hem aan je telefoon om te besturen of te streamen via dezelfde TX/RX-pins als bedraad.
Wat het is
De HC-05 is de eenvoudigste manier om een robot draadloos te maken. Het is een
Bluetooth-module die voor de microcontroller werkt als een gewone bedraade seriële kabel: je microcontroller leest en
schrijft bytes op de TX/RX-pins precies zoals via USB, maar het andere uiteinde is een telefoon of
laptop die via Bluetooth is gekoppeld. Stuur een F vanuit een telefoonapp en je robot rijdt
vooruit, zonder Wi-Fi, netwerk of accounts.
Hoe het werkt
De HC-05 implementeert het Bluetooth Serial Port Profile (SPP). Na het koppelen verschijnt
alles wat de module draadloos ontvangt op de TX-pin, en alles wat je naar de RX-pin stuurt,
gaat draadloos naar het gekoppelde apparaat. Je code gebruikt alleen de seriële poort,
Serial.read() / Serial.print(), en de draadloze verbinding is onzichtbaar. Configuratie, zoals
naam, baud en master-/slave-rol, gebeurt met AT-opdrachten in een afzonderlijke opdrachtmodus, maar
voor de meeste robots werken de standaardwaarden meteen.
Wanneer je hem gebruikt
Kies een HC-05 wanneer je een robot zonder kabel wilt besturen of bewaken:
- Robots die met een telefoon worden bestuurd — een Bluetooth-app stuurt bewegingscommando’s die de robot via serial leest en omzet in motorbesturing.
- Realtime telemetrie — stuur sensorwaarden of odometrie tijdens het rijden terug naar een laptop.
- Draadloos afstellen — pas parameters onderweg aan in plaats van telkens opnieuw te programmeren.
Gebruikt je robot al een ESP32, dan heb je geen HC-05 nodig; de ESP32 heeft Bluetooth en Wi-Fi ingebouwd. De HC-05 is de uitbreiding die een Arduino Uno dezelfde draadloze mogelijkheid geeft.
Bedrading en valkuilen
- Kruis de seriële lijnen: TX van de module naar RX van het bord en RX van de module naar TX van het bord. Omgekeerd bedraden is de meest voorkomende oorzaak van “verbinding werkt niet”.
- Verlaag het RX-signaal naar 3,3 V met een spanningsdeler als het bord op 5 V werkt, zoals de Uno.
- Maak de hardware-serialpoort vrij tijdens het uploaden of gebruik twee andere software-serialpinnen; de module en de USB-programmer kunnen de enige hardware-UART van de Uno niet delen.
- Koppel eerst met PIN-code 1234/0000; de ingebouwde led toont de verbindingsstatus.
Pindindeling
| Pin | Naam | Functie |
|---|---|---|
| 1 | EN / KEY |
Bij het inschakelen hoog houden om de AT-opdrachtmodus te openen |
| 2 | VCC |
3,6–6 V. Het breakoutbord zet de spanning intern om naar 3,3 V |
| 3 | GND |
Aarde |
| 4 | TXD |
Module verzendt. Gaat naar de RX van de microcontroller |
| 5 | RXD |
Module ontvangt. 3,3V-logica; verlaag een 5V-signaal met een spanningsdeler |
| 6 | STATE |
HIGH wanneer een apparaat verbonden is. Echt nuttig, meestal genegeerd |
De STATE-pin verdient meer aandacht dan hij krijgt. Een robot die hem uitleest, weet wanneer de
telefoon buiten bereik is. Dat is het verschil tussen veilig stoppen en tegen een muur rijden terwijl
je wacht op een commando dat nooit komt.
Aansluiten op een Arduino
De twee fouten hier verklaren de meeste meldingen van “de module verbindt niet”.
| HC-05 | Arduino Uno | Opmerking |
|---|---|---|
| VCC | 5 V | De spanningsregelaar op het bord verwerkt dit |
| GND | GND | |
| TXD | Pin 10 (SoftwareSerial RX) | TX van module naar RX van bord. Kruis ze |
| RXD | Pin 11 via spanningsdeler (SoftwareSerial TX) | TX van bord naar RX van module, via 2:1-spanningsdeler |
| EN | Laat open | Alleen nodig voor AT-modus |
| STATE | Elke digitale pin | Optionele verbindingscontrole |
Kruis de seriële lijnen
TX zendt, RX ontvangt. Als twee apparaten allebei op de verbonden draad praten, bereiken ze niets: de communicatie mislukt zonder foutmelding, terwijl de module prima koppelt en de led onafgebroken blijft branden. TX van de module gaat naar RX van het bord. RX van de module gaat naar TX van het bord.
Verlaag het RX-signaal
RXD is een 3,3V-ingang en een Arduino Uno stuurt 5 V. Gebruik daarvoor een spanningsdeler met
twee weerstanden:
Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
│
2 kΩ
│
GND
TXD heeft in de andere richting geen spanningsdeler nodig; de 3,3V-uitgang van de module haalt
de 3,0V-drempel voor logisch hoog van de Uno.
Gebruik pin 0 en 1 niet
De Uno heeft één hardware-UART en de USB-programmer heeft die al in gebruik. Sluit je de module daar
aan, dan mislukken uploads zolang hij verbonden is, gaat de uitvoer van de seriële monitor naar de
module en wordt debuggen onmogelijk. Gebruik twee andere pinnen voor SoftwareSerial.
Minimaal werkende code
#include <SoftwareSerial.h>
SoftwareSerial bt(10, 11); // RX (from module TX), TX (to module RX)
const int STATE_PIN = 8;
void setup() {
Serial.begin(115200); // USB, for debugging
bt.begin(9600); // HC-05 default in data mode
pinMode(STATE_PIN, INPUT);
}
void loop() {
// Lose the link, stop the robot. Do this before reading commands.
if (digitalRead(STATE_PIN) == LOW) { stopMotors(); }
if (bt.available()) {
char c = bt.read();
switch (c) {
case 'F': driveForward(); break;
case 'B': driveBackward(); break;
case 'L': turnLeft(); break;
case 'R': turnRight(); break;
case 'S': stopMotors(); break;
}
Serial.print("cmd: "); Serial.println(c); // echo to USB for debugging
}
}
De verbindingscontrole bovenaan de lus is het onderdeel dat de meeste tutorials weglaten, en juist het onderdeel dat voorkomt dat de robot op hol slaat. Het Bluetooth-bereik is ongeveer 10 m en muren beperken het sterk; een robot die zijn laatste commando blijft uitvoeren nadat de verbinding is verbroken, rijdt door tot hij ergens tegenaan komt.
AT-opdrachtmodus
De naam, baudrate of PIN-code van de module wijzigen vereist de AT-modus, en daarvoor geldt een specifieke volgorde die uit de module zelf niet blijkt.
- Schakel de module uit.
- Houd
ENhoog of houd de kleine knop ingedrukt als je bord die heeft. - Schakel hem in terwijl je
ENvasthoudt. - De led knippert nu langzaam, ongeveer één keer per twee seconden, in plaats van snel.
- Communiceer op 38400 baud, niet op 9600, en stuur zowel een newlineteken als een carriage return.
AT -> OK
AT+NAME=LineBot -> OK set the name shown when pairing
AT+PSWD="1234" -> OK set the pairing PIN (quotes on newer firmware)
AT+UART=115200,0,0 -> OK data-mode baud rate
AT+ROLE=0 -> OK 0 = slave (normal), 1 = master
AT+ADDR? -> +ADDR the module's own address
Twee valkuilen: AT-modus gebruikt altijd 38400, ongeacht de ingestelde baudrate in datamodus, en de knippersnelheid van de led is de enige betrouwbare aanwijzing dat je in die modus zit. Snel knipperen betekent datamodus; je AT-opdrachten worden dan gewoon draadloos naar het gekoppelde apparaat gestuurd.
HC-05 of HC-06?
Ze zien er identiek uit en worden onderling uitwisselbaar verkocht, maar er is één wezenlijk verschil.
| HC-05 | HC-06 | |
|---|---|---|
| Rol | Master of slave | Alleen slave |
| Kan zelf een verbinding opzetten | Ja | Nee |
| AT-modus | Via EN-pin, 38400 |
Elk moment wanneer niet gekoppeld, op de baudrate in datamodus |
| Prijs | Iets duurder | Iets goedkoper |
Moet de module alleen een verbinding vanaf een telefoon accepteren, dan volstaat een HC-06. Wil je ooit twee robots met elkaar laten praten, of wil je dat een robot zelf verbinding maakt met een module in plaats van op een verbinding te wachten, dan heb je de masterrol van de HC-05 nodig.
Problemen oplossen
| Symptoom | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Koppelt, maar er worden geen gegevens verstuurd | TX/RX niet gekruist | TX van module naar RX van bord en RX van module naar TX van bord |
| Onleesbare tekens | Baudrate komt niet overeen | Zet beide kanten op 9600 of op dezelfde waarde |
| Uploaden mislukt terwijl de module verbonden is | Module op pins 0/1 | Gebruik SoftwareSerial-pins |
| AT-opdrachten doen niets | Niet echt in AT-modus | Houd EN tijdens het inschakelen vast; controleer het langzame knipperen |
| AT-modus geeft geen antwoord | Baudrate uit datamodus gebruikt | AT-modus is altijd 38400 |
| Koppelt niet | Verkeerde PIN-code | Probeer 1234 en daarna 0000 |
| Verbinding valt enkele meters verder weg | Klasse 2 plus muren | Verwacht; gebruik de STATE-pin voor fail-safe gedrag |
| Robot blijft rijden na het verbreken van de verbinding | Geen verbindingscontrole | Lees STATE en stop bij LOW |
| Werkt op USB-voeding, maar niet op accu | Inzakkende voeding | De stroompieken van de radio vereisen een stijve 5 V |
HC-05 of ESP32?
Als je onderdelen kiest in plaats van te gebruiken wat je al hebt, is dit de echte keuze.
| HC-05 + Arduino | ESP32 | |
|---|---|---|
| Draadloos | Bluetooth Classic SPP | Ingebouwde Wi-Fi en Bluetooth |
| Extra hardware | Een module, spanningsdeler en twee pinnen | Geen |
| Besturingsinterface | Een seriële bytestroom | Een webpagina die de robot zelf aanbiedt |
| Bereik | ~10 m | ~50 m via Wi-Fi, of overal met een netwerk |
| Telefoonapp nodig | Ja; een generieke Bluetooth-terminal | Nee; elke browser |
| Leerwaarde | Seriële protocollen, de eenvoudigste verbinding | Netwerken, een veel groter onderwerp |
De HC-05 is de juiste keuze als je al een Arduino hebt en de kortste route naar een draadloze robot wilt. Hij is werkelijk eenvoudig: een byte in, een byte uit, helemaal geen netwerkconcepten. Voor een nieuw bouwproject waarvoor draadloze communicatie vereist is, doet een ESP32 meer voor minder en is er geen extra hardware nodig. Een robot die zijn eigen besturingspagina aanbiedt, vereist bovendien geen app op andermans telefoon.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de HC-05 Bluetooth-module voorkomt.
Vergelijken
Alternatieven
Vragen
FAQ over de HC-05 Bluetooth-module
Wat is een HC-05?
De HC-05 is een Bluetooth-module die een draadloze verbinding omzet in een gewone seriële verbinding (UART). Voor je microcontroller werkt hij precies als een bedraade seriële kabel: je leest en schrijft bytes op TX/RX, maar het andere uiteinde is je telefoon of pc via Bluetooth. Het is de eenvoudigste manier om een robot draadloos te besturen.
Hoe sluit ik een HC-05 aan op een Arduino?
Voed VCC en GND en kruis daarna de seriële lijnen: TX van de module naar RX van de Arduino en RX van de module naar TX van de Arduino. Omdat de RX-pin van de HC-05 op 3,3 V werkt, verlaag je het 5V-signaal op de Arduino TX met een spanningsdeler voordat je het op RX aansluit. Alles wat je via serial uitstuurt, gaat daarna draadloos naar de gekoppelde telefoon en omgekeerd.
Wat is het bereik van de HC-05?
Ongeveer 10 meter op zichtlijn; het is een Bluetooth-apparaat van klasse 2. Muren en interferentie verkorten dat aanzienlijk. Dat is ruim voldoende om met je telefoon een robot door een kamer te besturen, maar voor besturing op grotere afstand gebruik je Wi-Fi of een aparte radio.
Hoe koppel ik HC-05-modules?
Schakel de module in, open de Bluetooth-instellingen van je telefoon, selecteer de HC-05 en voer de PIN-code in, meestal 1234 of 0000. Om twee HC-05-modules aan elkaar te koppelen, stel je met AT-opdrachten de ene in als master en de andere als slave en koppel je ze op basis van hun adres aan elkaar.
Hoe programmeer ik de HC-05?
De HC-05 heeft twee modi. In datamodus geeft hij seriële bytes simpelweg door. Om zijn naam, baudrate of master-/slave-rol te wijzigen, zet je hem in de AT-opdrachtmodus: houd de EN/KEY-pin tijdens het inschakelen hoog en stuur AT-opdrachten via serial.
Verder lezen