Die Stichworte für die folgende Schaltung lauten: Arduino, Bluetooth, HC-05, Smartphone, Arduino Bluetooth Control. Wenn man alle Komponenten
richtig zusammensetzt, müsste die hier erdachte Schaltkomposition funktionieren. Mit der Schaltung soll es möglich sein, mit dem Handy (Smartphone) via
Bluetooth bestimmte Ausgänge des Arduino zu schalten und anschließend die Schaltzustände abzufragen. Die Schaltung stellt eine
Erweiterung der Schaltung:
dar. Mit der Schaltung konnte man mit „Switches“ einige Leuchtdioden ein- und ausschalten. Beide Schaltungen nutzen die „Aruino Bluetooth Control“-App.
Was mit „Switches“ nicht möglich war, ist die Anzeige des aktuellen Zustandes des Ausgangs, falls er von woanders angesteuert wurde. Das Problem kann umgangen
werden, indem man von der Handy-App die Funktion „Terminal“ nutzt. An einigen Beispielen soll hier die Handhabung des „Terminals“
erläutert werden.
Arduino Bluetooth Control-App
Zunächst installieren wir auf dem Handy (hier Android-System) die App „Arduino Bluetooth Control“, wie in dem oben genannten Beispiel beschrieben.
Nach dem Start der App führen wir unter „Switches“ (settings) ebenfalls einige Einstellungen durch:
Für Switch 1:
- Name: Leuchtdiode Blau
- On: Ein1
- Off: Aus1
Für Switch 2:
- Name: Leuchtdiode GELB
- On: Ein2
- Off: Aus2
Für Switch 3:
- Name: Leuchtdiode ROT
- On: Ein3
- Off: Aus3
Für Switch 4:
- Name: Alle Leuchtdioden
- On: Alles_Ein
- Off: Alles_Aus
Schaltplan
Bis auf einige wenige Änderungen bzw. Erweiterungen ähnelt die Schaltung der aus dem Beispiel „Leuchtdioden via Bluetooth schalten“.
Zusätzlich integrieren wir in die Schaltung einen Temperatursensor und einen Taster. Was sich noch ändert, ist die Schnittstelle, mit der das Bluetooth-Modul
HC-05 mit Arduino korrespondiert. Auf diese Weise wird es zusätzlich möglich sein, die versendeten Kommandos auf dem seriellen Monitor des Arduino IDE zu
beobachten.
Testschaltung
HC-05 Konfiguration
Um optimale Ergebnisse bei der Übertragung von diversen Werten vom Arduino zum Bluetooth-Modul HC-05 zu erreichen, kann es sinnvoll sein,
die Baudrate passend einzustellen. Im Auslieferungszustand beträgt die eingestellte Baudrate 9600. In unserem Beispiel wurde die Baudrate auf 38400 eingestellt.
Um das Parameter als auch andere Einstellungen des Moduls zu ändern oder sie zu erfragen, muss HC-05 in den AT-Modus versetzt werden. Mit einem Extra-Programm
(Sketch) können dann die
Parameter über den seriellen Monitor eingestellt bzw. abgefragt werden.
Zu diesem Zweck kann die oben dargestellte Schaltung verwendet werden.
Ein passendes Programm könnte dann so aussehen:
// ******************************************************************************
// Konfiguration HC-05 im AT-Modus
// ******************************************************************************
Nachdem das Programm in Arduino geladen wurde, muss das HC-05-Modul in das AT-Modus versetzt werden. Hierzu schaltet man die
Versorgungsspannung der Schaltung aus, drückt den kleinen Taster an dem Modul und hält ihn gedrückt, während die Spannung wieder eingeschaltet wird.
Das Modul schaltet automatisch in den AT-Modus um. Die rote LED an dem Modul blinkt jetzt alle zwei Sekunden für zwei Sekunden auf.
Jetzt kann in der Arduino IDE der serielle Monitor aktiviert werden. Die Baudrate wird auf 9600 eingestellt. Bei der Auswahl der Zeilen-Einstellungen
stellen wir „Beides CR/LF“ ein.
Um zu prüfen, ob das HC-05-Modul korrekt arbeitet, tippen wir in der Eingabezeile des seriellen Monitors AT ein und bestätigen die
Eingabe mit ENTER. Ist das Modul in Ordnung, erhalten wir als Antwort OK.
Um weiter interessante Informationen zu erfahren, können auch andere Frage-Kommandos eingegeben werden. Hier eine Auswahl:
Parameter abfragen:
AT – Prüfung der seriellen Kommunikation. Antwort: OK.
AT+VERSION? – Gibt die Firmware-Version aus. Antwort: VERSION:3.0-20170601
AT+PSWD? – Gibt aktuell eingestelltes Passwort (PIN) aus. Antwort: +PIN:"1234" OK
AT+UART? – Eingestellte Baudrate. Antwort: +UART:9600,0,0 OK
AT+NAME? – Aktuellen Namen anzeigen. Antwort: +NAME:H-C-2010-06-01 OK
AT+ADDR? – MAC-Adresse anzeigen. Antwort: +ADDR:98D3:41:F5DDCC OK
AT+STATE? – Aktuellen Status des Moduls ausgeben. Antwort (z.B.): +STATE:INITIALIZED OK
AT+ROLE? – Gibt die aktuelle Rolle aus. Antwort: +ROLE:0 OK (0-Slave, 1-Master)
Parameter ändern / Kommandos:
AT+ORGL – Versetzt das Modul in Auslieferungszustand (Werkseinstellungen)
AT+RESET – Neustart des Moduls
AT+PSWD=“xxxx“ – PIN-Einstellung wird geändert. Dabei ist xxxx eine 4-Stellige Dezimalzahl. Antwort: AT+PSWD="2231" OK (2231 ist die neue Eingabe)
AT+UART=38400,0,0 – Beispiel für Einstellung der Baudrate auf 38400 (Mit Paritätsbit und dem Stoppbit). Antwort: OK
AT+NAME=Neuer Name (max 30 Zeichen). Antwort: OK
AT+ROLE=x – Rolle setzen (0-Slave, 1- Master). Antwort: OK
In unserem Beispiel stellen wir die Baudrate auf 38400 Baud ein. Dies erfolgt mit dem Kommando AT+UART=38400,0,0. Sobald wir als
Antwort OK erhalten, ist die gewünschte Baudrate eingestellt. Wir können jetzt durch Eingabe des Kommandos AT+RESET oder Abschaltung
der Versorgungsspannung den AT-Modus verlassen.
Programm (Sketch)
// **************************************************************************************
// Schaltzustände via Bluetooth abfragen und am Handy anzeigen
// Eine Schaltung mit Arduiono Nano, Bluetooth-Modul HC-05 und Handy-App:
// Arduino Bluetooth Control (Android)
// Arduino IDE 2.3.7
// **************************************************************************************
#include<SoftwareSerial.h> // Neue serielle Schnittstelle
SoftwareSerial BTserial(8, 9); // RX, TX
#include "OneWire.h" // Bibliothek DS18B20 anbinden
#include "DallasTemperature.h"
OneWire oneWire(11);
DallasTemperature Sensor(&oneWire);
int Led_Blau = 2; // Arduino Pin LED Blau
int Led_Gelb = 3; // Arduino Pin LED Gelb
int Led_Rot = 4; // Arduino Pin LED Rot
int Taster = 5; // Arduino LED Gelb ein/aus
String vom_Handy; // Kommandos vom Handy
String zum_Handy; // Infos zum Handy
String An_Aus;
String Pin_Status;
bool LED_ein_aus;
// **************************************************************************************
void setup()
{
Serial.begin(9600); // Schnittstelle Serieller Monitor
BTserial.begin(38400); // Schnittstelle HC-05
Sensor.begin(); // Temperatursensor
pinMode (Led_Blau, OUTPUT); // Ausgänge Leuchtdioden
pinMode (Led_Gelb, OUTPUT);
pinMode (Led_Rot, OUTPUT);
pinMode (Taster, INPUT_PULLUP); // Pin 5 als Eingang
}
// **************************************************************************************
void loop()
{
if (digitalRead(Taster) == LOW) { // Gelbe Leuchtdiode ist zusätzlich
LED_ein_aus = !LED_ein_aus; // mit dem Taster S1 schaltbar.
if (LED_ein_aus) {
digitalWrite (Led_Gelb, HIGH);
BTserial.print(" Leuchtdiode GELB wurde eingeschaltet");
} else {
digitalWrite (Led_Gelb, LOW);
BTserial.print(" Leuchtdiode GELB wurde ausgeschaltet");
}
delay (300);
}
if (BTserial.available()) { // Handy hat gesendet
Serial.print("vom_Handy: "); // Ausgabe Serieller Monitor
vom_Handy = BTserial.readString(); // Sende-Inhalt
Serial.println(vom_Handy); // Ausgabe Serieller Monitor
if (vom_Handy == "Ein1") { // Leuchtdioden Ein/Aus
digitalWrite (Led_Blau, HIGH);
BTserial.print(" Leuchtdiode BLAU wurde eingeschaltet");
}
if (vom_Handy == "Aus1") {
digitalWrite (Led_Blau, LOW);
BTserial.print(" Leuchtdiode BLAU wurde ausgeschaltet");
}
if (vom_Handy == "Ein2") {
digitalWrite (Led_Gelb, HIGH);
LED_ein_aus = true;
BTserial.print(" Leuchtdiode GELB wurde eingeschaltet");
}
if (vom_Handy == "Aus2") {
digitalWrite (Led_Gelb, LOW);
LED_ein_aus = false;
BTserial.print(" Leuchtdiode GELB wurde ausgeschaltet");
}
if (vom_Handy == "Ein3") {
digitalWrite (Led_Rot, HIGH);
BTserial.print(" Leuchtdiode ROT wurde eingeschaltet");
}
if (vom_Handy == "Aus3") {
digitalWrite (Led_Rot, LOW);
BTserial.print(" Leuchtdiode ROT wurde ausgeschaltet");
}
if (vom_Handy == "Alles_Ein") { // Alle Leuchtdioden Ein/Aus
digitalWrite (Led_Blau, HIGH);
digitalWrite (Led_Gelb, HIGH);
digitalWrite (Led_Rot, HIGH);
}
if (vom_Handy == "Alles_Aus") {
digitalWrite (Led_Blau, LOW);
digitalWrite (Led_Gelb, LOW);
digitalWrite (Led_Rot, LOW);
}
if (vom_Handy == "L1?") { // Abfrage Status LED Blau
Ausgang_Status(Led_Blau);
}
if (vom_Handy == "L2?") { // Abfrage Status LED Gelb
Ausgang_Status(Led_Gelb);
}
if (vom_Handy == "L3?") { // Abfrage Status LED Rot
Ausgang_Status(Led_Rot);
}
if (vom_Handy == "T?") { // Temperatur Abfrage
Sensor.requestTemperatures(); // Temp. DS18B20 auslesen
float Temp_DS18B20 = Sensor.getTempCByIndex(0);
String Temperatur = String(Temp_DS18B20) + " " + "°C ";
Serial.println ("Temperatur = " + Temperatur); // Ausgabe Monitor
BTserial.println(" Temperatur = " + Temperatur); // Ausgabe Handy
}
}
}
// **************************************************************************************
void Ausgang_Status(int Ausgang)
{
bool OnOff = digitalRead(Ausgang); // Ausgang abfragen
An_Aus = "AUS"; // Satz Bildung für Ausgabe
if (OnOff) { An_Aus = "AN"; }
switch (Ausgang) {
case 2: {
Pin_Status = " Leuchtdiode BLAU ist ";
break;
}
case 3: {
Pin_Status = " Leuchtdiode GELB ist ";
break;
}
case 4: {
Pin_Status = " Leuchtdiode ROT ist ";
break;
}
}
BTserial.println(Pin_Status + An_Aus); // Ausgabe Handy als String
}
// **************************************************************************************
Das Ziel der Schaltung ist es, mit dem Terminal, das von der Handy-App "Arduino Bluetooth Controller" zur Verfügung gestellt wird, Arduino zu
steuern und den Zustand seiner I/Os und andere Werte abzufragen. Nicht alle Funktionen der App verfügen über Feedback-Fähigkeiten. Der serielle Monitor
der Arduino IDE-Umgebung kann als ein Kontrollinstrument aktiviert werden. Mit seiner Hilfe können einige der vom Handy und dem Bluetooth-Modul HC-05 stammenden
Kommandos und Informationen eingesehen werden.
Die Steuer- und Fragekommandos werden im Terminal der App eingegeben und von hier aus versendet.
Startseite der "Arduino Bluetooth Control"-App (mit Terminal Startfläche)
Während der Programm- und App-Gestaltung haben wir die Kommandos für einzelne Leuchtdioden festgelegt. Mit „Ein1“ wird die erste, bei uns
die blaue Leuchtdiode eingeschaltet.
Nachdem der Befehl versendet wurde, erhalten wir die Bestätigung, dass er auch ausgeführt wurde.
Auch der Zustand diverser anderer an Arduino angeschlossener Sensoren kann direkt abgefragt werden. In unserem Fall ist an Arduino ein Temperatursensor
angeschlossen. Mit der Nachfrage „T?“ wird die aktuelle von ihm ermittelte Temperatur abgefragt.