62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#include <Homie.h>
|
|
#include <OneWire.h>
|
|
#include <DallasTemperature.h>
|
|
|
|
#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();
|
|
}
|