Důležité je v publish pro domoticz dát uvozovky v JSON u hodnoty odesílané.
#include <WiFi.h> #include <PubSubClient.h> #define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */ #define TIME_TO_SLEEP 30 /* Time ESP32 will go to sleep (in seconds) */ #define mqtt_topic "esp/test" RTC_DATA_ATTR int bootCount = 0; const char* ssid = "AP Hlousek"; const char* password = "**"; const char* mqttServer = "**"; const int mqttPort = 1883; const char* mqttUser = "**"; const char* mqttPassword = "**"; #define temperature_topic "sensor/temperature" String temp_str; char temp[50]; int pTrig = 23; int pEcho = 22; // inicializace proměnných, do kterých se uloží data long odezva, vzdalenost; WiFiClient espClient; PubSubClient client(espClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); Serial.println("-----------------------"); } void setup() { Serial.begin(115200); pinMode(pTrig, OUTPUT); pinMode(pEcho, INPUT); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); client.setServer(mqttServer, mqttPort); client.setCallback(callback); while (!client.connected()) { Serial.println("Connecting to MQTT..."); if (client.connect("ESP32Client", mqttUser, mqttPassword )) { Serial.println("connected"); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } // nastavíme na 2 mikrosekundy výstup na GND (pro jistotu) // poté nastavíme na 5 mikrosekund výstup rovný napájení // a poté opět na GND digitalWrite(pTrig, LOW); delayMicroseconds(2); digitalWrite(pTrig, HIGH); delayMicroseconds(5); digitalWrite(pTrig, LOW); // pomocí funkce pulseIn získáme následně // délku pulzu v mikrosekundách (us) odezva = pulseIn(pEcho, HIGH); // přepočet získaného času na vzdálenost v cm vzdalenost = odezva / 58.31; //client.publish(mqtt_topic, String(vzdalenost).c_str(), true); client.publish("domoticz/in", ("{\"idx\": 53, \"nvalue\":0,\"svalue\":\""+ String(vzdalenost)+"\"}").c_str()); //client.subscribe("esp/test"); for(int i=0;i<10; i++) { client.loop(); //Ensure we've sent & received everything delay(100); } Serial.print("Going to Sleep..."); esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); } void loop() { }
