Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include "Adafruit_SGP30.h"
- #define TCAADDR 0x70
- Adafruit_SGP30 sgp;
- extern "C" {
- #include "utility/twi.h" // from Wire library, so we can do bus scanning
- }
- void tcaselect(uint8_t i) {
- if (i > 7) return;
- Wire.beginTransmission(TCAADDR);
- Wire.write(1 << i);
- Wire.endTransmission();
- }
- /* return absolute humidity [mg/m^3] with approximation formula
- * @param temperature [°C]
- * @param humidity [%RH]
- */
- uint32_t getAbsoluteHumidity(float temperature, float humidity) {
- // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
- const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
- const uint32_t absoluteHumidityScaled = static_cast<uint32_t>(1000.0f * absoluteHumidity); // [mg/m^3]
- return absoluteHumidityScaled;
- }
- void setup() {
- while (!Serial);
- delay(1000);
- Wire.begin();
- Serial.begin(115200);
- Serial.println("SGP30 test");
- tcaselect(0); //Select sensor... using 0 and 1 at the moment
- if (! sgp.begin()){
- Serial.println("Sensor not found :(");
- while (1);
- }
- }
- int counter = 0;
- void loop() {
- // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals
- //float temperature = 22.1; // [°C]
- //float humidity = 45.2; // [%RH]
- //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));
- if (! sgp.IAQmeasure()) {
- Serial.println("Measurement failed");
- return;
- }
- tcaselect(0); //seems to be ignoring this and reading second one no matter what
- uint16_t TVOC_base, eCO2_base;
- if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
- Serial.println("Failed to get baseline readings");
- return;
- }
- Serial.print("Sens 0 TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb \t");
- Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
- delay(500);
- tcaselect(1);
- if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
- Serial.println("Failed to get baseline readings");
- return;
- }
- Serial.print("Sens 1 TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb \t");
- Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
- delay(500);
- counter++;
- if (counter == 30) {
- counter = 0;
- // uint16_t TVOC_base, eCO2_base;
- if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
- Serial.println("Failed to get baseline readings");
- return;
- }
- Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
- Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement