//https://iotprojectsideas.com/bme680-indoor-air-quality-monitoring-with-esp32/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include "bsec.h"
#include <WiFi.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Bsec iaqSensor;
String output;
float temperature;
float humidity;
float pressure;
float IAQ;
float carbon;
float VOC;
const char* IAQsts;
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(100);
Wire.begin();
Serial.println(F("Starting..."));
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
Serial.println("OLED begun");
display.display();
delay(100);
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setRotation(0);
}
iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire);
checkIaqSensorStatus();
bsec_virtual_sensor_t sensorList[10] = {
BSEC_OUTPUT_RAW_TEMPERATURE,
BSEC_OUTPUT_RAW_PRESSURE,
BSEC_OUTPUT_RAW_HUMIDITY,
BSEC_OUTPUT_RAW_GAS,
BSEC_OUTPUT_IAQ,
BSEC_OUTPUT_STATIC_IAQ,
BSEC_OUTPUT_CO2_EQUIVALENT,
BSEC_OUTPUT_BREATH_VOC_EQUIVALENT,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE,
BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY,
};
iaqSensor.updateSubscription(sensorList, 10, BSEC_SAMPLE_RATE_LP);
checkIaqSensorStatus();
}
void loop() {
display.setCursor(0,0);
display.clearDisplay();
unsigned long time_trigger = millis();
if (iaqSensor.run()) { // If new data is available
output = String(time_trigger);
output += ", " + String(iaqSensor.rawTemperature);
output += ", " + String(iaqSensor.pressure);
output += ", " + String(iaqSensor.rawHumidity);
output += ", " + String(iaqSensor.gasResistance);
output += ", " + String(iaqSensor.iaq);
output += ", " + String(iaqSensor.iaqAccuracy);
output += ", " + String(iaqSensor.temperature);
output += ", " + String(iaqSensor.humidity);
output += ", " + String(iaqSensor.staticIaq);
output += ", " + String(iaqSensor.co2Equivalent);
output += ", " + String(iaqSensor.breathVocEquivalent);
Serial.println(output);
} else {
checkIaqSensorStatus();
}
Serial.print("Temperature = ");
Serial.print(iaqSensor.temperature);
Serial.println(" *C");
display.print("Temperature: ");
display.print(iaqSensor.temperature);
display.println(" *C");
Serial.print("Pressure = ");
Serial.print(iaqSensor.pressure / 100.0);
Serial.println(" hPa");
display.print("Pressure: ");
display.print(iaqSensor.pressure / 100);
display.println(" hPa");
Serial.print("Humidity = ");
Serial.print(iaqSensor.humidity);
Serial.println(" %");
display.print("Humidity: ");
display.print(iaqSensor.humidity);
display.println(" %");
Serial.print("IAQ = ");
Serial.print(iaqSensor.staticIaq);
Serial.println(" PPM");
display.print("IAQ: ");
display.print(iaqSensor.staticIaq);
display.println(" PPM");
Serial.print("CO2 equiv = ");
Serial.print(iaqSensor.co2Equivalent);
Serial.println(" PPM");
display.print("CO2eq: ");
display.print(iaqSensor.co2Equivalent);
display.println(" PPM");
Serial.print("Breath VOC = ");
Serial.print(iaqSensor.breathVocEquivalent);
Serial.println(" PPM");
display.print("VOC: ");
display.print(iaqSensor.breathVocEquivalent);
display.println(" PPM");