#include #include #include #define ONE_WIRE_BUS 2 const int READ_INTERVAL = 10000; unsigned long lastReadingSent = 0; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); int millisToWait = sensors.millisToWaitForConversion(12); bool waitingForConversion = false; unsigned long millisAtStartConversion = 0; HomieNode temperatureNode("temperature", "Temperature", "temperature"); void loopHandler() { if (millis() - lastReadingSent >= READ_INTERVAL) { if (waitingForConversion == false) { sensors.requestTemperatures(); waitingForConversion = true; millisAtStartConversion = millis(); } if ((waitingForConversion == true) && (millis() - millisAtStartConversion >= millisToWait)) { float temperature = sensors.getTempCByIndex(0); Homie.getLogger() << "Temperature: " << temperature << " °C" << endl; temperatureNode.setProperty("temperature").send(String(temperature)); waitingForConversion = false; lastReadingSent = millis(); } } } void setup() { Serial.begin(115200); Serial << endl << endl; Homie_setFirmware("awesome-ds18b20", "1.0.0"); Homie.setLoopFunction(loopHandler); temperatureNode.advertise("temperature").setName("Temperature") .setDatatype("float") .setUnit("ºC"); sensors.begin(); sensors.setResolution(12); sensors.setWaitForConversion(false); Homie.setup(); } void loop() { Homie.loop(); }