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.

Gemarkeerd diagram van een HC-05 Bluetooth-module: een blauw breakoutbord met een Bluetooth-radiomodule in een metalen afscherming met hoekklinknagels, een zigzag-PCB-antenne, een statusled en langs de onderrand een 6-pins header voor EN, VCC, GND, TXD, RXD en STATE voor de seriële verbinding.
De module zet een Bluetooth-verbinding om in een gewone seriële verbinding. Kruis de TX- en RX-lijnen tussen de module en de microcontroller, en de module gedraagt zich precies als een bedraade kabel. SVG downloaden

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.

  1. Schakel de module uit.
  2. Houd EN hoog of houd de kleine knop ingedrukt als je bord die heeft.
  3. Schakel hem in terwijl je EN vasthoudt.
  4. De led knippert nu langzaam, ongeveer één keer per twee seconden, in plaats van snel.
  5. 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

Bronnen