Powiadomienia
Wyczyść wszystko
BugOverflow
1
Wpisy
1
Użytkownicy
0
Reactions
1,007
Widoki
0
27/07/2021 11:50 am
Rozpoczynający temat
how to recieve gpio singnal from domoticz and recieve it on remote esp32 using wifi?
1 odpowiedź
0
27/07/2021 1:06 pm
Rozpoczynający temat
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);
}
