#include <SPI.h>
#include <TFT_eSPI.h>
//#include <Wire.h>
#include "bsec.h"
TFT_eSPI tft = TFT_eSPI();
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define FONT_SIZE 2
#define SEALEVELPRESSURE_HPA (1013.25)
Bsec iaqSensor;
String output;
void checkIaqSensorStatus(void);
void errLeds(void);
float temperature;
float humidity;
float pressure;
float IAQ;
float carbon;
float VOC;
const char* IAQsts;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(100);
Wire.begin();
Serial.println(F("Starting..."));
}
iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire);
Serial.println(output);
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() {
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");
delay(2000);
}
// Helper function definitions
void checkIaqSensorStatus(void)
{
if (iaqSensor.status != BSEC_OK) {
if (iaqSensor.status < BSEC_OK) {
output = "BSEC error code : " + String(iaqSensor.status);
Serial.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
} else {
output = "BSEC warning code : " + String(iaqSensor.status);
Serial.println(output);
}
}
if (iaqSensor.bme680Status != BME680_OK) {
if (iaqSensor.bme680Status < BME680_OK) {
output = "BME680 error code : " + String(iaqSensor.bme680Status);
Serial.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
} else {
output = "BME680 warning code : " + String(iaqSensor.bme680Status);
Serial.println(output);
}
}
}