Hallo Leute, ich bin von eurer Hilfsbereitschaft begeistert.
Ich habe jetzt meinen Sketch nach dem Beispiel angepasst.
So weit, so gut. Der Sketch an sich macht auch keine Probleme, aber der HC-05 und der HC-06 finden sich nicht.
Freue mich, wenn ihr drüber schaut und mich auf meinen Fehler aufmerksam macht.
Hier der Master:
#include <SoftwareSerial.h> //Bibliothek für Serielle Schnittstelle
#include "DHT.h" //DHT Bibliothek laden
#include <CmdMessenger.h> // CmdMessenger
#include <Streaming.h> //Bibliothek für die BT Verbindung
enum Comand
{
Temperatur = 1,
Feuchtigkeit = 2
};
#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
Serial.begin(9600); //Serieller Monitor
dht.begin(); //DHT22 Sensor starten
//Festlegen der Ein- und Ausgänge für die BL Verbindung
pinMode(rxPin,INPUT);
pinMode(txPin,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
analogWrite(ledB,255); //Blaue LED wird eingeschaltet
btSerial.println("bluetooth available");
}
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
//Auslesen der Temperatur und Feuchtigkeit
float tempaussen = dht.readTemperature(); //Temperatur außen wird gemessen und gespeichert
float feuchteaussen = dht.readHumidity(); //Luftfeuchte außen wird gemessen und gespeichert
delay(3000);
btSerial << Temperatur << ',' << tempaussen << ';' << endl;
delay(3000);
btSerial << Feuchtigkeit << ',' << feuchteaussen << ';' << endl;
/*Senden der Werte über HC-05
btSerial.print("T:"); // Kennung Temperatur außen; Doppelpunkt kommt in den Zahlen nicht vor und ist Ende der Kennung
btSerial.println(tempaussen);
btSerial.print("F:"); // Kennung Feuchte außen (könnte auch "FA" sein, falls später mal "FK" für "Feuchte Keller" dazukommt)
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
}
/*else
{
asm volatile ("jmp 0"); //Wenn BT Verbindung weg, dann Neustart
}*/
}
Und hier der Slave:
#include <SoftwareSerial.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
#include <Streaming.h> //Bibliothek zum Empfangen
#include <CmdMessenger.h> // CmdMessenger für geschickte Datenübertragung
LiquidCrystal_I2C lcd(0x27, 20, 4); //Hier wird festgelegt um welches Display es sich handelt
enum Comand
{
Temperatur = 1,
Feuchtigkeit = 2
};
#define ledG 11
#define ledR 12
#define ledB 13
#define rxPin 0
#define txPin 1
SoftwareSerial btSerial(rxPin, txPin);
CmdMessenger cmdMessenger {btSerial};
char tempaussen = 'T'; //Kennung für Temp
char feuchteaussen = 'F'; //Kennung für Feuchtigkeit
void setup()
{
btSerial.begin(9600); //serielle Verbindung wird gestartet
Serial.begin(9600); //serieller Monitor wird gestartet
Serial << "Start: "<< __FILE__ << endl;
cmdMessenger.attach(Temperatur, []()
{
float t = cmdMessenger.readFloatArg();
Serial << "Temperatur " << t << " C" << endl;
});
cmdMessenger.attach(Feuchtigkeit, []()
{
float f = cmdMessenger.readFloatArg();
Serial << "Feuchtigkeit " << f << " %" << endl;
});
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(ledR,0);analogWrite(ledG,0);analogWrite(ledB,255);//Blaue LED an
}
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
tempaussen = btSerial.read();
//btData = btSerial.parseFloat(); //..sollen diese ausgelesen werden
//Wird das eingelesene Zeichen auf dem seriellen Monitor ausgegeben
btSerial.print('T'); //WICHTIG! Schreiben der Empfangenen Daten
//Das eingelesene Zeichen soll auf dem LCD ausgegeben werden
lcd.setCursor(0, 0); //Cursor an den Anfang setzen
lcd.print(" "); //Die Zeile wird gelöscht
lcd.setCursor(0, 0); //Den Cursor wieder an den Anfang gesetzt
lcd.print(tempaussen,1); //Die Temperatur auf das Display schreiben
lcd.print(" Grad"); //Grad hinter Temp. schreiben
//Hier wird die Feuchtigkeit ausgelesen
feuchteaussen = btSerial.read();
//btData = btSerial.parseFloat();
//Wird die eingelesene Feuchigkeit angezeigt
Serial.print(feuchteaussen);
//Das eingelesene Zeichen soll auf dem LCD ausgegeben werden
lcd.setCursor(0, 1); //Cursor an den Anfang der 2. Zeile setzen
lcd.print(" "); //Die Zeile wird gelöscht
lcd.setCursor(0, 1); //Den Cursor an den Anfang der 2. Zeile setzen
lcd.print(feuchteaussen,1); //Die Feuchtigkeit auf das Display schreiben
lcd.print(" %"); //% hinter die Feuchtigkeit setzen
//clear the float for new input
delay(13000);
analogWrite(ledR,255);analogWrite(ledG,0);analogWrite(ledB,0); //Grüne LED aus und rote LED an
}*/
cmdMessenger.feedinSerialData();
}