Bluetooth-Module HC-05 und HC-06 am Arduino

FunduinoZuletzt aktualisiert am

Eine LED per Smartphone schalten – auch per Sprachbefehl

Mit dem Bluetooth-Modul HC-05 kannst du drahtlos zwischen einem Arduino-Mikrocontroller und zum Beispiel einem Smartphone oder Laptop kommunizieren. Du kannst Daten an den Mikrocontroller senden und auch Daten von ihm empfangen.

Der Unterschied zwischen HC-05 und HC-06: Das HC-05 lässt sich sowohl als „master“ als auch als „slave“ betreiben, das HC-06 nur als „slave“. Das HC-06 kann also nur eine Verbindung von einem anderen Gerät annehmen, während das HC-05 auch selbst eine Verbindung zu einem anderen Gerät herstellen kann. Diese Anleitung funktioniert mit beiden Modulen.

Für die Verwendung mit dem Smartphone gibt es sehr viele Apps für die jeweils gewünschte Funktion. In diesem Beispiel schaltest du eine LED über eine App auf dem Smartphone ein und aus.

Bluetooth-Modul HC-05 auf einem Steckbrett am Arduino UNO
Das Bluetooth-Modul HC-05 am Arduino UNO

Das Bluetooth-Modul anschließen

Die Verkabelung des HC-05 bzw. HC-06 ist ganz einfach – links das Modul, rechts der UNO R3:

  • +5V – 3,3V
  • GND – GND
  • TX – RX
  • RX – TX

Dazu schließt du noch eine LED an Pin 13 des Mikrocontrollers an.

Schaltplan mit Bluetooth-Modul HC-05 am Arduino UNO und einer LED an Pin 13
Schaltplan: HC-05 und eine LED an Pin 13

Eine LED per Bluetooth schalten

Nachdem du das Modul wieder eingesteckt hast, sollte am HC-05 eine rote und am HC-06 eine grüne LED schnell blinken. Das bedeutet, dass es bereit ist, sich mit einem anderen Gerät zu verbinden.

Jetzt verbindest du das Modul mit dem Smartphone: Suche in den Bluetooth-Einstellungen deines Smartphones nach Geräten. Das Modul sollte unter dem Namen HC-05 oder HC-06 auftauchen. Beim Verbinden wirst du nach einer PIN gefragt – sie ist meistens auf 1234 voreingestellt.

Achtung: Beim Hochladen auf den Mikrocontroller musst du das Bluetooth-Modul herausnehmen. Sonst erscheint die Fehlermeldung, dass der Code nicht hochgeladen werden kann. Nach dem Hochladen setzt du das Modul wieder ein.

Programmcode – LED per Bluetooth schalten
char blueToothVal; // Werte sollen per Bluetooth gesendet werden
char lastValue;    // speichert den letzten Status der LED (on/off)
void setup()
{
  Serial.begin(9600); // Serielle Verbindung starten, Baudrate auf 9600 festgelegt
  pinMode(13, OUTPUT); // Pin 13 wird als Ausgang festgelegt
}
void loop()
{
  if (Serial.available()) // wenn Daten empfangen werden ...
  {
    blueToothVal = Serial.read(); // ... sollen diese ausgelesen werden
  }
  if (blueToothVal == '1') // wenn das Bluetooth-Modul eine "1" empfängt ...
  {
    digitalWrite(13, HIGH); // ... soll die LED leuchten
    if (lastValue != '1') // wenn der letzte empfangene Wert keine "1" war ...
      Serial.println(F("LED is on")); // ... soll im Seriellen Monitor "LED is on" erscheinen
    lastValue = blueToothVal;
  }
  else if (blueToothVal == '0') // wenn das Bluetooth-Modul eine "0" empfängt ...
  {
    digitalWrite(13, LOW); // ... soll die LED nicht leuchten
    if (lastValue != '0') // wenn der letzte empfangene Wert keine "0" war ...
      Serial.println(F("LED is off")); // ... soll im Seriellen Monitor "LED is off" erscheinen
    lastValue = blueToothVal;
  }
}

Sprachsteuerung: den Aufbau erweitern

Um zu zeigen, was mit dem Bluetooth-Modul sonst noch möglich ist, schalten wir die LEDs im zweiten Beispiel per Sprachbefehl ein und aus.

Die Verkabelung unterscheidet sich kaum vom Beispiel zuvor – im Prinzip kommen nur vier weitere LEDs hinzu. Verwende am besten dieselben Farben in derselben Reihenfolge wie auf dem Steckplan, damit es später bei den Sprachbefehlen keine Verwechslungen gibt.

Steckplan mit HC-05 und fünf farbigen LEDs an den Pins 2 bis 6 des Arduino UNO
Steckplan für die Sprachsteuerung mit fünf LEDs

Sprachsteuerung: der Programmcode

Der Sketch sammelt die Zeichen, die über Bluetooth eintreffen, bis ein "#" das Ende des Befehls anzeigt. Anschließend vergleicht er den empfangenen Text mit den festgelegten Befehlen und schaltet die passende LED.

Achtung: Auch hier musst du das Bluetooth-Modul vor dem Hochladen herausnehmen und danach wieder einsetzen.

Programmcode – Sprachsteuerung für fünf LEDs
String voice;
int
  ledweiss = 2, // Die weiße LED mit Pin 2 verbinden
  ledrot = 3,   // Die rote LED mit Pin 3 verbinden
  ledblau = 4,  // usw.
  ledgelb = 5,
  ledgruen = 6;
void allon() // Die Funktion für den Befehl, alle LEDs anzuschalten
{
  digitalWrite(ledweiss, HIGH);
  digitalWrite(ledrot, HIGH);
  digitalWrite(ledblau, HIGH);
  digitalWrite(ledgelb, HIGH);
  digitalWrite(ledgruen, HIGH);
}
void alloff() // Die Funktion für den Befehl, alle LEDs auszuschalten
{
  digitalWrite(ledweiss, LOW);
  digitalWrite(ledrot, LOW);
  digitalWrite(ledblau, LOW);
  digitalWrite(ledgelb, LOW);
  digitalWrite(ledgruen, LOW);
}
void setup()
{
  Serial.begin(9600);
  pinMode(ledweiss, OUTPUT); // Die Pins mit den LEDs werden als Ausgänge festgelegt
  pinMode(ledrot, OUTPUT);
  pinMode(ledblau, OUTPUT);
  pinMode(ledgelb, OUTPUT);
  pinMode(ledgruen, OUTPUT);
}
void loop()
{
  while (Serial.available()) // prüfen, ob lesbare Werte vorhanden sind
  {
    delay(10);
    char c = Serial.read();
    if (c == '#') { break; } // "#" zeigt das Ende eines Befehls an, deshalb wird die Schleife bei einem "#" verlassen
    voice += c;
  }
  if (voice.length() > 0)
  {
    Serial.println(voice);
    // in diesem Abschnitt werden die Befehle den einzelnen Funktionen zugeordnet
    if (voice == "*alle an") { allon(); } // alle Pins sollen angeschaltet werden (vorher festgelegte Funktion allon)
    else if (voice == "*alle aus") { alloff(); } // alle Pins sollen ausgeschaltet werden (vorher festgelegte Funktion alloff)
    // in diesem Abschnitt wird das Einschalten der einzelnen LEDs festgelegt
    else if (voice == "*weiß an") { digitalWrite(ledweiss, HIGH); }
    else if (voice == "*rot an") { digitalWrite(ledrot, HIGH); }
    else if (voice == "*blau an") { digitalWrite(ledblau, HIGH); }
    else if (voice == "*gelb an") { digitalWrite(ledgelb, HIGH); }
    else if (voice == "*grün an") { digitalWrite(ledgruen, HIGH); }
    // in diesem Abschnitt wird das Ausschalten der einzelnen LEDs festgelegt
    else if (voice == "*weiß aus") { digitalWrite(ledweiss, LOW); }
    else if (voice == "*rot aus") { digitalWrite(ledrot, LOW); }
    else if (voice == "*blau aus") { digitalWrite(ledblau, LOW); }
    else if (voice == "*gelb aus") { digitalWrite(ledgelb, LOW); }
    else if (voice == "*grün aus") { digitalWrite(ledgruen, LOW); }
    voice = "";
  }
}

Die App „BT Voice Control for Arduino“

Für die Sprachsteuerung brauchst du eine passende App. Wir haben die kostenlose Android-App „BT Voice Control for Arduino“ von SimpleLabsIN verwendet.

Als Erstes verbindest du dich auch hier mit dem Bluetooth-Modul – in dieser App oben rechts über „Connect Robot“.

Danach kannst du die Befehle geben: Tippst du auf die Fläche mit dem Mikrofon, öffnet sich automatisch die Spracherkennung und du sprichst den gewünschten Befehl. Sprich möglichst deutlich, damit die App den Befehl richtig versteht und an das Bluetooth-Modul weitergeben kann.

App BT Voice Control for Arduino mit dem Menüpunkt Connect Robot
Über „Connect Robot“ verbindest du die App mit dem Modul
App BT Voice Control for Arduino mit aktiver Spracherkennung
Über die Mikrofonfläche startest du die Spracherkennung
1 / 2

Fertig!

Das war ein einfaches Anwendungsbeispiel für die Sprachsteuerung mit dem Bluetooth-Modul. Natürlich kannst du die Befehle abwandeln und für andere Projekte verwenden – das Bluetooth-Modul lässt sich für die unterschiedlichsten Vorhaben einsetzen. Im Internet findest du etliche Möglichkeiten und in den App-Stores viele passende Apps dazu. Viel Spaß beim Ausprobieren!

Anleitung bewerten

Kommentare

Frage stellen oder Erfahrung teilen

Schreib uns, wenn etwas nicht funktioniert. Nenne dabei dein Board und die Fehlermeldung.

Wir prüfen jeden Kommentar vor der Veröffentlichung. Deine E-Mail-Adresse bleibt bei uns.