#include "CO2_sensor.h" Adafruit_SCD30 scd30; #define CO2_INTERVAL 120000 //ms #define SCD30TEMPMAX 50 #define SDC30HUMMAX 100 #define SCD30CO2MAX 20000 #define SCD30MIN 0 uint8_t CO2_samples = 3600 / g_pms_report_period; AQSSensor SCD30_temperature("Temperature", SCD30_temp, "degC", device_name, CO2_samples, SCD30MIN, SCD30TEMPMAX); AQSSensor SCD30_Humidity("Humidity", SCD30_hum, "%RH", device_name, CO2_samples, SCD30MIN, SDC30HUMMAX); AQSSensor SCD30_CO2("CO2", SCD30_co2, "PPM", device_name, CO2_samples, SCD30MIN, SCD30CO2MAX); uint32_t CO2_lastUpdate = 0; void initCO2sensor(void) { Serial.println("SCD30: init"); if (!scd30.begin()) { Serial.println("SCD30: Failed to find sensor"); } else { //configure sensor scd30.setMeasurementInterval(g_pms_report_period); addSensorToList(&SCD30_temperature); addSensorToList(&SCD30_Humidity); addSensorToList(&SCD30_CO2); //check callibration Mode scd30.selfCalibrationEnabled(false); scd30.read(); Serial.println("SCD30: init OK"); } } void handleCO2sensor(void) { uint32_t currentmillis = millis(); if ((currentmillis - CO2_lastUpdate > (g_pms_report_period * 1000)) || (!CO2_lastUpdate) && (scd30.dataReady())) { if (!scd30.read()) { Serial.println("SCD30: read error!"); return; } SCD30_temperature.set(uint32_t(scd30.temperature)); SCD30_Humidity.set(uint32_t(scd30.relative_humidity)); SCD30_CO2.set(uint32_t(scd30.CO2)); SCD30_temperature.publish(); SCD30_Humidity.publish(); SCD30_CO2.publish(); CO2_lastUpdate = currentmillis; } }