Hallo zusammen,
ich habe mal eine Frage zum gleichzeitigen Einsatz eines ESP32 als
Webserver und als MQTT-Client. Ich möchte über MQTT Daten empfangen und
diese über den Webserver als HTML darstellen.
Bisher benutze ich folgende Struktur (ich habe nur die relevanten Teile
eingefügt):
1 | #include <WiFi.h>
|
2 | #include <PubSubClient.h>
|
3 |
|
4 | WiFiClient espClient;
|
5 | PubSubClient client(espClient);
|
6 |
|
7 | // Set web server port number to 80
|
8 | WiFiServer server(80);
|
9 |
|
10 | void setup(){
|
11 | client.setServer(mqtt_server, 1883);
|
12 | client.setCallback(callback);
|
13 |
|
14 | //Subscribe to topics
|
15 | ...
|
16 | }
|
17 |
|
18 | void loop(){
|
19 | client.loop)=;
|
20 |
|
21 | WiFiClient client = server.available(); // Listen for incoming clients
|
22 |
|
23 | if (client) {
|
24 | while (client.connected()){
|
25 | //Print HTML
|
26 | ...
|
27 | }
|
28 | }
|
29 | }
|
Wenn der ESP32 rebootet funktioniert er als MQTT Client. Die Nachrichten
sind auf dem seriellen Monitor sichtbar. Sobald ich allerdings die HTML
über einen Browser aufrufe, empfängt er keine MQTT-Nachrichten mehr. Ich
gehe davon aus, dass der HTTP-Request des Browsers den Client
reinitialisiert und daher die MQTT-Einstellungen weg sind. Wie im Code
zu sehen, habe ich auch das HTTP-Client-Objekt schon umbenannt, damit es
nicht beides mal "client" heißt, hat aber nicht geholfen. Hat jemand
eventuell eine Idee, wie man das lösen könnte? Oder vielleicht einen
Beispiel-Code? Wäre sehr dankbar.
Beste Grüße