From fe29b238ff69332e6eb5ff55b3f16ded766b051e Mon Sep 17 00:00:00 2001 From: Fisch Date: Tue, 17 Aug 2021 22:31:32 +0200 Subject: [PATCH] add htu21d sensor --- platformio.ini | 28 ++++++++++++- src/main.cpp | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 6906272..4f15486 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,8 +16,9 @@ #data_dir=data_sensoresp1 #data_dir=data_sensoresp2 #data_dir=data_sensoresp3 -data_dir=data_sensoresp4 +#data_dir=data_sensoresp4 #data_dir=data_sensoresp5 +data_dir=data_sensoresp3dprinter #Outdoor @@ -244,3 +245,28 @@ lib_deps = Homie@3.0.0 + +#3D Printer +[env:sensoresp3dprinter] +platform = espressif8266 +board = d1_mini +framework = arduino + +monitor_port = /dev/ttyUSB0 +monitor_speed = 115200 + +build_flags = + -D SENSOR_HTU21D + -D dataHTU21D_temperature_minchange=0.2 + -D dataHTU21D_temperature_senddelaymax=1000*60*10 + -D dataHTU21D_humidity_minchange=1.0 + -D dataHTU21D_humidity_senddelaymax=1000*60*10 + + + +lib_deps = + adafruit/Adafruit HTU21DF Library @ ^1.0.5 + ArduinoJson@6.16.1 #dependency of homie. using older version because of "ambiguous overload for operator|" error + Homie@3.0.0 + + diff --git a/src/main.cpp b/src/main.cpp index a8663e9..4813988 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,6 +53,21 @@ struct sensordata float value_pressureBMP=0; #endif +#ifdef SENSOR_HTU21D + //Connect SCL to D1, SDA to D2, GND and 3v3 + #ifndef WIRE_H + #include + #define WIRE_H + #endif + #include "Adafruit_HTU21DF.h" + bool htu21dinit_ok=false; + Adafruit_HTU21DF htu = Adafruit_HTU21DF(); + struct sensordata dataHTU21D_temperature; //struct values are changed in setup() + float value_temperatureHTU=0; + struct sensordata dataHTU21D_humidity; //struct values are changed in setup() + float value_humidityHTU=0; +#endif + #ifdef SENSOR_HS1101 struct sensordata dataHS1101; float value_humidityHS1101=0; @@ -66,7 +81,10 @@ struct sensordata #ifdef SENSOR_BH1750 //SCL=D1, SDA=D2 + #ifndef WIRE_H #include + #define WIRE_H + #endif #include BH1750 lightMeter(0x23); //0x23 if addr connected to ground (=pin open), 0x5c if addr pulled high bool bh1750init_ok=false; @@ -297,6 +315,29 @@ void setup() { #endif #endif + #ifdef SENSOR_HTU21D + Serial.println("initializing htu21d"); + if (!htu.begin()) { + Serial.println("#ERROR: HTU21D init fail\n"); + }else{ + htu21dinit_ok=true; //stays false if init failed, sensor will not be read in loop + } + #ifdef dataHTU21D_temperature_minchange + dataHTU21D_temperature.minchange=dataHTU21D_temperature_minchange; + #endif + #ifdef dataHTU21D_temperature_senddelaymax + dataHTU21D_temperature.senddelaymax=dataHTU21D_temperature_senddelaymax; + #endif + #ifdef dataHTU21D_humidity_minchange + dataHTU21D_humidity.minchange=dataHTU21D_humidity_minchange; + #endif + #ifdef dataHTU21D_humidity_senddelaymax + dataHTU21D_humidity.senddelaymax=dataHTU21D_humidity_senddelaymax; + #endif + #endif + + + #ifdef SENSOR_HS1101 Serial.println("initializing hs1101"); #ifdef dataHS1101_minchange @@ -507,6 +548,11 @@ void setup() { sensorNode.advertise("pressure"); #endif + #ifdef SENSOR_HTU21D + sensorNode.advertise("temperature_htu"); + sensorNode.advertise("humidity_htu"); + #endif + #ifdef SENSOR_MHZ19 sensorNode.advertise("co2"); #ifdef MHZ19CALIBRATIONTOPIC @@ -671,6 +717,64 @@ void loop_BMP180_pressure() } #endif +#ifdef SENSOR_HTU21D +void loop_HTU21D_temperature() +{ + sensordata &d=dataHTU21D_temperature; + bool _changed=false; + + if (millis() >= (d.lastreadtime+d.readdelay)) { + value_temperatureHTU = htu.readTemperature(); + if (fabs(d.lastsentvalue-value_temperatureHTU)>=d.minchange){ + _changed=true; + } + d.lastreadtime=millis(); + } + + if (_changed || millis() >= (d.lastsent+d.senddelaymax)) { + Serial.print("Sending HTU21D_temperature. reason="); + if (_changed) Serial.println("change"); else Serial.println("time"); + checkESPStatus(); + + if (!(isnan(value_temperatureHTU) == 1)){ //success + sensorNode.setProperty("temperature_htu").send(String(value_temperatureHTU)); + Homie.getLogger() << "temperature_htu " << ": " << value_temperatureHTU << endl; + d.lastsentvalue=value_temperatureHTU; + } + + d.lastsent=millis(); + } +} + +void loop_HTU21D_humidity() +{ + sensordata &d=dataHTU21D_humidity; + bool _changed=false; + + if (millis() >= (d.lastreadtime+d.readdelay)) { + value_humidityHTU = htu.readHumidity(); + if (fabs(d.lastsentvalue-value_humidityHTU)>=d.minchange){ + _changed=true; + } + d.lastreadtime=millis(); + } + + if (_changed || millis() >= (d.lastsent+d.senddelaymax)) { + Serial.print("Sending HTU21D_humidity. reason="); + if (_changed) Serial.println("change"); else Serial.println("time"); + checkESPStatus(); + + if (!(isnan(value_humidityHTU) == 1)){ //success + sensorNode.setProperty("humidity_htu").send(String(value_humidityHTU)); + Homie.getLogger() << "humidity_htu " << ": " << value_humidityHTU << endl; + d.lastsentvalue=value_humidityHTU; + } + + d.lastsent=millis(); + } +} +#endif + #ifdef SENSOR_HS1101 void loop_HS1101() { @@ -1156,6 +1260,13 @@ void loopHandler() { } #endif + #ifdef SENSOR_HTU21D + if (htu21dinit_ok) { + loop_HTU21D_temperature(); + loop_HTU21D_humidity(); + } + #endif + #ifdef SENSOR_HS1101 loop_HS1101(); #endif