Arduino ESP32 verbinden mit IPS

Ich habe jetzt schon viel gelesen und gesucht und getestet und bekomme es nicht hin.

Ich habe einen ESP32 den ich mit Arduino Programmierung und möchte ganz einfach so klingt es zumindest 2 Ausgänge schalten und vielleicht noch eine Abfrage ob er noch lebt und eine Status abfrage der Schaltzustände von dem ESP in das IPS bekommen.

Netzwerkverbindung bekomme ich hin aber nicht das IPS mit dem ESP Kommuniziert, kann mir da jemand weiter helfen wie ich genau schritt für schritt vorgehe?

Würde mich über Hilfe sehr freuen.

Nimm den Online Flasher von Tasmota und flashe Dir ein 32er File drauf, dann parametriere Dein WLAN SSID und Passwort und nimm die MQTT Daten von dem MQTT Modul von IP-Symcon, dann läuft Das mit ESP32 und IP-Symcon.

Tasmota bähhh, dabei lernt er doch nichts.
Die einfachste und auch elegannteste Variante bei der man auch was lernt führt allerdings tatsächlich über MQTT.
An der ESP Seite wäre da PubSubClient.h dein Freund.

Wenn man es etwas rustikaler haben will dann über TCP Client/Server Socket. Du überlegts dir dabei einfach einen String den du an den ESP schickst, am ESP parst du das empfangene und führts dann halt irgendwas aus.

oder … gibt 1101 Möglichkeiten zu kommunizieren.

Für TCP Socket kann es bspw. so aussehen (ist halt für einen 8266 NodeMCU, aber der Code ist ja der selbe:

#include <ESP8266WiFi.h>

#define Relais1 4
#define Relais2 2
#define Relais3 12
#define Relais4 13


//WLAN ESP8266
const char* ssid     = "xxxx";
const char* password = "xxxxxx";
const char* host = "10.0.0.1";
IPAddress ip(10, 0, 0, 55);
IPAddress gateway(10, 0, 0, 138);
IPAddress subnet(255, 255, 255, 0);

int  IPSPort = 1108;
long WatchdogCounter;
unsigned char reconnectCount = 0;

String IPSMsg = "";
boolean MSGstartFlag = false;
boolean MSGstopFlag = false;

WiFiClient client;

void setup() {
  Serial.begin(9600);
  Serial.println("Set all Output to OFF State");
  pinMode(Relais1, OUTPUT);
  pinMode(Relais2, OUTPUT);
  pinMode(Relais3, OUTPUT);
  pinMode(Relais4, OUTPUT);
  
  digitalWrite(Relais1, LOW);
  digitalWrite(Relais2, LOW);
  digitalWrite(Relais3, LOW);
  digitalWrite(Relais4, LOW);

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    if (reconnectCount >= 60) {
      ESP.restart();
    }
    Serial.print(".");
    reconnectCount++;
  }
  reconnectCount = 0;

  Serial.println("");
  Serial.print("WiFi connected    ");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  connectToServer();
  client.println("ESP8266 Connected");

}

void loop() {
  if (client.connected()) {
    readCharfromPort();   // Receive data from IPS port:
    if (MSGstopFlag) {
      IPSMsg=IPSMsg.substring(1,(IPSMsg.length())-1);
      Serial.println(IPSMsg);
      if (IPSMsg == "R1_ON") {
          digitalWrite(Relais1, HIGH);
          delay(500);
          digitalWrite(Relais1, LOW);
      }

     if (IPSMsg == "R2_ON") {
          digitalWrite(Relais2, HIGH);
          delay(500);
          digitalWrite(Relais2, LOW);
      }

      if (IPSMsg == "R3_ON") {
          digitalWrite(Relais3, HIGH);
          delay(500);
          digitalWrite(Relais3, LOW);
      }

      if (IPSMsg == "R4_ON") {
          digitalWrite(Relais4, HIGH);
          delay(500);
          digitalWrite(Relais4, LOW);
      }

      client.write("OK");

      if (IPSMsg == "Watchdog") WatchdogCounter = 0;

      if (WatchdogCounter > 60) {
        WatchdogCounter = 0;
        digitalWrite(Relais1, LOW);
        digitalWrite(Relais2, LOW);
        digitalWrite(Relais3, LOW);
        digitalWrite(Relais4, LOW);
        client.write("Watchdog");
        }

      IPSMsg = "";
      MSGstopFlag = false;
      MSGstartFlag = false;
      yield();
    }
  }
    else {
      delay(500);
      if (reconnectCount >= 60) {
        ESP.restart();
      }
      Serial.println("Connection lost!");
      Serial.println("Try to reconnect...");
      connectToServer();
      reconnectCount++;
    }
  }

  // Process each char from Port and build Data String
  void readCharfromPort() {
    char inChar = client.read();
    // Serial.print(inChar);
    if (inChar == '<') {   //start character
      MSGstartFlag = true;
    }
    if (inChar == '>') {    //end character
      MSGstopFlag = true;
    }
    if (MSGstartFlag) {
      IPSMsg = IPSMsg + inChar;
    }
  }

  void timerCallback(void *pArg) {
    WatchdogCounter = WatchdogCounter + 1;
  } // End of timerCallback

  void connectToServer() {
    Serial.print("connecting to ");
    Serial.println(host);
    if (!client.connect(host, IPSPort)) {
      Serial.println("connection failed");
      return;
    }
    Serial.print("Connected to IPS Server at Port:");
    Serial.println(IPSPort);
  }


Das meißte hab ich aber über MQTT mit der PubSubClient Library gemacht. Das ist aber mit VSCode und nicht der Arduino Library, weiß nicht ob du damit was anfangen kannst.

schöne Grüße
Bernhard

Vielen dank für eure Antworten das Teste ich beides Überweihnachten und Teile meine Ergebnisse dann :wink: