Home Navigationspfeil Arduino Navigationspfeil HC-05 Bluetooth Modul

HC-05 Modul im Kommandomodus

Für ein kleines Projekt benötigte ich eine Möglichkeit mittels Bluetooth Kommandos an den Arduino zu senden. Die Wahl viel schnell auf eine HC-05 Modul (CZ-HC-05/gomcu). Nachteil dieser Module ist es, das sie im Werkszustand alle den gleichen Namen tragen und es somit bei Verwendung mehrere dieser BT-Module schnell unübersichtlich werden kann.

  Nach dem Studium des Datenblatts war aber schnell klar, das sich dieser Umstand recht einfach ändern lässt. Dazu kann das Modul mittels AT-Kommandos umprogrammiert werden.

Hierzu ist es jedoch notwendig das Modul in den Kommandomodus zu versetzen, Informationen darüber waren jedoch mehrdeutig. In Ermangelung eines Datenblatts das speziell zu dem mir vorliegend Modul passte war es zudem schwierig die richtige Information zu bekommen. Bei der Suche nach diesen Informationen stellte sich schnell heraus, das für den KEY-Pin zum einen von einer 3,3 Volt Spannung und zum anderen von einer 5 Volt Spannung die Rede war. Dieser Pin ist wichtig, weil damit die Umschaltung in den Kommandomodus geschieht und ich wollte das Modul beim versuch ja nicht gleich in das elektronische Nirwana schicken. Schließlich fand ich jedoch einen eindeutigen Hinweis, dass das mir vorliegende Modul eine Pegelwandlung von 5 → 3,3 Volt für alle herausgeführten Pins bereitstellt.

Da bei der Programmierung des Moduls eine bestimmte Reihenfolge für die Spannungsversorgung eingehalten werden muss, habe ich diese Aufgabe dem Arduino übertragen. Zu diesem Zweck habe ich ein Sketch geschrieben, damit war die Programmierung in wenigen Sekunden erledigt.

Da ich mir vorstellen kann, das dieses Sketch auch für andere Hilfreich sein kann, stelle ich dieses hier der Allgemeinheit zur Verfügung.

/*
 * Arduino Sketch für die Kommunikation mit einem Bluetooth SPP-Modul
 *
 * Das Programm versetzt das BT-Modul in den Kommando-Modus, nimmt dann in
 * einer Endlosschleife AT-Kommandos von der seriellen Schnittstelle entgegen
 * und sendet diese an das BT-Modul.
 *
 * Verbinden Sie das BT-Modul und den Arduino wie folgt:
 *
 * Arduino -> BT-Modul
 * -------------------
 * D7 (RX)  -> HC-05 TX
 * D6 (TX)  -> HC-05 RX
 * GND      -> HC-05 GND
 * D11 (5V) -> HC-05 VCC
 * D12 (5V) -> HC-05 KEY
 *
 * WICHTIG: Diese Angaben gelten nur für Module mit der Bezeichnung
 *          CZ-HC-05/gomcu.
 *
 * BASIS Befehle des HC-05 für die Konfiguration
 * (für weitere Informationen siehe Datenblatt)
 * ---------------------------------------------
 * AT+VERSION?        (Gibt die Versionsnummer des Moduls zurück)
 * AT+ORGL            (Stellt den Werkszustand wieder her)
 * AT+UART=115200,0,0 (Stellt die Übertragungsparameter auf 115200 bps,
 *                     ein Stopbit und keine Parität)
 * AT+NAME=Smoothie   (Ändert den Namen des Moduls, max. 20 Zeichen)
 * AT+PSWD=0000       (Setzt den Pincode auf 0000)
 *
 * WICHTIG: Diese Angaben gelten nur für Module mit der Bezeichnung
 *          CZ-HC-05/gomcu.
 *
 * @author  Frank A. Dullinger
 * @version 1.0 - 22.01.2015 00:17:29
 *
 */

#include <SoftwareSerial.h>

#define D6             (6)      // Software Serial TxD
#define D7             (7)      // Software Serial RxD

#define bt_power       (11)     // Spannungsversorgung für das BT-Module
#define bt_key_power   (12)     // Spannungsversorgung für den KEY-Pin

#define BAUD           (9600)   // Baudrate vom Arduino zum Host-System
#define BTBAUD         (38400)  // Baudrate vom Arduino zum BT-Modul

SoftwareSerial btSerial(D7, D6); // RxD, TxD

char myChar;                     // eingehende/ausgehende Daten

/**
 * First thing this machine does on startup.  Runs only once.
 */

void setup()
{

    // Pins als Ausgang festlegen
    pinMode(bt_power, OUTPUT);
    pinMode(bt_key_power, OUTPUT);

    // Ausgangs Pins auf LO-Pegel einstellen
    digitalWrite(bt_power, LOW);
    digitalWrite(bt_key_power, LOW);

    // Sicherstellen das der KEY-Pin auf LO-Pegel liegt
    delay(100);

    // KEY-Pin auf HI-Pegel legen um den Kommandomodus zu aktivieren
    digitalWrite(bt_key_power, HIGH);

    // eine Kurze Pause
    delay(100);

    // Nun das BT-Modul einschalten
    digitalWrite(bt_power, HIGH);

    // Serielle Schnittstelle zum Host öffnen
    Serial.begin(9600);

    // Serielle Schnittstelle zum BT-Modul öffnen
    btSerial.begin(38400);

    // eine Sekunde warten, bis es weitergeht
    delay(1000);

    // Ausgabe für den Benutzer, das nun Kommandos
    // eingegeben werden können
    Serial.println("Type AT commands!");
}

void loop()
{

    // wartet auf Zeichen vom HC-05 Modul
    // und sendet sie an das Host-System weiter
    if (btSerial.available())
    {
        myChar = btSerial.read();
        Serial.print(myChar);
    }

    // wartet auf Zeichen vom Host-System,
    // und sedet sie an das HC-05 Modul
    if (Serial.available())
    {
        myChar = Serial.read();
        Serial.print(myChar);   // echo
        btSerial.print(myChar);
    }

}


 

 

Da die dargestellten Schaltungen und Programme nur dem Grundverständnis dienen sollen, kann ich für die Funktion keine Gewähr übernehmen.
Wie üblich kann ich für Schäden die durch die Verwendung der hier veröffentlichten Schaltungen und Programme entstehen keine Haftung übernehmen.

Alle genannten und durch Dritte geschützten Marken- und Warenzeichen unterliegen uneingeschränkt den Bestimmungen des jeweils gültigen Kennzeichenrechts und den Besitzrechten der jeweiligen eingetragenen Eigentümer. Allein aufgrund der bloßen Nennung ist nicht der Schluss zu ziehen, dass Markenzeichen nicht durch Rechte Dritter geschützt sind!