commit 17f7f28bf9e7c4361de85985965a2918ba832faf Author: Bryan Date: Fri Apr 23 22:52:55 2021 -0600 initial commit diff --git a/homie-ds18b20.ino b/homie-ds18b20.ino new file mode 100644 index 0000000..a445cad --- /dev/null +++ b/homie-ds18b20.ino @@ -0,0 +1,61 @@ +#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(); +}