Arduino kann mit anderen Geräten über Bluetooth mit dem Modul HC-05 (Master/Slave) kommunizieren. Es ermöglicht dem Arduino, sich mit anderen Geräten wie Smartphone, Computer oder anderen Mikrocontrollern zu verbinden und Daten auszutauschen.
Die Bluetooth-Kommunikation kann z.B. zur Fernsteuerung eines Roboters, zur Anzeige und zum Speichern von Daten auf dem Computer oder auf dem Smartphone verwendet werden.
Voraussetzungen: Arduino Serielle Kommunikation
Material
- Computer
- Arduino UNO x2
- USB-Kabel
- Bluetooth-Modul HC-05 ZS-040 x2 (oder 1x HC-05 und 1x HC-06)
- Dupont Kabel M/F
Modul HC-05 Übersicht
Das Bluetooth Modul HC-05 hat 6 Pins, 2 für die Stromversorgung, 2 um die Verbindung herzustellen, 1 um in den Konfigurationsmodus zu gelangen und der andere um den Verbindungsstatus zu erfahren.
- VCC-Stromversorgung. Wird in der Regel an den 5V-Pin des Arduino angeschlossen.
- GND Masse. Wird typischerweise an den GND-Pin des Arduino angeschlossen.
- RX Empfangs-Pin. Wird typischerweise mit dem Sende-Pin (TX) des Arduino
- TX-Sende-Pin verbunden. Typischerweise mit dem Empfangs-Pin (RX) des Arduino verbunden
- Zustand ist HIGH, wenn das Modul angeschlossen ist
- Key ou EN muss auf HIGH (3,3V) gesetzt werden, um in den Konfigurationsmodus zu gelangen und muss getrennt werden, um in den Kommunikationsmodus zu gelangen.
Die Besonderheit des HC-05 ist, dass es als Slave-Modul (entspricht HC-06) und als Master-Modul verwendet werden kann, was bedeutet, dass es sich selbständig mit einem anderen Gerät koppeln kann.
Schaltpläne für die Konfiguration
WARNUNG :
- Wir verwenden Pin 2 und 3 des Arduino Uno. Je nach Mikrocontroller unterstützen einige Pins möglicherweise keine serielle Kommunikation. Insbesondere Arduino Mega, Micro und Leonardo. Prüfen Sie die Dokumentation.
- Da das Bluetooth-Modul eine 3,3V-Logik verwendet, ist es ratsam, einen Spannungsteiler hinzuzufügen, um die 5V-Spannung vom Arduino zu reduzieren. (Widerstand 1k zwischen Pin3 und Rx; 2k Ohm zwischen Rx und GND).
Konfiguration des Moduls HC-05
Die Konfiguration des Moduls HC-05 kann interessant sein, um zu überprüfen, ob es funktioniert, richtig angeschlossen ist und um seine Parameter zu ändern, wie z.B. seinen Namen (nützlich, wenn Sie mehrere Module verwenden), PIN-Code und Kommunikationsgeschwindigkeit (Baudrate). Vor allem, wenn Sie es als Master-Modul verwenden wollen. Um die Konfiguration zu ermöglichen, sollte das Modul HC-05 mit Strom versorgt, aber nicht gepaart werden und der KEY/EN-Pin sollte auf HIGH gesetzt werden, bevor das Modul eingeschaltet wird. Im Konfigurationsmodus blinkt die LED alle zwei Sekunden.
Öffnen Sie den seriellen Monitor und wählen Sie die Endzeilenoption „Neue Zeile“ und eine Baudrate von 9600.
Beachten Sie, dass HC-05 mit einer Baudrate von 38400bps in den Konfigurationsmodus geht.
Konfigurationscode
Mit dem folgenden Code können Sie die Parameter über den seriellen Monitor und AT-Befehle ändern und überprüfen.
#include <SoftwareSerial.h>#define rxPin 2#define txPin 3#define baudrate 38400String msg;SoftwareSerial hc05(rxPin ,txPin);void setup(){ pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); Serial.println("ENTER AT Commands:"); hc05.begin(baudrate);}void loop(){ readSerialPort(); if(msg!="") hc05.println(msg); if (hc05.available()>0){ Serial.write(hc05.read()); }}void readSerialPort(){ msg=""; while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer msg += c; //makes the string readString } }}
AT-Befehle
Im Vergleich zum Modul HC-06 kann das HC-05 als Mastermodul verwendet werden und Sie können die gespeicherten Parameter auch mit Hilfe der AT-Befehle überprüfen.
Im Allgemeinen wird durch die Eingabe des Befehls AT+<Befehl>? der gespeicherte Parameter abgefragt (z.B.: AT+PSWD? zeigt den PIN-Code des Moduls an). Wenn Sie AT+<Befehl>=<Param> eingeben, können Sie den Parameterwert einstellen (z.B.: AT+PWSD=0000, um den PIN-Code auf 0000 zu ändern).
Hier sind einige der AT-Befehle:
- Um die Kommunikation zu testen, geben Sie AT im seriellen Monitor der Arduino IDE ein. Wenn alles richtig eingestellt ist, sollte es OK anzeigen.
- Um den Modulnamen zu ändern, geben Sie AT+NAME=<Param> ein. Das Modul sollte OK antworten (Defaut HC-05, Beispiel: Um den Namen in BTM1 zu ändern, geben Sie AT+NAME=BTM1 ein).
- Um den PIN-Code zu ändern, geben Sie AT+PSWD=<Param> ein. Das Modul sollte mit OK antworten (Standardwert 1234, z.B.: Um die PIN auf 0000 zu ändern, geben Sie AT+PSWD=0000 ein).
- AT+ROLE=<Param>, um die Rolle des Moduls als Slave oder Master zu ändern (Standardwert 0, z.B.: um die Rolle als Master zu ändern, geben Sie AT+ROLE=1 ein, als Slave AT+ROLE=0).
- Um die Baudrate zu ändern, geben Sie AT+UART=<Param1>,<Param2>,<Param3> mit den Parametern Param1, 2 und 3 für die serielle Kommunikation ein: Baudrate, Stopbit bzw. Paritätsbit (Standardmäßig auf 9600,0,0 eingestellt. Z.B.: um die Baudrate auf 115200 zu ändern, geben Sie AT+UART=115200,0,0 ein).
Es gibt noch weitere AT-Befehle für das Bluetooth-Modul HC-05, die Sie unter dem folgenden Link finden können.
ACHTUNG: Es gibt verschiedene Versionen des Moduls HC-05 und das Konfigurationsverfahren kann variieren. Überprüfen Sie vor der Verwendung unbedingt das Etikett des Moduls und die Firmware-Version. Für dieses Tutorial haben wir ein Modul HC-05 mit der Bezeichnung ZS-040 und der Firmware-Version 2.0-20100601 verwendet.
N.B.: Wenn das Modul nicht reagiert, überprüfen Sie die Verdrahtung, die Leitfähigkeit der Kabel und die Baudrate.
Zögern Sie nicht, einen Kommentar zu hinterlassen oder uns zu kontaktieren, wenn Sie Probleme bei der Konfiguration Ihres HC-05-Moduls haben.
Slave-Konfiguration
Um das Modul als Slave zu konfigurieren, können Sie den Namen in AT+NAME=HC05-Slave ändern und die Kommunikationsparameter und den gewünschten PIN-Code wählen. Sie müssen sicherstellen, dass Master und Slave die gleichen Kommunikationsparameter haben.
- AT gibt OK zurück
- AT+NAME=HC05-Slave
- AT+UART=9600,0,0
- AT+ROLE=0
- Geben Sie AT+ADDR ein, um die Moduladresse zu erhalten (z.B.: +ADDR:98d3:32:21450e)
Für das Slave-Modul kann auch ein HC-06-Modul verwendet werden
Masterkonfiguration
Um das Modul als Master einzustellen, müssen Sie die Rolle ändern und die gleichen Kommunikationsparameter wie beim Slave-Modul einstellen.
- AT gibt OK zurück
- AT+NAME=HC05-Master
- AT+UART=9600,0,0
- AT+ROLE=1
- Die Adresse des Slavemoduls muss in das Mastermodul eingegeben werden, damit es ansprechen kann: AT+BIND=98d3,32,21450e (Punkt „:“ durch Komma „,“ ersetzen)
Schaltplan für die Kommunikation
Im Kommunikationsmodus ist der Key/EN-Pin nicht angeschlossen.
Kommunikationscode
Wenn beide Module konfiguriert sind, laden Sie die folgenden Codes in die Arduino-Boards, die an Ihre Module angeschlossen sind. Schalten Sie die Module ein, um in den Kommunikationsmodus zu gelangen. Das Master-Modul sollte sich mit dem Slave-Modul verbinden und die LED sollte jede Sekunde blinken.
Wir verwenden die gleiche Bibliothek SoftwareSerial.h wie für das HC-06-Modul:
- SoftwareSerial hc05(Rx,Tx), um die Pins der seriellen Schnittstelle zu definieren
- hc05.begin(), um die Baudrate zu definieren (der Wert sollte derselbe sein wie bei Ihrem Modul)
- hc05.available(), um zu testen, ob Daten im Puffer des Moduls vorhanden sind
- hc05.read(), um Daten byteweise zu lesen
- hc05.print(), um einen String in ASCII-Form zu senden
- hc05.write(), um Daten byteweise zu senden
Master Code
#include <SoftwareSerial.h>SoftwareSerial ArduinoSlave(2,3);String answer;String msg;void setup(){Serial.begin(9600);Serial.println("ENTER Commands:");ArduinoSlave.begin(9600);}void loop(){//Read command from monitorreadSerialPort();//Read answer from slavewhile (ArduinoSlave.available()) {delay(10); if (ArduinoSlave.available() >0) {char c = ArduinoSlave.read(); //gets one byte from serial bufferanswer += c; //makes the string readString}}//Send data to slaveif(msg!=""){Serial.print("Master sent : ");Serial.println(msg);ArduinoSlave.print(msg);msg="";}//Send answer to monitorif(answer!=""){Serial.print("Slave recieved : ");Serial.println(answer);answer="";}}void readSerialPort(){while (Serial.available()) {delay(10); if (Serial.available() >0) {char c = Serial.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}Serial.flush();}
Slave Code
#include <SoftwareSerial.h>SoftwareSerial ArduinoMaster(2,3);String msg;void setup(){Serial.begin(9600);ArduinoMaster.begin(9600); }void loop(){readSerialPort();// Send answer to masterif(msg!=""){Serial.print("Master sent : " );Serial.println(msg);ArduinoMaster.print(msg);msg=""; }}void readSerialPort(){while (ArduinoMaster.available()) {delay(10); if (ArduinoMaster.available() >0) {char c = ArduinoMaster.read(); //gets one byte from serial buffermsg += c; //makes the string readString}}ArduinoMaster.flush();}
Wenn Sie beide seriellen Monitore öffnen und einen Befehl in den Monitor der Master-Karte eingeben, sollten Sie folgende Ergebnisse sehen. Die Master-Karte sendet einen Befehl, der von der Slave-Karte empfangen und zurückgesendet wird. Die Kommunikation funktioniert korrekt in beide Richtungen.
Wenn Sie Probleme mit der Konfiguration oder dem Pairing Ihrer Bluetooth-Module haben, zögern Sie nicht uns zu kontaktieren oder einen Kommentar zu hinterlassen.
Anwendung
- Fahren Sie Ihren Roboter ferngesteuert mit Ihrem Smartphone
- Senden Sie Temperaturmessungen an Ihr Smartphone