Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // source : https://github.com/BoschSensortec/BSEC-Arduino-library/blob/master/examples/basic/basic.ino
- // https://circuits4you.com/2018/01/02/esp8266-timer-ticker-example/
- #include "bsec.h"
- // # ============================================================== ¤ ticker
- // kind of multithreading (launch a function when needed, independantly of loop)
- #include <Ticker.h> //Ticker Library
- Ticker tickerMeasurement;
- void takeMeasurement(void);
- Ticker tickerSendToOSM;
- void sendToOSM(void);
- // # ============================================================== ¤
- // Helper functions declarations
- void checkIaqSensorStatus(void);
- void errLeds(void);
- // Create an object of the class Bsec
- Bsec iaqSensor;
- String output;
- void takeMeasurement()
- {
- if (iaqSensor.run())
- {
- Serial.println("takeMeasurement");
- }
- else
- {
- checkIaqSensorStatus();
- }
- }
- void sendToOSM()
- {
- // 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);
- }
- // Entry point for the example
- void setup(void)
- {
- Serial.begin(115200);
- Wire.begin();
- Serial.println("test.ino : based on basic.ino");
- iaqSensor.begin(BME680_I2C_ADDR_PRIMARY, Wire);
- output = "\nBSEC library version " + String(iaqSensor.version.major) + "." + String(iaqSensor.version.minor) + "." + String(iaqSensor.version.major_bugfix) + "." + String(iaqSensor.version.minor_bugfix);
- 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();
- // Print the header
- output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], Static IAQ, CO2 equivalent, breath VOC equivalent";
- Serial.println(output);
- // Initialize Ticker every 3s
- tickerMeasurement.attach(3, takeMeasurement); //Use <strong>attach_ms</strong> if you need time in ms
- tickerSendToOSM.attach(3, sendToOSM); //Use <strong>attach_ms</strong> if you need time in ms
- }
- // Function that is looped forever
- void loop(void)
- {
- // 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);
- // // delay(3000); // added https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME680-warning-code-2-and-BME680-error-code-2-on-NodeMcu-esp8266/m-p/10524/highlight/true#M1869
- // }
- // else
- // {
- // checkIaqSensorStatus();
- // }
- }
- // 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);
- }
- }
- }
- void errLeds(void)
- {
- pinMode(LED_BUILTIN, OUTPUT);
- digitalWrite(LED_BUILTIN, HIGH);
- delay(100);
- digitalWrite(LED_BUILTIN, LOW);
- delay(100);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement