esp8266-sensor/measurement.ino

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;
}