Forum: Mikrocontroller und Digitale Elektronik ESP32 WIFI MQTT Verbindungsprobleme


von Markus P. (markus_p160)


Lesenswert?

Hallo

Ich versuche gerade mein ESP32 mit mein HASSIO system zu verbinden, 
jedoch ist ein seltsames Problem aufgetreten

Alles hat gut funktioniert, bis ich mein Router umgestellt habe. Ich 
habe von dem "originalen" Magenta Connect Box auf den NETGEAR RAX40 
wegen NAT Loopback aufgerüstet.

Das Problem das aufgetreten ist:
Wenn ich mich versuche mit MQTT Server zu verbinden dann haut es mich 
aus dem WLAN herraus.

folgende Reihenfolge:

Ich verbinde mich mit dem WLAN (alles ganz normal)
Ich verbinde mich mit dem MQTT Serve (noch alles ganz normal)
kurte Zeit später verliere ich die WLAN Verbindung und nix geht mehr

Wenn ich mich nur mit dem WLAN verbinde ohne MQTT dann habe ich das 
Problem nicht.

Ich hatte ein Problem wo der ESP keinen Hostname in Rouder angezeigt 
hat. Dies habe ich behoben siehe:
https://github.com/espressif/arduino-esp32/issues/2537

Ich habe ein kleines Testprogramm geschrieben:
1
#include <WiFi.h>
2
#include <PubSubClient.h>
3
4
const char* ssid = "";
5
const char* password = "";
6
const char* mqttServer = "192.168.0.24";
7
const int mqttPort = 1883;
8
9
WiFiClient espClient;
10
PubSubClient client(espClient);
11
12
void setup()
13
{
14
Serial.begin(115200);
15
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
16
WiFi.setHostname("ESP32");
17
WiFi.begin(ssid, password);
18
while (WiFi.status() != WL_CONNECTED)
19
{
20
Serial.println(".");
21
delay(500);
22
}
23
24
Serial.println("Connected to the WiFi network");
25
Serial.println("IP Adress: ");
26
Serial.println(WiFi.localIP());
27
28
client.setServer(mqttServer, mqttPort);
29
client.setCallback(callback);
30
client.connect("1234"); //<- Problem
31
}
32
33
void callback(char* topic, byte* message, unsigned int length)
34
{
35
Serial.print("Message arrived on topic: ");
36
Serial.print(topic);
37
Serial.print(". Message: ");
38
}
39
40
void loop()
41
{
42
if (WiFi.status() != WL_CONNECTED )
43
{
44
delay(50);
45
Serial.println("LostConnection");
46
}
47
48
if (!client.connected())
49
{
50
delay(50);
51
Serial.println("LostConnectionMQTT");
52
}
53
54
}

Ein ähnliche Code läuft auch auf all meine ESP8266, da gibt es keine 
Probleme.

Woran kann es liegen?

von Fast (Gast)


Lesenswert?

client.loop() solltest du schon regelmäßig aufrufen

von Markus P. (markus_p160)


Angehängte Dateien:

Lesenswert?

Hallo

Danke für die Antwort.

Ja das ist mir durchaus bewusst. Dies löst leider nicht das Problem das 
es mich immer vom WIFI trennt.

Ich habe mal ein Video vom verhalten gemacht:
(siehe Anhang)
Ich lade den Code hoch und mache nacher nichts mehr.
Nach einiger Zeit kommt dann die Meldung das ich die WLAN Verbindung 
verloren habe.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Fast schrieb:
> client.loop() solltest du schon regelmäßig aufrufen

einmal das und ich bin mir auch nicht sicher, ob es gut ist,
client.setCallback(callback);
zu setzen, wenn es keine Funktion dafür gibt.

Gruß aus Berlin
Michael

von Markus P. (markus_p160)



Lesenswert?

Vielen Dank für die schnelle Antwort!

Ich habe dies auch schon mit den "Vollausbau" ausgetestet. Ich habe den 
Code angehängt. (Der Code ist noch etwas messy daher hab ich ich ihn 
ursprünglich nicht angehängt)
Exakt der Code ist auf dem alten Router ohne Problem gelaufen.

von Markus P. (markus_p160)


Lesenswert?

Ich habe nun das Programm für einen ESP8266 umgeschrieben, da läuft es 
ohne Probleme. Jedoch würde ich gerne von den Hardware PWM in dem ESP32 
gebrauch machen.
Kann es an der ESP32 Wlan Lib. liegen? Muss ich das was umkonfigurieren?

von Stefan F. (Gast)


Lesenswert?

Markus P. schrieb:
> Kann es an der ESP32 Wlan Lib. liegen?

Ja.

Aber ich bezweifel, dass diese Info hilfreich ist. Es kann auch an 
vielen Anderen Komponenten liegen. Und selbst wenn, du wirst die meisten 
davon nicht ändern können. Also konzentriere dich auf die Teile, die du 
beeinflussen kannst.

Als ersten würde ich mal die Stromversorgung überprüfen, ob sie stabil 
ist. Am besten mit einem Oszilloskop.

von Markus P. (markus_p160)


Lesenswert?

Ich betreibe den ESP per USB alleine auf dem Tisch. So keine extra 
Komponenten.

von Stefan F. (Gast)


Lesenswert?

Markus P. schrieb:
> Ich betreibe den ESP per USB alleine auf dem Tisch.

Das kann schon problematisch sein. Du wärst nicht der erste, dessen USB 
Kabel zu wenig Strom liefern, weil irgendwo zu große Widerstände in der 
Verbindung sind.

von Markus P. (markus_p160)


Lesenswert?

Ja das kann natürlich sein.

Ich habe es jetzt auch mal mit anderen Kabeln ausgetestet (ich habe es 
auch an verschiedenen USB Ports versucht (+ an meinen gepowerten USB Hub 
an den ich normalerweise alles anschließe)).

Das ganze Setup (Kabel, Code, Platine, ...)  hat vor dem Router Wechsel 
ohne Probleme funktioniert.

Ich vermute eher ein Software Problem.

von Fast (Gast)


Lesenswert?

Ich würde mal in der callback-function Folgendes machen:

Anstatt die payload direkt zu nehmen, mach eine Kopie
1
  byte* p = (byte*)malloc(length);
2
  // Copy the payload to the new buffer
3
  memcpy(p,payload,length);
4
 
5
  Hier kommt dein processwasweißich-Code
6
7
  // Free the memory
8
  free(p);

von Markus P. (markus_p160)


Lesenswert?

Ich habe das nun ausgetestet und leider kein Erfolg.

Ich bin jedoch auf andere Sachen draufkommen:

Wenn ich mich über meinen Zweiten Router einlocke dann habe ich die 
Probleme nicht (Dieser hängt am selben lokalen Netzwerk und gibt nur 
einen Extra Einstiegs punkt)
Könnte beim Router was falsch eingestellt sein?

: Bearbeitet durch User
von Markus P. (markus_p160)


Lesenswert?

Ich habe mir jetzt einfach einen billigen gebrauchten Router gekauft und 
denn lasse ich jetzt extra nebenher laufen. Damit funktioniert alles.

Vielen Dank für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.