Hallo, ich bräuchte mal wieder euer Fachwissen. Ich habe ein kleines Programm geschrieben, was mir einen Bewegungssensor und einen Lichtsensor ausliest, auswertet und per MQTT weiter an meinen Broker senden soll.
Nun das Auslesen funktioniert, auch publishen tut er, aber nur leider ein paar Sekunden lang. Dann bleibt der Wemos einfach "hängen" !. In der Konsole wird nichts mehr angezeigt und alles bleibt stehen.
Kann hier vielleicht jemand mal drüber sehen und eventuell den Fehler finden?
Ich weis, dass Script sehr noch sehr unübersichtlich aus, sorry bin leider noch Anfänger:
//-------- Mqtt beginn ----------------------------------------------
#include <SPI.h>
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
const char* mqtt_server = "IP-ADRESSE";
const char* ssid = "SSID";
const char* password = "PASSWORT";
WiFiClient net;
PubSubClient client(net);
void connect() {
Serial.println("Connecting Wifi");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
// WiFi
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
}
Serial.println("Connecting MQTT");
// MQTT
client.setServer(mqtt_server, 1886);
client.setCallback(callback);
}
int pirPin_Bewegungssensor = D7;
int val_Bewegungssensor;
void callback(char* topic, byte* payload, unsigned int length) {
String sTopic = String(topic);
if (sTopic == "Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/OUT") {
// Workaround to get int from payload
val_Bewegungssensor = digitalRead(pirPin_Bewegungssensor);
//------- Loop für Auswertung Bewegungssensor Beginn ---------------------------------------------------------
val_Bewegungssensor = digitalRead(pirPin_Bewegungssensor);
//low = no motion, high = motion
if (val_Bewegungssensor == LOW)
{
//Serial.println("No motion = Keine Bewegung erkannt");
// Hier wird es an MQTT gesendet ....
client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/OUT",String("No motion = Keine Bewegung erkannt").c_str());
//
Serial.println("No motion = Keine Bewegung erkannt");
}
else if (val_Bewegungssensor == HIGH)
{
//Serial.println("Motion detected ALARM = Bewegung erkannt");
// Hier wird es an MQTT gesendet ....
client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/OUT",String("Motion detected ALARM = Bewegung erkannt").c_str());
//
Serial.println("Motion detected ALARM = Bewegung erkannt");
}
delay(1000);
}
//------- Loop für Auswertung Bewegungssensor ENDE -----------------------------------------------------------
else if (sTopic == "Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/IN") {
// Workaround to get int from payload
//------- Loop für Auswertung Helligkeitssensor ( LDR ) Beginn -----------------------------------------------
int pirPin_Helligkeitssensor = D6;
int val_Helligkeitssensor;
val_Helligkeitssensor = digitalRead(pirPin_Helligkeitssensor);
//low = Hell, high = Dunkel.
// Die eingänge sind invertiert ( 0 = hellt ; 1 = dunkel
// Den Schaltpunkt kann man über das Poti am Sensor einstellen
if (val_Helligkeitssensor == LOW)
{
Serial.println("Es ist hell");
// Hier wird es an MQTT gesendet ....
client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/info",String("Es ist hell").c_str());
//
}
else if (val_Helligkeitssensor == HIGH)
{
Serial.println("Es ist dunkel");
// Hier wird es an MQTT gesendet ....
client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/IN",String("Es ist dunkel").c_str());
//
}
//------- Auswertung Helligkeitssensor ( LDR ) Beginn Analogeingang 0-5V -------------------------------------------
// Hell = 5 Volt ; dunkel = 0 Volt
// read the input on analog pin 0:
int sensorValue = analogRead(A0); // Analogeingang einlesen
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
Serial.println(voltage);
client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/info",String(voltage).c_str(), true);
delay(1000);
}
//------- Loop für Auswertung Helligkeitssensor ( LDR ) ENDE -----------------------------------------------
}
void reconnect() {
while (!client.connected()) {
String clientId = "WemosNextion-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
client.subscribe("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/IN");
client.subscribe("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/OUT");
client.subscribe("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/info");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
//--------- Mqtt Ende ----------------------------------
void setup() // initialize serial communication at 9600 BPS
{
Serial.begin(9600);
// ------------ Mqtt --------------
//client.publish("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/OUT");
client.subscribe("Wohnung/Kinderzimmer/Jonas/HUE-Deckenleuchte/subscribe");
connect();
// --------------- Ende Mqtt ---------------------
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
reconnect();
}