INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Wemos D1 mini - MQTT Problem
13.07.2019, 16:48
Beitrag #1
Wemos D1 mini - MQTT Problem
Hallo Zusammen,

ich versuche grade die Daten eines PIR-Sensor und Fotowiderstand an einen MQTT Server zuschicken, das Funktioniert auch ca. eine halbe Stunde, danach bekomme ich vom Wemos keine Nachricht mehr geschickt.
Wenn ich ihn Neustarte, funktioniert es wieder für eine gewisse Zeit.

Nochmal kurz zum Aufbau:
Hab das Script mit Hilfe von Millis geschrieben, da ich die Daten vom Fotowiderstand nur alle 30 Sekunden abrufen will, aber auch nur wenn diese sich verändert haben,
es aber direkt eine benachrichtig geben soll sobald der PIR-Sensor eine Bewegung erkennt.
Wenn innerhalb 20 Sekunden keine Bewegung mehr stattfindet, wird wieder 0 verschickt und nach 2 Sekunden wird erneut der Fotowiderstandswert verschickt.

Hat jemand eine Idee warum sich der Wemos aufhängt?
ps. bin noch Anfänger ;-)

Code:
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define PIR_PIN D1

int sensorWertAlt = 0;
int sensorWert = 0;
int movement = 0;
int movementAlt = 0;
int movement2 = 0;

unsigned long switchOffAt = 0;
unsigned long lastMillis = 0;

WiFiClient net;
PubSubClient client(net);

const char* mqtt_server = "IP-MQTT"; //MQTT Server Adresse
const char* ssid = "Wlan"; //W-LAN SSID
const char* password = "Passwort"; //W-Lan Passwort


void setup() {
  pinMode(A0,INPUT);
  pinMode(PIR_PIN,INPUT);

lastMillis = millis();

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }

  client.setServer(mqtt_server, 1883);

  if (!client.connected()) {
    reconnect();
  }

}

void reconnect() {
  while (!client.connected()) {
    String clientId = "WemosD1Client-";
    clientId += String(random(0xffff), HEX);

    if (!client.connect(clientId.c_str(), "User", "Password")) {
      delay(100);
    }
  }
}

void loop() {
  int sensorWert = analogRead(A0);
  int movement = digitalRead(PIR_PIN);

if ((millis() - lastMillis) >= 30000 && sensorWert != sensorWertAlt) { // 30000 bis naechste Messung stattfindet
client.publish("/SmartHome/Kueche/WEMOS/Fotowiderstand_1", String(sensorWert).c_str(),true);
  lastMillis = millis();
}

if (movement != movementAlt)
  {
  switchOffAt = millis() +20000; //Zeit bis movment wieder deaktiviert wird
  client.publish("/SmartHome/Kueche/WEMOS/movement_1", String(1).c_str(),true);
  movement2 = 1;
  }
else if (switchOffAt < millis() && movement2 == 1)
  {
    client.publish("/SmartHome/Kueche/WEMOS/movement_1", String(0).c_str(),true);
    delay (2000); //Zeit nach dem erneut die Helligkeit gemessen wird nach dem switch off ging
    client.publish("/SmartHome/Kueche/WEMOS/Fotowiderstand_1", String(analogRead(A0)).c_str(),true);
    movement2 = 0;
}

sensorWertAlt = sensorWert;
movementAlt = movement;

  delay (100);
}

Gruß Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 19:39
Beitrag #2
RE: Wemos D1 mini - MQTT Problem
Ich habe leider noch zu wenig mit dem ESP8266 gemacht, daher kann ich nicht direkt helfen.
Aber mein Tipp ist, setze ein paar serielle Ausgaben ein, um den Sketch zu debuggen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 20:12
Beitrag #3
RE: Wemos D1 mini - MQTT Problem
Hallo Peter,

du prüfst die WLAN-Verbindung nur einmal im setup().
Code:
if (!client.connected()) {
    reconnect();
  }
Das ist an der Stelle eigentlich unnötig oder überflüssig.

Sinnvollerweise machst Du diese Prüfung aber im loop().
Dann kann der ESP auch auf einen eventuellen Verbindungsverlust reagieren.
Vielleicht ist Deine WLAN Verbindung weg wenn keine Daten mehr kommen und der ESP hat sich dann "augenscheinlich" aufgehängt?

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 20:14
Beitrag #4
RE: Wemos D1 mini - MQTT Problem
Hey,

per serielle Ausgabe, bekomme ich die Daten dauerhaft geschickt, ich vermute das es an der if abfrage inkl. Millis liegt.
Das ist mein erstes Projekt , habe sonst immer mit Delay gearbeitet.

An meinem MQTT-Server liegt es nicht, der ist erreichbar und ich kann auch an ihn schreiben.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 20:18 (Dieser Beitrag wurde zuletzt bearbeitet: 13.07.2019 20:25 von Tommy56.)
Beitrag #5
RE: Wemos D1 mini - MQTT Problem
Eine saubere millis-Abfrage, die auch den Überlauf problemlos händelt sollte immer so aussehen:
Code:
if (aktuelleMillis - alteMillis >= zeitSpanne) {
  alteMillis = aktuelleMillis;
  // tue irgendwas.
}
Dein Code hat andere Vergleiche drin. Das muss nicht die primäre Fehlerursache sein.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 20:25
Beitrag #6
RE: Wemos D1 mini - MQTT Problem
Wo im Programm steht die serielle Ausgabe?
Ich kann darüber nichts finden.

Und wenn der MQTT-Server noch erreichbar ist bedeutet das nicht zwangsläufig dass der Wemos auch noch mit dem WLAN-AP redet.

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.07.2019, 21:40
Beitrag #7
RE: Wemos D1 mini - MQTT Problem
In dem geposteten script war die serielle Ausgabe nicht programmiert, habe ich erst danach gemacht.
ardu_arne hatte die Lösung:

habe die reconnect Funktion in die Loop gepackt und schon funktioniert es.

Danke euch
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Esp8266-->Wemos D1: Nicht funktionsfähige WiFi Chips KarlMarv 14 3.716 29.10.2019 13:48
Letzter Beitrag: uweausbaden
  D1 mini und CC1101 Modul meowclown 5 519 13.10.2019 18:19
Letzter Beitrag: meowclown
  Wemos D1 Mini Upload Fehler Stagneth.Alexander 12 1.170 02.10.2019 21:36
Letzter Beitrag: Tommy56
  WeMos D1 nicht erkannt? Stagneth.Alexander 4 1.499 27.09.2019 08:59
Letzter Beitrag: geist4711
  Flash-Problem ESP32 Jonny 3 640 25.09.2019 18:56
Letzter Beitrag: Tommy56
  WEMOS D1 R1 - SPI und Spannung woswasi 4 946 17.08.2019 21:03
Letzter Beitrag: woswasi
  MQTT Client mit Client Zertifikaten und Benutzer/Passwort klappt nicht Mausbiber 10 1.863 11.08.2019 22:28
Letzter Beitrag: Mausbiber
  Wemos ESP8266 UDP-Empfang verschiedener Daten HarryB 1 769 09.08.2019 15:42
Letzter Beitrag: Tommy56
  ESP32 MQTT Ausfall nach 201 Minuten Jan Hirt 9 2.242 06.08.2019 18:31
Letzter Beitrag: Tommy56
  senden von JSON-Objekten an MQTT-Broker Ranulf 18 3.334 01.08.2019 16:27
Letzter Beitrag: Hilgi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste