Ich hoffe, dass ich noch eine Antwort auf meine Frage bekomme.
Mein Projekt entwickelt sich immer weiter. Ich habe jetzt einen DHT22 an meinen Master angeschlossen und sende jetzt die Temperatur und die Feuchtigkeit über den HC-05 auf den HC-06. Soweit alles in Ordnung, die Zeiten zum senden und empfangen passen auch so weit.
Um die Kommunikation zu ermöglichen, sendet der HC-06 den Text "Willkommen". Ist das eine gute Lösung?
Hier der aktuelle Sketch vom Master:
#include <SoftwareSerial.h> //Bibliothek für Serielle Schnittstelle
#include "DHT.h" //DHT Bibliothek laden
#define ledR 11 //Die rote LED wird an PIN 11 angeschlossen
#define ledG 12 //Die grüne LED wird an PIN 12 angeschlossen
#define ledB 13 //Die blaue LED wird an PIN 13 angeschlossen
#define rxPin 0 //Für die BL Verbindung
#define txPin 1 //Für den BL Verbindung
#define DHTPIN 2 //Der Sensor wird an PIN 2 angeschlossen
#define DHTTYPE DHT22 //Es handelt sich um den DHT22 Sensor
SoftwareSerial btSerial(rxPin, txPin);
DHT dht(DHTPIN, DHTTYPE); //Der Sensor wird ab jetzt mit "dht" angesprochen
void setup()
{
btSerial.begin(9600); //Serielle Verbindung starten
dht.begin(); //DHT22 Sensor starten
//Festlegen der Ein- und Ausgänge für die BL Verbindung
pinMode(rxPin,INPUT);
pinMode(txPin,OUTPUT);
btSerial.println("bluetooth available");
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
analogWrite(ledB,255); //Blaue LED wird eingeschaltet
delay(5000);
}
void loop()
{
if(btSerial.available()) //wenn Daten empfangen werden...
{
//Bestätigung zur erfolgreichen Funkanmeldung
analogWrite(ledR,0);analogWrite(ledG, 255);analogWrite(ledB,0); //LED Grün an und LED Bla aus
//Wartezeit, damit der Sensor die Messwerte ermitteln kann
delay(2000); //2 sek. bis zur Messung, weil der Sensor etwas langsam ist
//Definition beider Variablen für beide Messwerte
float tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
float feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert
//Senden der Werte über HC-05
btSerial.println(tempaussen);
delay(30000); //Warten
btSerial.println(feuchteaussen);
// clear the string for new input:
feuchteaussen = 0; //Der Wert für Feuchte wird für die nächste Runde genullt
tempaussen = 0; //Der Wert für Temperatur wird genullt
delay(28000);
analogWrite(ledR,255);analogWrite(ledG,0);analogWrite(ledB,0); //Grüne LED aus und rote LED an
}
}
Und hier ist der aktuelle Sketch vom Slave:
#include <SoftwareSerial.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x27, 20, 4); //Hier wird festgelegt um welches Display es sich handelt
#define ledG 11
#define ledR 12
#define ledB 13
#define rxPin 0
#define txPin 1
SoftwareSerial btSerial(rxPin, txPin);
float btData;
void setup()
{
btSerial.begin(9600); //serieller Monitor wird gestartet
pinMode(11,OUTPUT); //PIN 11 wird als Ausgang festgelegt
pinMode(12,OUTPUT); //PIN 12 wird als Ausgang festgelegt
pinMode(13,OUTPUT); //PIN 13 wird als Ausgang festgelegt
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung einschalten
lcd.setCursor(0,0); //Cursor auf Poition 0,0 setzen
lcd.print("Start"); //Schreib Start auf das Display
analogWrite(ledB,255);//Blaue LED an
delay(5000);
lcd.clear(); //Das Dispaly komplett löschen
}
void loop()
{
if(btSerial.available()) //wenn Daten empfangen werden...
{
//Bestätigung zur erfolgreichen Funkanmeldung
analogWrite(ledR,0);analogWrite(ledG,255);analogWrite(ledB,0); //Blaue LED aus und Grüne LED an
delay(2000); //2 sek. warten, für erfolgreiche Anmeldung
btSerial.print("Willkommen");
//Hier wird die Temperatur ausgelesen
delay(15000);
btData = btSerial.parseFloat(); //..sollen diese ausgelesen werden
//Wird das eingelesene Zeichen auf dem seriellen Monitor ausgegeben
btSerial.print(btData); //WICHTIG! Schreiben der Empfangenen Daten
//Das eingelesene Zeichen soll auf dem LCD ausgegeben werden
lcd.setCursor(0,0); //Die Zeile wird gelöscht
lcd.print(" ");
lcd.setCursor(0, 0); //Den Cursor an den Anfang setzen
lcd.print(btData,2); //Den Zahlenwert auf das Display schreiben
lcd.setCursor(4,0); //Der Cursor wird auf die 2. Nachkommastelle gesetzt
lcd.print(" "); //Die 2. Nachkommastelle wird nicht benötigt und wird geslöscht
lcd.setCursor(5,0);
lcd.print("Grad"); //Grad hinter die Zahl setzen
//clear the float for new input
btData = 0;
delay(30000);
//Hier wird die Feuchtigkeit ausgelesen
btData = btSerial.parseFloat(); //..sollen diese ausgelesen werden
//Das eingelesene Zeichen soll auf dem LCD ausgegeben werden
lcd.setCursor(0, 1); //Die Zeile wird gelöscht
lcd.print(" ");
lcd.setCursor(0, 1); //Den Cursor an den Anfang setzen
lcd.print(btData,2); //Den Zahlenwert auf das Display schreiben
lcd.setCursor(4,1); //Der Cursor wird auf die 2. Nachkommastelle gesetzt
lcd.print(" "); //Die 2. Nachkommastelle wird nicht benötigt und wird geslöscht
lcd.setCursor(5,1);
lcd.print("%"); //Grad hinter die Zahl setzen
//clear the float for new input
btData = 0;
delay(13000);
analogWrite(ledR,255);analogWrite(ledG,0);analogWrite(ledB,0); //Grüne LED aus und rote LED an
}
}