Bauteil · Kommunikation

HC-05 Bluetooth Module

Das HC-05 bringt Bluetooth-Seriell in einen Roboter – mit dem Handy koppeln, um ihn zu fahren oder Daten zu streamen, über die TX/RX-Pins wie verkabelt.

Was es ist

Das HC-05 ist der einfachste Weg, einen Roboter kabellos zu machen. Es ist ein Bluetooth-Modul, das sich wie ein Seriellkabel ohne Kabel verhält: Dein Mikrocontroller liest und schreibt Bytes auf seinen TX/RX-Pins exakt wie über USB, aber das andere Ende ist ein per Bluetooth gekoppeltes Handy oder Laptop. Sende ein F aus einer Handy-App und dein Roboter fährt vorwärts – kein WLAN, kein Netzwerk, keine Konten.

Beschriftetes Diagramm eines HC-05-Bluetooth-Moduls: Blaues Breakout-Board mit metallgeschirmter Bluetooth-Funkdose mit Ecknieten, Zickzack-Leiterplattenantenne, Status-LED und 6-Pin-Leiste (EN, VCC, GND, TXD, RXD, STATE) unten für seriellen Anschluss.
Das Modul verwandelt eine Bluetooth-Verbindung in eine schlichte serielle Verbindung – TX/RX zum Mikrocontroller kreuzen, und es sieht wie ein verdrahtetes Kabel aus. SVG herunterladen

Wie es funktioniert

Das HC-05 implementiert das Bluetooth-Serial-Port-Profile (SPP). Einmal gekoppelt erscheint alles, was das Modul über Funk empfängt, auf seinem TX-Pin, und alles, was du an seinen RX-Pin sendest, geht über Funk ans gekoppelte Gerät. Dein Code nutzt einfach den seriellen Port – Serial.read() / Serial.print() –, und die Funk­verbindung ist unsichtbar. Konfiguration (Name, Baud, Master/Slave-Rolle) geschieht per AT-Befehle in einem separaten Befehlsmodus, aber für die meisten Roboter tun es die Standards.

Wann man es verwendet

Greife zum HC-05, wenn du einen Roboter ohne Strippe befehligen oder beobachten willst:

  • Handy-gesteuerte Roboter – eine Bluetooth-App sendet Fahrbefehle, die der Roboter über seriell liest und in Motor­steuerung verwandelt.
  • Live-Telemetrie – Sensorwerte oder Odometrie zurück an einen Laptop streamen, während der Roboter läuft.
  • Kabelloses Tuning – Parameter live anpassen statt neu zu flashen.

Wenn der Roboter schon einen ESP32 nutzt, brauchst du kein HC-05 – der ESP32 hat Bluetooth und WLAN eingebaut. Das HC-05 ist das Add-on, das einem Arduino Uno denselben kabellosen Trick gibt.

Verdrahtung und Fallstricke

  • Serielle Leitungen kreuzen: Modul-TX → Board-RX, Modul-RX → Board-TX. Andersherum ist die Nr. 1 unter den „verbindet nicht“-Ursachen.
  • Den RX-Pin von einem 5-V-Board wie dem Uno auf 3,3 V herunter­teilen.
  • Den Hardware-Seriell-Port freihalten beim Code-Upload, oder ein Software-Seriell-Pinpaar nutzen – Modul und USB-Programmer können sich den einen Hardware-UART des Uno nicht teilen.
  • Zuerst koppeln (PIN meist 1234/0000); die Bord-LED zeigt den Verbindungs­zustand.

Pinbelegung

Pin Name Was er tut
1 EN / KEY Beim Einschalten HIGH gehalten für AT-Befehlsmodus
2 VCC 3,6–6 V. Das Breakout regelt intern auf 3,3 V
3 GND Masse
4 TXD Modul sendet. Geht an RX des Mikrocontrollers
5 RXD Modul empfängt. 3,3-V-Logik – 5-V-Signal teilen
6 STATE HIGH bei verbundenem Gerät. Wirklich nützlich, meist ignoriert

Der STATE-Pin verdient Besseres. Ein Roboter, der ihn liest, weiß, wenn sein Handy aus der Reichweite läuft, was der Unterschied ist zwischen sicher anhalten und in eine Wand fahren, während er auf einen Befehl wartet, der nie kommt.

An einen Arduino verdrahten

Die zwei Fehler hier erklären die meisten „verbindet nicht“-Meldungen.

HC-05 Arduino Uno Hinweis
VCC 5 V Der Bordregler verkraftet es
GND GND
TXD Pin 10 (SoftwareSerial RX) Modul-TX → Board-RX. Kreuzen
RXD Pin 11 über Teiler (SoftwareSerial TX) Board-TX → Modul-RX, über 2:1-Teiler
EN Offen lassen Nur für AT-Modus nötig
STATE Beliebiger Digitalpin Optionale Verbindungs­prüfung

Serielle Leitungen kreuzen

TX spricht, RX hört zu. Zwei Geräte, die beide auf der verbundenen Leitung sprechen, erreichen nichts, und es gibt keinen Fehler – das Modul koppelt prima, die LED wird fest, und Daten bewegen sich nie. Modul-TX geht an Board-RX. Modul-RX geht an Board-TX.

Die RX-Leitung teilen

RXD ist ein 3,3-V-Eingang und ein Arduino Uno treibt 5 V. Zwei Widerstände:

Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
                        │
                      2 kΩ
                        │
                       GND

TXD braucht andersherum keinen Teiler – die 3,3-V-Ausgabe des Moduls überschreitet die 3,0-V-High-Schwelle des Uno.

Pins 0 und 1 nicht nutzen

Der Uno hat einen Hardware-UART und der USB-Programmer besitzt ihn schon. Das Modul dorthin zu verdrahten, und Uploads scheitern im angeschlossenen Zustand, Monitor­ausgabe geht ans Modul, und Debugging wird unmöglich. Nutze SoftwareSerial auf zwei anderen Pins.

Minimaler funktionierender 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
  }
}

Die Verbindungs­prüfung oben in der Schleife ist der Teil, den die meisten Tutorials weglassen, und es ist der Teil, der einen Durchgänger stoppt. Bluetooth-Reichweite sind etwa 10 m und Wände kürzen scharf; ein Roboter, der nach Linkabriss seinen letzten Befehl weiter ausführt, fährt weiter, bis er irgendwo anstößt.

AT-Befehlsmodus

Name, Baudrate oder PIN des Moduls zu ändern braucht AT-Modus, und hineinzukommen hat eine eigene Sequenz, die nichts am Modul offensichtlich macht.

  1. Modul ausschalten.
  2. EN HIGH halten (oder die kleine Taste drücken und halten, wenn dein Board eine hat).
  3. Einschalten, während EN gehalten wird.
  4. Die LED blinkt nun langsam – grob alle zwei Sekunden – statt schnell.
  5. Mit 38400 Baud sprechen, nicht 9600, mit Newline und 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

Zwei Fallstricke: AT-Modus ist immer 38400, egal welche Datenmodus-Baud du setzt, und die LED-Blinkrate ist der einzige verlässliche Hinweis, dass du drin bist. Schnelles Blinken heißt Datenmodus und deine AT-Befehle werden schlicht über Funk an das Gekoppelte gesendet.

HC-05 oder HC-06?

Sie sehen gleich aus und werden austauschbar verkauft, und es gibt einen echten Unterschied.

HC-05 HC-06
Rolle Master oder Slave Nur Slave
Kann Verbindung aufbauen Ja Nein
AT-Modus Über EN-Pin, 38400 Jederzeit im ungekoppelten Zustand, mit Daten-Baud
Preis Etwas mehr Etwas weniger

Wenn das Modul jemals nur eine Verbindung vom Handy annehmen muss, reicht ein HC-06. Wenn zwei Roboter je miteinander reden sollen oder ein Roboter sich mit einem Modul verbinden statt auf Verbindung warten soll, brauchst du die Master-Rolle des HC-05.

Fehlerbehebung

Symptom Wahrscheinliche Ursache Lösung
Koppelt, aber keine Daten TX/RX nicht gekreuzt Modul-TX → Board-RX, Modul-RX → Board-TX
Müllzeichen Baud-Fehlanpassung Beide Enden auf 9600 oder beide auf denselben Wert
Uploads scheitern im angeschlossenen Zustand Modul an Pins 0/1 Auf SoftwareSerial-Pins umziehen
AT-Befehle tun nichts Nicht wirklich im AT-Modus EN beim Einschalten halten; auf langsames Blinken prüfen
AT-Modus antwortet nicht Daten-Baud genutzt AT-Modus ist immer 38400
Koppelt nicht Falsche PIN 1234, dann 0000 versuchen
Bricht nach wenigen Metern ab Class-2-Reichweite plus Wände Erwartet; STATE-Pin für sicheres Versagen nutzen
Roboter fährt nach Trennung weiter Keine Linkprüfung STATE lesen und bei LOW stoppen
Auf USB ok, auf Akku nicht Versorgungs­einbruch Die Sendebursts des Funks brauchen steife 5 V

HC-05 oder ein ESP32?

Wenn du Bauteile wählst statt nimmst, was du hast, ist das die echte Entscheidung.

HC-05 + Arduino ESP32
Kabellos Bluetooth Classic SPP WLAN und Bluetooth, eingebaut
Extra-Hardware Ein Modul, ein Teiler, zwei Pins Keine
Steuer­schnittstelle Ein serieller Bytestrom Eine Webseite, die der Roboter selbst serviert
Reichweite ~10 m ~50 m über WLAN oder überall mit Netzwerk
Handy-App nötig Ja – ein generisches Bluetooth-Terminal Nein – jeder Browser
Lernwert Serielle Protokolle, die schlichteste Verbindung Netzwerke, ein größeres Thema

Das HC-05 ist die richtige Antwort, wenn du schon einen Arduino hast und den kürzesten Weg zu einem kabellosen Roboter willst. Es ist wirklich simpel: ein Byte hinein, ein Byte hinaus, gar keine Netzwerk­konzepte. Für einen Neubau, wo kabellos Pflicht ist, tut ein ESP32 mehr für weniger und braucht keine Extrateile – und ein Roboter, der seine eigene Steuerseite serviert, braucht keine installierte App auf irgendjemandes Handy.

Den Graphen erkunden

Verwendet in diesen Bauprojekten

Projekte, Lernpfade und Simulatoren, die HC-05 Bluetooth Module verwenden.

Vergleich

Alternativen

Fragen

FAQ zu HC-05 Bluetooth Module

Was ist ein HC-05?

Das HC-05 ist ein Bluetooth-Modul, das eine Funkverbindung in eine schlichte serielle (UART-)Verbindung verwandelt. Für deinen Mikrocontroller sieht es exakt wie ein verdrahtetes Seriellkabel aus – du liest und schreibst Bytes auf TX/RX –, nur dass das andere Ende dein Handy oder PC über Bluetooth ist. Es ist der einfachste Weg, einen Roboter kabellos zu steuern.

Wie schließt man ein HC-05 an einen Arduino an?

VCC und GND versorgen, dann die seriellen Leitungen kreuzen – Modul-TX an Arduino-RX, Modul-RX an Arduino-TX. Weil der RX-Pin des HC-05 3,3 V ist, senke die 5-V-TX des Arduino mit einem Spannungsteiler. Dann geht alles, was du über seriell druckst, kabellos ans gekoppelte Handy und umgekehrt.

Welche Reichweite hat das HC-05?

Etwa 10 Meter Sichtlinie – es ist ein Class-2-Bluetooth-Gerät. Wände und Störungen kürzen das. Das reicht locker, um einen Roboter vom Handy durch einen Raum zu fahren, aber für Fernsteuerung über Weite würdest du zu WLAN oder Funk wechseln.

Wie koppelt man HC-05-Module?

Zum Koppeln mit einem Handy das Modul versorgen, in den Bluetooth-Einstellungen des Handys das HC-05 wählen und die PIN eingeben (meist 1234 oder 0000). Um zwei HC-05 miteinander zu koppeln, setze eines per AT-Befehle als Master und eines als Slave und binde sie per Adresse.

Wie programmiert man das HC-05?

Das HC-05 hat zwei Modi. Im Datenmodus reicht es serielle Bytes einfach durch. Um Name, Baudrate oder Master/Slave-Rolle zu ändern, versetze es in den AT-Befehlsmodus – EN/KEY-Pin beim Einschalten high halten – und sende AT-Befehle über seriell.

Weiterführende Literatur

Quellen