Hallo zusammen,
habe zu meinem Problem einen neuen Thread aufgebaut nachdem das Fehlverhalten meiner MQTT-Rolladensteuerung jetzt klar ist (Dank an Match1 für die erste Unterstützung bei der Fehlersuche).
Raspi 3b am LAN
ESP32's sind über PIN's 18,19,21 codiert (EInsatzort) damit ich nur eine Programmversion benötige
Um so mehr ESP's mit u.g. Programm am Netz sind um so häufiger muss ich das Publish-Kommando wiederholen da die jeweiligen Callback-Funktionen immer seltener ausgeführt werden!
- Bei einem ESP am Netzt läuft alles tadellos und um so mehr ESP's ich ins Netzt bringe umso öfter muss ich publishen.
- Zwischen zwei Konsolen kommen die Publish problemlos und schnell an, auch wenn mehrere ESP am Netz sind (Broker dann wohl nicht überlastet)
Irgendetwas am Programm muss falsch programmiert sein und muss den ESP zu arg beschäftigen
Die Funktion reconnect loopt ununterbrochen und erzeugt viel Traffic. Ist das normal?
Würde mich freuen wenn mir jemand weitere Tipps geben könnte.
#include <WiFi.h>
#include <PubSubClient.h>
const char* SSID = "xx";
const char* PSK = "xx";
const char* MQTT_BROKER = "192.168xx";
int gi_pin18, gi_pin19, gi_pin21;
char char1_oldmsg[1] ={'x'};
WiFiClient espClient;
PubSubClient client(espClient);
int hochpin = 32;
int runterpin = 33;
void setup() {
Serial.begin(115200);
pinMode(hochpin, OUTPUT);
pinMode(runterpin, OUTPUT);
pinMode(18,INPUT_PULLUP);
pinMode(19,INPUT_PULLUP);
pinMode(21,INPUT_PULLUP);
gi_pin18 = digitalRead(18);
gi_pin19 = digitalRead(19);
gi_pin21 = digitalRead(21);
digitalWrite(hochpin, HIGH); /*Relais zu Anfang auf OFF */
digitalWrite(runterpin, HIGH);/*Relais zu Anfang auf OFF */
Serial.println("Pins auf off gesetzt");
delay(1500);
setup_wifi();
client.setServer(MQTT_BROKER, 1883);
client.setCallback(callback);
}
void setup_wifi() {
delay(10);
WiFi.begin(SSID, PSK);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Received message [");
Serial.print(topic);
Serial.println("] ");
char msg[length+1];
for (int i = 0; i < length; i++) {
msg[i] = (char)payload[i];
}
msg[length] = '\0';
if (msg[0] != char1_oldmsg[0])
{
if(strcmp(msg,"hoch")==0)
{
digitalWrite(runterpin, HIGH);
delay(100);
digitalWrite(hochpin, LOW);
delay(100);
Serial.println("---runter---");
}
else if(strcmp(msg,"runter")==0)
{
digitalWrite(hochpin, HIGH);
delay(100);
digitalWrite(runterpin, LOW);
delay(100);
Serial.println("---hoch---");
}
else if(strcmp(msg,"stop")==0)
{
digitalWrite(hochpin, HIGH);
delay(100);
digitalWrite(runterpin, HIGH);
delay(100);
Serial.println("---stop---");
}
char1_oldmsg[0] = msg[0];
}
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32_Client"))
{
Serial.println("verbunden zu MQTT: ");
if ((gi_pin18==0) && (gi_pin19==1) && (gi_pin21==1))
{
client.subscribe("rollo1");
}
else if ((gi_pin18==1) && (gi_pin19==0) && (gi_pin21==1))
{
client.subscribe("rollo2");
}
else if ((gi_pin18==1) && (gi_pin19==1) && (gi_pin21==0))
{
client.subscribe("rollo3");
}
}
else
{
Serial.println("failed, rc=");
Serial.println(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect(); /*wird nur einmal am Anfang ausgeführt*/
}
client.loop();
}
Alles anzeigen