Notifications
Clear all
BugOverflow
1
Posty
1
Users
0
Reactions
805
Widok
0
27/07/2021 11:50 am
Topic starter
how to recieve gpio singnal from domoticz and recieve it on remote esp32 using wifi?
1 Answer
0
27/07/2021 1:06 pm
Topic starter
Example ESP32 MQTT client that listened to motion sensors connected to domoticz using gpio and blink leds.
#include "EspMQTTClient.h" DynamicJsonDocument doc(512); EspMQTTClient client( "MY_WIFI_NAME", "MY_WIFI_PASS", "IP", // MQTT Broker server ip/domoticz "HOSTNAME_OF_THIS_DEVICE" // Client name that uniquely identify your device ); byte idxTOespPort [255]; //IDX array 0-255 void setup() { Serial.begin(115200); idxTOespPort[1] = 18; // IDX (sensor num) to LED PORT BLINK (esp32 port out) idxTOespPort[2] = 23; idxTOespPort[3] = 16; for (byte i = 0; i < sizeof(idxTOespPort) - 1; i++) { if(idxTOespPort[i]>0){ pinMode(idxTOespPort[i], OUTPUT); Serial.print(idxTOespPort[i]); } } //client.enableDebuggingMessages(); client.enableMQTTPersistence(); //required if is non-battery powered client.setMaxPacketSize(512); // required! default is to low to recieve messages! } void onConnectionEstablished() { Serial.println("Connected with wifi."); client.subscribe("domoticz/out", [] (const String & payload) { Serial.println(payload); deserializeJson(doc, payload); const char* sensor = doc["sensor"]; byte idx = doc["idx"]; byte status = doc["nvalue"]; if (idx == 1 || idx == 2 || idx == 3) { Serial.print("Processing IDX: "); Serial.println(idx); processLed(idx, status); } }); } void loop() { client.loop(); } void processLed(byte idx, byte status) { if (status == 1) { Serial.print("IDX led enable: "); Serial.println(idx); enableLed(idxTOespPort[idx]); } else { Serial.print("IDX led disable: "); Serial.println(idx); disableLed(idxTOespPort[idx]); } } void enableLed(byte port) { Serial.print("enabling led port num: "); Serial.println(port); digitalWrite(port, HIGH); } void disableLed(byte port) { Serial.print("disabling led port num: "); Serial.println(port); digitalWrite(port, LOW); }