Update example to use sht support for sht3x and sht4x

This commit is contained in:
Phat Nguyen
2024-02-16 13:39:33 +07:00
parent fc5c0a1d6e
commit a0044ad0ac
7 changed files with 58 additions and 594 deletions

View File

@ -34,8 +34,7 @@ If you have any questions or problems, check out [our forum](https://forum.airgr
- [Sensirion Gas Index Algorithm](https://github.com/Sensirion/arduino-gas-index-algorithm) - [Sensirion Gas Index Algorithm](https://github.com/Sensirion/arduino-gas-index-algorithm)
- [Sensirion Core](https://github.com/Sensirion/arduino-core/) - [Sensirion Core](https://github.com/Sensirion/arduino-core/)
- [Sensirion I2C SGP41](https://github.com/Sensirion/arduino-i2c-sgp41) - [Sensirion I2C SGP41](https://github.com/Sensirion/arduino-i2c-sgp41)
- [Sensirion I2C SHT4x](https://github.com/Sensirion/arduino-i2c-sht4x) - [Sensirion I2C SHT](https://github.com/Sensirion/arduino-sht)
- [Sensirion I2C SHT3x](https://github.com/Sensirion/arduino-i2c-sht3x)
- [PMS](https://github.com/fu-hsi/pms) - [PMS](https://github.com/fu-hsi/pms)
## License ## License

View File

@ -51,7 +51,7 @@ CC BY-SA 4.0 Attribution-ShareAlike 4.0 International License
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */
#define DISPLAY_DELAY_SHOW_CONTENT_MS 6000 /** ms */ #define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \ #define WIFI_HOTSPOT_PASSWORD_DEFAULT \
"cleanair" /** default WiFi AP password \ "cleanair" /** default WiFi AP password \
*/ */
@ -389,6 +389,7 @@ void setup() {
/** Init I2C */ /** Init I2C */
Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin()); Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin());
delay(1000);
/** Board init */ /** Board init */
boardInit(); boardInit();
@ -423,7 +424,7 @@ void setup() {
Serial.println("Device id: " + id); Serial.println("Device id: " + id);
String id1 = id.substring(0, 9); String id1 = id.substring(0, 9);
String id2 = id.substring(9, 12); String id2 = id.substring(9, 12);
ag.display.setText("\'"+ id1); ag.display.setText("\'" + id1);
ag.display.setCursor(1, 40); ag.display.setCursor(1, 40);
ag.display.setText(id2 + "\'"); ag.display.setText(id2 + "\'");
ag.display.show(); ag.display.show();
@ -505,7 +506,7 @@ void connectToWifi() {
static void boardInit(void) { static void boardInit(void) {
/** Init SHT sensor */ /** Init SHT sensor */
if (ag.sht4x.begin(Wire) == false) { if (ag.sht.begin(Wire) == false) {
failedHandler("SHT init failed"); failedHandler("SHT init failed");
} }
@ -584,11 +585,14 @@ void pmPoll() {
} }
static void tempHumPoll() { static void tempHumPoll() {
temp = ag.sht4x.getTemperature(); if (ag.sht.measure()) {
hum = ag.sht4x.getRelativeHumidity(); temp = ag.sht.getTemperature();
hum = ag.sht.getRelativeHumidity();
Serial.printf("Temperature: %0.2f\r\n", temp); Serial.printf("Temperature: %0.2f\r\n", temp);
Serial.printf(" Humidity: %d\r\n", hum); Serial.printf(" Humidity: %d\r\n", hum);
} else {
Serial.println("Meaure SHT failed");
}
} }
static void sendDataToServer() { static void sendDataToServer() {

View File

@ -491,6 +491,7 @@ void setup() {
/** Init I2C */ /** Init I2C */
Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin()); Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin());
delay(1000);
/** Display init */ /** Display init */
u8g2.begin(); u8g2.begin();
@ -505,9 +506,7 @@ void setup() {
/** Init AirGradient server */ /** Init AirGradient server */
agServer.begin(); agServer.begin();
/** Run LED test on start up */
/** Run LED test on start up */
displayShowText("Press now for", "LED test", ""); displayShowText("Press now for", "LED test", "");
bool test = false; bool test = false;
uint32_t stime = millis(); uint32_t stime = millis();
@ -525,8 +524,8 @@ void setup() {
if (test) { if (test) {
ledTest(); ledTest();
} else { } else {
/** WIFI connect */ /** WIFI connect */
connectToWifi(); connectToWifi();
} }
/** /**
@ -716,7 +715,6 @@ static void displayShowDashboard(String err) {
u8g2.setFont(u8g2_font_t0_16_tf); u8g2.setFont(u8g2_font_t0_16_tf);
if ((err == NULL) || err.isEmpty()) { if ((err == NULL) || err.isEmpty()) {
/** Show temperature */ /** Show temperature */
if (agServer.isTemperatureUnitF()) { if (agServer.isTemperatureUnitF()) {
if (temp > -10001) { if (temp > -10001) {
@ -753,36 +751,35 @@ static void displayShowDashboard(String err) {
if (err == "WiFi N/A") { if (err == "WiFi N/A") {
u8g2.setFont(u8g2_font_t0_12_tf); u8g2.setFont(u8g2_font_t0_12_tf);
if (agServer.isTemperatureUnitF()) { if (agServer.isTemperatureUnitF()) {
if (temp > -10001) { if (temp > -10001) {
float tempF = (temp * 9 / 5) + 32; float tempF = (temp * 9 / 5) + 32;
sprintf(strBuf, "%.1f", tempF); sprintf(strBuf, "%.1f", tempF);
} else { } else {
sprintf(strBuf, "-"); sprintf(strBuf, "-");
} }
u8g2.drawUTF8(1, 10, strBuf); u8g2.drawUTF8(1, 10, strBuf);
} else { } else {
if (temp > -10001) { if (temp > -10001) {
sprintf(strBuf, "%.1f", temp); sprintf(strBuf, "%.1f", temp);
} else { } else {
sprintf(strBuf, "-"); sprintf(strBuf, "-");
} }
u8g2.drawUTF8(1, 10, strBuf); u8g2.drawUTF8(1, 10, strBuf);
} }
/** Show humidity */ /** Show humidity */
if (hum >= 0) { if (hum >= 0) {
sprintf(strBuf, "%d%%", hum); sprintf(strBuf, "%d%%", hum);
} else { } else {
sprintf(strBuf, " -%%"); sprintf(strBuf, " -%%");
} }
if (hum > 99) { if (hum > 99) {
u8g2.drawStr(97, 10, strBuf); u8g2.drawStr(97, 10, strBuf);
} else { } else {
u8g2.drawStr(105, 10, strBuf); u8g2.drawStr(105, 10, strBuf);
} }
}
}
} }
/** Draw horizontal line */ /** Draw horizontal line */
@ -1051,7 +1048,7 @@ static void boardInit(void) {
} }
/** INit SHT */ /** INit SHT */
if (ag.sht4x.begin(Wire) == false) { if (ag.sht.begin(Wire) == false) {
failedHandler("Init SHT failed"); failedHandler("Init SHT failed");
} }
@ -1067,7 +1064,6 @@ static void boardInit(void) {
if (ag.pms5003.begin(Serial0) == false) { if (ag.pms5003.begin(Serial0) == false) {
failedHandler("Init PMS5003 failed"); failedHandler("Init PMS5003 failed");
} }
} }
/** /**
@ -1510,9 +1506,14 @@ static void sendDataToServer(void) {
* @brief Update temperature and humidity value * @brief Update temperature and humidity value
*/ */
static void tempHumPoll(void) { static void tempHumPoll(void) {
temp = ag.sht4x.getTemperature(); if (ag.sht.measure()) {
hum = ag.sht4x.getRelativeHumidity();
Serial.printf("Temperature: %0.2f\r\n", temp); temp = ag.sht.getTemperature();
Serial.printf(" Humidity: %d\r\n", hum); hum = ag.sht.getRelativeHumidity();
Serial.printf("Temperature: %0.2f\r\n", temp);
Serial.printf(" Humidity: %d\r\n", hum);
} else {
Serial.println("Measure SHT failed");
}
} }

View File

@ -93,7 +93,7 @@ enum {
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */ #define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */
#define DISPLAY_DELAY_SHOW_CONTENT_MS 6000 /** ms */ #define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \ #define WIFI_HOTSPOT_PASSWORD_DEFAULT \
"cleanair" /** default WiFi AP password \ "cleanair" /** default WiFi AP password \
*/ */

View File

@ -1,369 +0,0 @@
#include <AirGradient.h>
#include <HardwareSerial.h>
#include <Wire.h>
/**
* AirGradient use ESP32C3 has default Serial0 use for PMS5003, to print log
* should use esp-hal-log instead.
*/
#include <esp32-hal-log.h>
/**
* @brief Define test board
*/
#define TEST_OPEN_AIR_OUTDOOR 0
#define TEST_ONE_INDOOR 1
/**
* @brief Define test sensor
*/
#define TEST_SENSOR_SenseAirS8 0
#define TEST_SENSOR_SHT4x 0
#define TEST_SENSOR_SGP4x 0
#define TEST_SWITCH 0
#define TEST_OLED 0
#if TEST_OPEN_AIR_OUTDOOR
#define TEST_STATUS_LED 0
#define TEST_PMS5003T 1
#endif
#define TEST_WATCHDOG 1
#if TEST_ONE_INDOOR
#define TEST_LED_BAR 1
#define TEST_SENSOR_PMS5003 0
#endif
#if TEST_OPEN_AIR_OUTDOOR
AirGradient ag(OPEN_AIR_OUTDOOR);
#elif TEST_ONE_INDOOR
AirGradient ag(ONE_INDOOR);
#else
#error "Must enable board test
#endif
void setup() {
/** Print All AirGradient board define */
printBoardDef(NULL);
#if TEST_SENSOR_SenseAirS8
/** Cause Serial is use default for PMS, CO2S8 should be use Serial 1
* Serial 1 will be init by SenseAirS8 don't need to init any more on user
* code
*/
if (ag.s8.begin(Serial1)) {
log_i("CO2S8 sensor init success");
} else {
log_i("CO2S8 sensor init failure");
}
log_i("Start baseline calib");
if (ag.s8.setBaselineCalibration()) {
log_i("Calib success");
} else {
log_e("Calib failure");
}
delay(5000); // Wait for calib done
#endif
#if TEST_SENSOR_PMS5003
if (ag.pms5003.begin(Serial0)) {
log_i("PMS5003 sensor init success");
} else {
log_i("PMS5003 sensor init failure");
}
#endif
#if TEST_PMS5003T
/**
* @brief PMS5003T_1 alway connect to Serial (esp32c3 RXD0, RXD0)
*/
if (ag.pms5003t_1.begin(Serial)) {
log_i("PMS5003T_1 sensor init success");
} else {
log_i("PMS5003T_1 sensor init failure");
}
// TODO Only test without senseair s8 because it's share the UART bus
#if TEST_SENSOR_SenseAirS8 == 0
if (ag.pms5003t_2.begin(Serial1)) {
log_i("PMS5003T_2 sensor init success");
} else {
log_i("PMS5003T_2 sensor init failure");
}
#endif
#endif
#if TEST_SENSOR_SHT4x || TEST_SENSOR_SGP4x || TEST_OLED
Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin());
#endif
#if TEST_SENSOR_SHT4x
if (ag.sht4x.begin(Wire)) {
log_i("SHT init success");
} else {
log_i("SHT init failed");
}
#endif
#if TEST_SENSOR_SGP4x
if (ag.sgp41.begin(Wire)) {
log_i("SGP init success");
} else {
log_e("SGP init failure");
}
#endif
#if TEST_LED
led.begin();
#endif
#if TEST_SWITCH
ag.button.begin();
#endif
#if TEST_OLED
ag.display.begin(Wire);
ag.display.setTextSize(1);
ag.display.setCursor(0, 0);
ag.display.setTextColor(1);
ag.display.setText("180s to connect to wifi hostpost AC-xxxxx");
ag.display.show();
#endif
#if TEST_STATUS_LED
ag.statusLed.begin();
#endif
#if TEST_LED_BAR
ag.ledBar.begin();
#endif
#if TEST_WATCHDOG
ag.watchdog.begin();
#endif
}
void loop() {
uint32_t ms;
#if TEST_SENSOR_SenseAirS8
static uint32_t lastTime = 0;
/** Wait for sensor ready */
ms = (uint32_t)(millis() - lastTime);
if (ms >= 1000) {
lastTime = millis();
log_i("CO2: %d (PPM)", ag.s8.getCo2());
}
#endif
#if TEST_SENSOR_PMS5003
static uint32_t pmsTime = 0;
ms = (uint32_t)(millis() - pmsTime);
if (ms >= 1000) {
pmsTime = millis();
if (ag.pms5003.readData()) {
log_i("Passive mode PM 1.0 (ug/m3): %d", ag.pms5003.getPm10Ae());
log_i("Passive mode PM 2.5 (ug/m3): %d", ag.pms5003.getPm25Ae());
log_i("Passive mode PM 10.0 (ug/m3): %d", ag.pms5003.getPm10Ae());
} else {
log_i("PMS sensor read failure");
}
}
#endif
#if TEST_PMS5003T
static uint32_t pmsTime = 0;
ms = (uint32_t)(millis() - pmsTime);
if (ms >= 1000) {
pmsTime = millis();
if (ag.pms5003t_1.readData()) {
log_i("PMS5003_1 PM 1.0 (ug/m3): %d", ag.pms5003t_1.getPm10Ae());
log_i("PMS5003_1 PM 2.5 (ug/m3): %d", ag.pms5003t_1.getPm25Ae());
log_i("PMS5003_1 PM 10.0 (ug/m3): %d", ag.pms5003t_1.getPm10Ae());
log_i("PMS5003_1 PM 3.0 (ug/m3): %d",
ag.pms5003t_1.getPm03ParticleCount());
log_i("Temperature : %02f °C",
ag.pms5003t_1.getTemperature());
log_i("Humidity : %02f %%",
ag.pms5003t_1.getRelativeHumidity());
} else {
log_i("PMS5003_1 sensor read failure");
}
if (ag.pms5003t_2.readData()) {
log_i("PMS5003_2 PM 1.0 (ug/m3): %d", ag.pms5003t_2.getPm10Ae());
log_i("PMS5003_2 PM 2.5 (ug/m3): %d", ag.pms5003t_2.getPm25Ae());
log_i("PMS5003_2 PM 10.0 (ug/m3): %d", ag.pms5003t_2.getPm10Ae());
log_i("PMS5003_2 PM 3.0 (ug/m3): %d",
ag.pms5003t_2.getPm03ParticleCount());
// log_i("Temperature : %02f °C",
// ag.pms5003t_1.getTemperature());
// log_i("Humidity : %02f %%",
// ag.pms5003t_1.getRelativeHumidity());
} else {
log_i("PMS5003_2 sensor read failure");
}
}
#endif
#if TEST_SENSOR_SHT4x
/**
* @brief Get SHT sensor data each 1sec
*
*/
static uint32_t shtTime = 0;
ms = (uint32_t)(millis() - shtTime);
if (ms >= 1000) {
shtTime = millis();
log_i("Get sht4x temperature: %0.2f (degree celsius)",
ag.sht4x.getTemperature());
log_i("Get sht4x temperature: %0.2f (%%)", ag.sht4x.getRelativeHumidity());
}
#endif
#if TEST_SENSOR_SGP4x
static uint32_t sgpTime;
ms = (uint32_t)(millis() - sgpTime);
if (ms >= 1000) {
sgpTime = millis();
uint16_t rawVOC;
log_i("Get TVOC: %d", ag.sgp41.getTvocIndex());
log_i("Get NOx: %d", ag.sgp41.getNoxIndex());
}
#endif
#if TEST_LED
static uint32_t ledTime;
#if TEST_OPEN_AIR_OUTDOOR
// ms = (uint32_t)(millis() - ledTime);
// if(ms >= 500)
// {
// ledTime = millis();
// led.ledToggle();
// }
#elif TEST_ONE_INDOOR
static int ledIndex;
static int ledIndexOld;
ms = (uint32_t)(millis() - ledTime);
if (ms >= 50) {
ledTime = millis();
if (ledIndex == ledIndexOld) {
led.ledOff();
} else {
// Turn last LED off
led.ledSetColor(0, 0, 0, ledIndexOld);
}
// Turn new led ON
led.ledSetColor(255, 0, 0, ledIndex);
ledIndexOld = ledIndex;
ledIndex++;
if (ledIndex >= led.getNumberOfLeds()) {
ledIndex = 0;
}
}
#else
#endif
#endif
#if TEST_SWITCH
static PushButton::State stateOld = PushButton::State::BUTTON_RELEASED;
PushButton::State state = ag.button.getState();
if (state != stateOld) {
stateOld = state;
log_i("Button state changed: %s", ag.button.toString(state).c_str());
if (state == PushButton::State::BUTTON_PRESSED) {
ag.statusLed.setOn();
} else {
ag.statusLed.setOff();
}
}
#endif
#if TEST_LED_BAR
static uint32_t ledTime;
static uint8_t ledNum = 0;
static uint8_t ledIndex = 0;
static uint8_t ledStep = 0;
static bool ledOn = false;
if (ledNum == 0) {
ledNum = ag.ledBar.getNumberOfLeds();
log_i("Get number of led: %d", ledNum);
if (ledNum) {
ag.ledBar.setBrighness(0xff);
for (int i = 0; i < ledNum; i++) {
// ag.ledBar.setColor(0xff, 0xff, 0xff, i);
// ag.ledBar.setColor(204, 136, 153, i);
// ag.ledBar.setColor(204, 0, 0, i);
// ag.ledBar.setColor(204, 100, 153, i);
ag.ledBar.setColor(0, 136, 255, i);
}
ag.ledBar.show();
}
} else {
ms = (uint32_t)(millis() - ledTime);
if (ms >= 500) {
ledTime = millis();
switch (ledStep) {
case 0: {
ag.ledBar.setColor(255, 0, 0, ledIndex);
ledIndex++;
if (ledIndex >= ledNum) {
ag.ledBar.setColor(0, 0, 0);
ledIndex = 0;
ledStep = 1;
}
ag.ledBar.show();
break;
}
case 1: {
ledIndex++;
if (ledIndex >= ledNum) {
ag.ledBar.setColor(255, 0, 0);
ag.ledBar.show();
ledIndex = ledNum - 1;
ledStep = 2;
}
break;
}
case 2: {
if (ledOn) {
ag.ledBar.setColor(255, 0, 0);
} else {
ag.ledBar.setColor(0, 0, 0);
}
ledOn = !ledOn;
ag.ledBar.show();
ledIndex--;
if (ledIndex == 0) {
ag.ledBar.setColor(0, 0, 0);
ag.ledBar.show();
ledStep = 0;
ledIndex = 0;
}
break;
}
default:
break;
}
}
}
#endif
#if TEST_WATCHDOG
static uint32_t wdgTime;
ms = (uint32_t)(millis() - wdgTime);
if (ms >= (1000 * 60)) {
wdgTime = millis();
/** Reset watchdog reach 1 minutes */
ag.watchdog.reset();
}
#endif
}

View File

@ -1,172 +0,0 @@
#include <AirGradient.h>
#include <Wire.h>
/**
* @brief Define test board
*/
#define TEST_DIY_BASIC 1
/**
* @brief Define test sensor
*/
#define TEST_SENSOR_SenseAirS8 1
// #define S8_BASELINE_CALIB
#define TEST_SENSOR_PMS5003 0
#define TEST_SENSOR_SHT4x 0
#define TEST_SENSOR_SGP4x 0
#define TEST_SWITCH 0
#define TEST_OLED 0
#if TEST_DIY_BASIC
AirGradient ag(DIY_BASIC);
#elif TEST_DIY_PRO_INDOOR_V4_2
AirGradient ag(DIY_PRO_INDOOR_V4_2);
#else
#error "Board test not defined"
#endif
void setup() {
Serial.begin(115200);
/** Print All AirGradient board define */
printBoardDef(&Serial);
#if TEST_SENSOR_SenseAirS8
if (ag.s8.begin(&Serial) == true) {
Serial.println("CO2S8 sensor init success");
} else {
Serial.println("CO2S8 sensor init failure");
}
#ifdef S8_BASELINE_CALIB
if (ag.s8.setBaselineCalibration()) {
Serial.println("Manual calib success");
} else {
Serial.println("Manual calib failure");
}
#else
if (ag.s8.setAutoCalib(8)) {
Serial.println("Set auto calib success");
} else {
Serial.println("Set auto calib failure");
}
#endif
delay(5000);
#endif
#if TEST_SENSOR_PMS5003
if (ag.pms5003.begin(&Serial) == true) {
Serial.println("PMS5003 sensor init success");
} else {
Serial.println("PMS5003 sensor init failure");
}
#endif
#if TEST_SENSOR_SHT4x || TEST_SENSOR_SGP4x || TEST_OLED
Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin());
#endif
#if TEST_SENSOR_SHT4x
if (ag.sht4x.begin(Wire, Serial)) {
Serial.println("SHT init success");
} else {
Serial.println("SHT init failed");
}
#endif
#if TEST_SENSOR_SGP4x
if (ag.sgp41.begin(Wire, Serial)) {
Serial.println("SGP init succses");
} else {
Serial.println("SGP init failure");
}
#endif
#if TEST_SWITCH
ag.button.begin(Serial);
#endif
#if TEST_OLED
ag.display.begin(Wire, Serial);
ag.display.setTextSize(1);
ag.display.setCursor(0, 0);
ag.display.setTextColor(1);
ag.display.setText("Hello");
ag.display.show();
#endif
}
void loop() {
uint32_t ms;
#if TEST_SENSOR_SenseAirS8
static uint32_t lastTime = 0;
/** Wait for sensor ready */
// if(co2s8.isReady())
// {
// Get sensor data each 1sec
ms = (uint32_t)(millis() - lastTime);
if (ms >= 1000) {
lastTime = millis();
Serial.printf("CO2: %d (PMM)\r\n", ag.s8.getCo2());
}
// }
#endif
#if TEST_SENSOR_PMS5003
static uint32_t pmsTime = 0;
ms = (uint32_t)(millis() - pmsTime);
if (ms >= 1000) {
pmsTime = millis();
if (ag.pms5003.readData()) {
Serial.printf("Passive mode PM 1.0 (ug/m3): %d\r\n",
ag.pms5003.getPm01Ae());
Serial.printf("Passive mode PM 2.5 (ug/m3): %d\r\n",
ag.pms5003.getPm25Ae());
Serial.printf("Passive mode PM 10.5 (ug/m3): %d\r\n",
ag.pms5003.getPm10Ae());
}
}
#endif
#if TEST_SENSOR_SHT4x
/**
* @brief Get SHT sensor data each 1sec
*
*/
static uint32_t shtTime = 0;
ms = (uint32_t)(millis() - shtTime);
if (ms >= 1000) {
shtTime = millis();
float temperature, humidity;
Serial.printf("SHT Temperature: %f, Humidity: %f\r\n",
ag.sht4x.getTemperature(), ag.sht4x.getRelativeHumidity());
}
#endif
#if TEST_SENSOR_SGP4x
static uint32_t sgpTime;
ms = (uint32_t)(millis() - sgpTime);
/***
* Must call this task on loop and avoid delay on loop over 1000 ms
*/
ag.sgp41.handle();
if (ms >= 1000) {
sgpTime = millis();
Serial.printf("SGP TVOC: %d, NOx: %d\r\n", ag.sgp41.getTvocIndex(),
ag.sgp41.getNoxIndex());
}
#endif
#if TEST_SWITCH
static PushButton::State stateOld = PushButton::State::BUTTON_RELEASED;
PushButton::State state = ag.button.getState();
if (state != stateOld) {
stateOld = state;
Serial.printf("Button state changed: %s\r\n",
ag.button.toString(state).c_str());
}
#endif
}

View File

@ -12,9 +12,10 @@ void setup() {
Serial.begin(115200); Serial.begin(115200);
Serial.println("Hello"); Serial.println("Hello");
Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin()); Wire.begin(ag.getI2cSdaPin(), ag.getI2cSclPin());
delay(1000);
if (ag.sht.begin(Wire) == false) { if (ag.sht.begin(Wire) == false) {
failedHandler("SHT3x init failed"); failedHandler("SHT init failed");
} }
} }