921 lines
20 KiB
C++
921 lines
20 KiB
C++
|
|
/********************* Measurement **************************************/
|
|
void measurement() {
|
|
|
|
#ifdef BME2_USE
|
|
if (bme280Check) {
|
|
bme.read(pressure, temperature, humidity, tempUnit, presUnit);
|
|
yield();
|
|
delay(10);
|
|
bme.read(pressure, temperature, humidity, tempUnit, presUnit);
|
|
yield();
|
|
}
|
|
#endif
|
|
|
|
#ifdef SHT_USE
|
|
if (sht30Check) {
|
|
if (sht.readSample())
|
|
{
|
|
yield();
|
|
humidity = sht.getHumidity();
|
|
yield();
|
|
temperature = sht.getTemperature();
|
|
yield();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef SI7021_USE
|
|
if (si7021Check) {
|
|
// Measure Relative Humidity from the HTU21D or Si7021
|
|
humidity = THMeter.getRH();
|
|
yield();
|
|
delay(10);
|
|
// Measure Temperature from the HTU21D or Si7021
|
|
temperature = THMeter.getTemp();
|
|
yield();
|
|
//ToDo Heater https://www.silabs.com/community/sensors/forum.topic.html/when_si7021_is_neede-8a2a
|
|
if (humidity >= 80.0) {
|
|
THMeter.heaterOn();
|
|
delay(50);
|
|
//THMeter.heaterOff();
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef BH_USE
|
|
if (bh1750Check) {
|
|
//vislight = float(lightMeter.readLightLevel(true, false));
|
|
vislight = lightMeter.readLightLevel(true);
|
|
yield();
|
|
if (vislight > 40000.0 ) {
|
|
if (lightMeter.setMTreg(32)) {
|
|
yield();
|
|
|
|
}
|
|
}
|
|
else {
|
|
if (vislight > 10.0 && vislight <= 40000.0 && lightMeter.setMTreg(69))
|
|
{
|
|
yield();
|
|
}
|
|
}
|
|
if (vislight < 10.0) {
|
|
if (lightMeter.setMTreg(254)) {
|
|
yield();
|
|
}
|
|
}
|
|
yield();
|
|
if (vislight < 0.0)
|
|
{
|
|
vislight = -1;
|
|
}
|
|
else {
|
|
vislight = lightMeter.readLightLevel(true);
|
|
yield();
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
#ifdef VEML_USE
|
|
if (veml6075Check) {
|
|
//uvMeter.triggerMeasurement();
|
|
delay(10);
|
|
uvMeter.poll();
|
|
yield();
|
|
uvalight = float(uvMeter.getUVA());
|
|
yield();
|
|
uvblight = float(uvMeter.getUVB());
|
|
yield();
|
|
uvi = uvMeter.getUVIndex();
|
|
yield();
|
|
uvMeter.sleep(true);
|
|
yield();
|
|
}
|
|
#endif
|
|
|
|
#ifdef CCS_USE
|
|
if (ccs811Check) {
|
|
yield();
|
|
uint8_t ccs_error = 0;
|
|
// set environmental data
|
|
ccs.setEnvData(temperature, humidity);
|
|
while (digitalRead(CCSINTERRUPT) == HIGH)
|
|
{
|
|
delay(100);
|
|
Serial.print(".");
|
|
}
|
|
// Read the sensor data, this updates multiple fields
|
|
// in the CCS811 library
|
|
ccs.readAlgResultDataRegister();
|
|
if (ccs.hasERROR()) {
|
|
ccs_error = ccs.getERROR_ID();
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println(F("ERROR: CCS811 Error Flag Set"));
|
|
Serial.print(F("INFO: CCS811 Error Register = "));
|
|
Serial.println(ccs_error);
|
|
errorDecode(ccs_error);
|
|
Serial.println();
|
|
#endif
|
|
ccs811Check = false;
|
|
}
|
|
if (ccs811Check) {
|
|
// Data is ready
|
|
eco2 = float(ccs.geteCO2());
|
|
tvoc = float(ccs.getTVOC());
|
|
}
|
|
#ifdef SERIAL_DEBUG
|
|
//Serial.println(F("ERROR: CCS811 Data Not Ready"));
|
|
#endif
|
|
}
|
|
#endif
|
|
/******************** SGP30 ********************/
|
|
#ifdef SGP30_USE
|
|
if (sgp30Check) {
|
|
yield();
|
|
uint8_t sgp_error = 0;
|
|
// set environmental data
|
|
//sgp.setHumidity(humidity);
|
|
sgp.measureAirQuality();
|
|
|
|
// Data is ready
|
|
eco2 = float(sgp.CO2);
|
|
tvoc = float(sgp.TVOC);
|
|
}
|
|
#ifdef SERIAL_DEBUG
|
|
//Serial.println(F("ERROR: SGP30 Data Not Ready"));
|
|
#endif
|
|
|
|
#endif
|
|
/************************** ADC Measurement *********************************/
|
|
#ifdef BATTERY_USE
|
|
adc = analogRead(A0);
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("ADC Read:\t" + String(adc) );
|
|
#endif
|
|
yield();
|
|
delay(10);
|
|
batt_str = String(float(voltageDivCorrelation(adc) - BATT_MEASUREMENT_OFFSET) / 100);
|
|
batt_str.toCharArray(batt, batt_str.length() + 1);
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Battery Read:\t" + batt_str + " V" + "\t\t\t");
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Battery: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(BATTERY_FEED, batt, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
}
|
|
yield();
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
#endif
|
|
/********************* Temperature **************************************/
|
|
#ifdef BME2_USE
|
|
if (bme280Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Temperature:\t");
|
|
Serial.print(temperature);
|
|
Serial.print(" °" + String(metric ? 'C' : 'F') );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
temp_str = String(temperature);
|
|
temp_str.toCharArray(temp, temp_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + temp_str + "°" + String(metric ? 'C' : 'F'));
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Temperature: \t");
|
|
#endif
|
|
if (! mqttClient.publish(TEMPERATURE_FEED, temp, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
/********************* Pressure **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Pressure:\t");
|
|
Serial.print(pressure);
|
|
Serial.print(" hPa");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
pres_str = String(pressure);
|
|
pres_str.toCharArray(pres, pres_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 16, 128, pres_str + " hPa");
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Pressure: \t");
|
|
#endif
|
|
if (! mqttClient.publish(PRESSURE_FEED, pres, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 16, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 16, 128, "o");
|
|
#endif
|
|
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
/********************* Humidity **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Humidity:\t");
|
|
Serial.print(humidity);
|
|
Serial.print(" %" );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
hum_str = String(humidity);
|
|
hum_str.toCharArray(hum, hum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(hum) + " %");
|
|
#endif
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Humidity: \t");
|
|
#endif
|
|
|
|
if (! mqttClient.publish(HUMIDITY_FEED, hum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* Temperature **************************************/
|
|
#ifdef SHT_USE
|
|
if (sht30Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Temperature:\t");
|
|
Serial.print(temperature);
|
|
Serial.print(" °" + String(metric ? 'C' : 'F') );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
temp_str = String(temperature);
|
|
temp_str.toCharArray(temp, temp_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + temp_str + "°" + String(metric ? 'C' : 'F'));
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Temperature: \t");
|
|
#endif
|
|
if (! mqttClient.publish(TEMPERATURE_FEED, temp, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
|
|
/********************* Humidity **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Humidity:\t");
|
|
Serial.print(humidity);
|
|
Serial.print(" %" );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
hum_str = String(humidity);
|
|
hum_str.toCharArray(hum, hum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(hum) + " %");
|
|
#endif
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Humidity: \t");
|
|
#endif
|
|
|
|
if (! mqttClient.publish(HUMIDITY_FEED, hum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif //SHT_USE
|
|
/********************* Temperature **************************************/
|
|
#ifdef SI7021_USE
|
|
if (si7021Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Temperature:\t");
|
|
Serial.print(temperature);
|
|
Serial.print(" °" + String(metric ? 'C' : 'F') );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
temp_str = String(temperature);
|
|
temp_str.toCharArray(temp, temp_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + temp_str + "°" + String(metric ? 'C' : 'F'));
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Temperature: \t");
|
|
#endif
|
|
if (! mqttClient.publish(TEMPERATURE_FEED, temp, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
|
|
/********************* Humidity **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Humidity:\t");
|
|
Serial.print(humidity);
|
|
Serial.print(" %" );
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
hum_str = String(humidity);
|
|
hum_str.toCharArray(hum, hum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(hum) + " %");
|
|
#endif
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish Humidity: \t");
|
|
#endif
|
|
|
|
if (! mqttClient.publish(HUMIDITY_FEED, hum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* UVA **************************************/
|
|
#ifdef VEML_USE
|
|
if (veml6075Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("UVA:\t\t");
|
|
Serial.print(uvalight);
|
|
Serial.print(" Ctr per mW/cm²" );
|
|
Serial.print("\t");
|
|
#endif
|
|
uva_str = String(uvalight);
|
|
uva_str.toCharArray(uva, uva_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(uva) + " ");
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish UVA: \t\t");
|
|
#endif
|
|
|
|
if (! mqttClient.publish(UVA_FEED, uva, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
/********************* UVB **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("UVB:\t\t");
|
|
Serial.print(uvblight);
|
|
Serial.print(" Ctr per mW/cm²" );
|
|
Serial.print("\t");
|
|
#endif
|
|
uvb_str = String(uvblight);
|
|
uvb_str.toCharArray(uvb, uvb_str.length() + 1);
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(uvb) + " ");
|
|
#endif
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish UVB: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(UVB_FEED, uvb, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
}
|
|
else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
/********************* UVIndex **************************************/
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("UVIndex:\t\t");
|
|
Serial.print(uvi);
|
|
Serial.print("\t\t\t");
|
|
#endif
|
|
uvindex_str = String(uvi);
|
|
uvindex_str.toCharArray(uvindex, uvindex_str.length() + 1);
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(uvindex) + " ");
|
|
#endif
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish UVIndex: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(UVINDEX_FEED, uvindex, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* visible light **************************************/
|
|
#ifdef BH_USE
|
|
if (bh1750Check && vislight >= 0.0) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Light:\t\t");
|
|
Serial.print(vislight);
|
|
Serial.print(" lx" );
|
|
Serial.print("\t\t");
|
|
#endif
|
|
light_str = String(int(vislight));
|
|
light_str.toCharArray(light, light_str.length() + 1);
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 32, 128, " " + String(light) + " lx");
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("\tPublish Light: \t\t");
|
|
#endif
|
|
|
|
if (!mqttClient.publish(LIGHT_FEED, light, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 32, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* Absolute Humidity **************************************/
|
|
#ifdef SHT_USE
|
|
if (sht30Check) {
|
|
absHumidity = EnvironmentCalculations::AbsoluteHumidity(temperature, humidity, EnvironmentCalculations::TempUnit_Celsius);
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("abs Humidity:\t");
|
|
Serial.print(absHumidity);
|
|
Serial.print(" g/m^3");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
absHum_str = String(absHumidity);
|
|
absHum_str.toCharArray(absHum, absHum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + absHum_str + "g/m^3" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish abs Humidity: \t");
|
|
#endif
|
|
if (! mqttClient.publish(ABSHUMIDITY_FEED, absHum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* Absolute Humidity **************************************/
|
|
#ifdef SI7021_USE
|
|
if (si7021Check) {
|
|
absHumidity = EnvironmentCalculations::AbsoluteHumidity(temperature, humidity, EnvironmentCalculations::TempUnit_Celsius);
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("abs Humidity:\t");
|
|
Serial.print(absHumidity);
|
|
Serial.print(" g/m^3");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
absHum_str = String(absHumidity);
|
|
absHum_str.toCharArray(absHum, absHum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + absHum_str + "g/m^3" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish abs Humidity: \t");
|
|
#endif
|
|
if (! mqttClient.publish(ABSHUMIDITY_FEED, absHum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
|
|
/********************* Absolute Humidity **************************************/
|
|
#ifdef BME2_USE
|
|
if (bme280Check) {
|
|
absHumidity = EnvironmentCalculations::AbsoluteHumidity(temperature, humidity, EnvironmentCalculations::TempUnit_Celsius);
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("abs Humidity:\t");
|
|
Serial.print(absHumidity);
|
|
Serial.print(" g/m^3");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
absHum_str = String(absHumidity);
|
|
absHum_str.toCharArray(absHum, absHum_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + absHum_str + "g/m^3" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish abs Humidity: \t");
|
|
#endif
|
|
if (! mqttClient.publish(ABSHUMIDITY_FEED, absHum, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
|
|
/********************* eCO2 **************************************/
|
|
#ifdef CCS_USE
|
|
//fix sensors internal wait delay
|
|
if (ccs811Check && eco2 > 0.00) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("eCO2:\t\t");
|
|
Serial.print(eco2);
|
|
Serial.print(" ppm");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
eco2_str = String(eco2);
|
|
eco2_str.toCharArray(eco2C, eco2_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + eco2_str + "ppm" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish eCO2: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(ECO2_FEED, eco2C, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* TVOC **************************************/
|
|
#ifdef CCS_USE
|
|
//fix sensors internal wait delay
|
|
if (ccs811Check && eco2 > 0.00) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("TVOC:\t\t");
|
|
Serial.print(tvoc);
|
|
Serial.print(" ppb");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
tvoc_str = String(tvoc);
|
|
tvoc_str.toCharArray(tvocC, tvoc_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + tvoc_str + "ppb" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish TVOC: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(TVOC_FEED, tvocC, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
|
|
/********************* SGP30 eCO2 **************************************/
|
|
#ifdef SGP30_USE
|
|
//fix sensors internal wait delay
|
|
if (sgp30Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("eCO2:\t\t");
|
|
Serial.print(eco2);
|
|
Serial.print(" ppm");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
eco2_str = String(eco2);
|
|
eco2_str.toCharArray(eco2C, eco2_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + eco2_str + "ppm" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish eCO2: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(ECO2_FEED, eco2C, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/********************* TVOC **************************************/
|
|
#ifdef SGP30_USE
|
|
//fix sensors internal wait delay
|
|
if (sgp30Check) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("TVOC:\t\t");
|
|
Serial.print(tvoc);
|
|
Serial.print(" ppb");
|
|
Serial.print("\t\t");
|
|
#endif
|
|
tvoc_str = String(tvoc);
|
|
tvoc_str.toCharArray(tvocC, tvoc_str.length() + 1);
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(0, 0, 128, " " + tvoc_str + "ppb" );
|
|
#endif
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.print("Publish TVOC: \t\t");
|
|
#endif
|
|
if (! mqttClient.publish(TVOC_FEED, tvocC, true, 1) || !mqttClient.loop()) {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("Failed!");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "x");
|
|
#endif
|
|
|
|
} else {
|
|
#ifdef SERIAL_DEBUG
|
|
Serial.println("OK");
|
|
#endif
|
|
|
|
#ifdef OLED_OUTPUT
|
|
display.drawStringMaxWidth(110, 0, 128, "o");
|
|
#endif
|
|
}
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
}
|
|
#endif
|
|
/************************************ END *******************************/
|
|
mqttClient.loop();
|
|
yield();
|
|
delay(10);
|
|
return;
|
|
}
|