forked from airgradienthq/arduino
Merge branch 'master' into develop
This commit is contained in:
4
.github/workflows/check.yml
vendored
4
.github/workflows/check.yml
vendored
@ -5,8 +5,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
example:
|
example:
|
||||||
- "BASIC_v4"
|
- "BASIC"
|
||||||
- "ONE_I-9PSL"
|
- "ONE"
|
||||||
- "Open_Air"
|
- "Open_Air"
|
||||||
- "TestCO2"
|
- "TestCO2"
|
||||||
- "TestPM"
|
- "TestPM"
|
||||||
|
@ -90,14 +90,14 @@ enum {
|
|||||||
#define WIFI_CONNECT_RETRY_MS 10000 /** ms */
|
#define WIFI_CONNECT_RETRY_MS 10000 /** ms */
|
||||||
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */
|
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */
|
||||||
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */
|
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */
|
||||||
#define DISP_UPDATE_INTERVAL 5000 /** ms */
|
#define DISP_UPDATE_INTERVAL 2500 /** ms */
|
||||||
#define SERVER_CONFIG_UPDATE_INTERVAL 30000 /** ms */
|
#define SERVER_CONFIG_UPDATE_INTERVAL 15000 /** ms */
|
||||||
#define SERVER_SYNC_INTERVAL 60000 /** ms */
|
#define SERVER_SYNC_INTERVAL 60000 /** ms */
|
||||||
#define MQTT_SYNC_INTERVAL 60000 /** ms */
|
#define MQTT_SYNC_INTERVAL 60000 /** ms */
|
||||||
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
|
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
|
||||||
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
|
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
|
||||||
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */
|
#define SENSOR_CO2_UPDATE_INTERVAL 4000 /** ms */
|
||||||
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */
|
#define SENSOR_PM_UPDATE_INTERVAL 2000 /** ms */
|
||||||
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */
|
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */
|
||||||
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
|
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** ms */
|
||||||
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \
|
#define WIFI_HOTSPOT_PASSWORD_DEFAULT \
|
||||||
@ -710,8 +710,10 @@ bool hasSensorSGP = true;
|
|||||||
bool hasSensorSHT = true;
|
bool hasSensorSHT = true;
|
||||||
int pmFailCount = 0;
|
int pmFailCount = 0;
|
||||||
uint32_t factoryBtnPressTime = 0;
|
uint32_t factoryBtnPressTime = 0;
|
||||||
|
String mdnsModelName = "";
|
||||||
AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, displayAndLedBarUpdate);
|
AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, displayAndLedBarUpdate);
|
||||||
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, updateServerConfiguration);
|
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL,
|
||||||
|
updateServerConfiguration);
|
||||||
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
|
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
|
||||||
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
|
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
|
||||||
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
|
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
|
||||||
@ -734,7 +736,8 @@ void setup() {
|
|||||||
u8g2.begin();
|
u8g2.begin();
|
||||||
|
|
||||||
/** Show boot display */
|
/** Show boot display */
|
||||||
displayShowText("One V9", "Lib Ver: " + ag.getVersion(), "");
|
Serial.println("Firmware Version: "+ag.getVersion());
|
||||||
|
displayShowText("One V9", "FW Ver: " + ag.getVersion(), "");
|
||||||
delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
|
delay(DISPLAY_DELAY_SHOW_CONTENT_MS);
|
||||||
|
|
||||||
/** Init sensor */
|
/** Init sensor */
|
||||||
@ -744,7 +747,7 @@ void setup() {
|
|||||||
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 &", "offline mode");
|
||||||
bool test = false;
|
bool test = false;
|
||||||
uint32_t stime = millis();
|
uint32_t stime = millis();
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -760,9 +763,9 @@ void setup() {
|
|||||||
}
|
}
|
||||||
if (test) {
|
if (test) {
|
||||||
ledTest();
|
ledTest();
|
||||||
|
} else {
|
||||||
|
connectToWifi();
|
||||||
}
|
}
|
||||||
/** WIFI connect */
|
|
||||||
connectToWifi();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send first data to ping server and get server configuration
|
* Send first data to ping server and get server configuration
|
||||||
@ -817,6 +820,7 @@ void loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hasSensorSHT) {
|
if (hasSensorSHT) {
|
||||||
|
delay(100);
|
||||||
tempHumSchedule.run();
|
tempHumSchedule.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1068,7 +1072,10 @@ static void webServerInit(void) {
|
|||||||
webServer.on("/metrics", HTTP_GET, webServerMetricsGet);
|
webServer.on("/metrics", HTTP_GET, webServerMetricsGet);
|
||||||
webServer.begin();
|
webServer.begin();
|
||||||
MDNS.addService("http", "tcp", 80);
|
MDNS.addService("http", "tcp", 80);
|
||||||
MDNS.addServiceTxt("http", "_tcp", "board", ag.getBoardName());
|
if (agServer.getModelName().isEmpty() != true) {
|
||||||
|
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
|
||||||
|
mdnsModelName = agServer.getModelName();
|
||||||
|
}
|
||||||
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
|
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
|
||||||
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
|
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
|
||||||
|
|
||||||
@ -1168,12 +1175,12 @@ static void factoryConfigReset(void) {
|
|||||||
if (ms >= 2000) {
|
if (ms >= 2000) {
|
||||||
// Show display message: For factory keep for x seconds
|
// Show display message: For factory keep for x seconds
|
||||||
// Count display.
|
// Count display.
|
||||||
displayShowText("For factory reset", "keep pressed", "for 8 sec");
|
displayShowText("Factory reset", "keep pressed", "for 8 sec");
|
||||||
|
|
||||||
int count = 7;
|
int count = 7;
|
||||||
while (ag.button.getState() == ag.button.BUTTON_PRESSED) {
|
while (ag.button.getState() == ag.button.BUTTON_PRESSED) {
|
||||||
delay(1000);
|
delay(1000);
|
||||||
displayShowText("For factory reset", "keep pressed",
|
displayShowText("Factory reset", "keep pressed",
|
||||||
"for " + String(count) + " sec");
|
"for " + String(count) + " sec");
|
||||||
count--;
|
count--;
|
||||||
// ms = (uint32_t)(millis() - factoryBtnPressTime);
|
// ms = (uint32_t)(millis() - factoryBtnPressTime);
|
||||||
@ -1776,6 +1783,11 @@ static void updateServerConfiguration(void) {
|
|||||||
Serial.println("Connect to new mqtt broker failed");
|
Serial.println("Connect to new mqtt broker failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mdnsModelName != agServer.getModelName()) {
|
||||||
|
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
|
||||||
|
mdnsModelName = agServer.getModelName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -77,7 +77,7 @@ enum {
|
|||||||
APP_SM_SERVER_LOST, /** Connected to WiFi network but the server cannot be
|
APP_SM_SERVER_LOST, /** Connected to WiFi network but the server cannot be
|
||||||
reached through the internet, e.g. blocked by firewall
|
reached through the internet, e.g. blocked by firewall
|
||||||
*/
|
*/
|
||||||
APP_SM_SENSOR_CONFIG_FAILED, /** Server is reachable but there is some
|
APP_SM_SENSOR_CONFIG_FAILED, /** Server is reachabFirmware nodele but there is some
|
||||||
configuration issue to be fixed on the server
|
configuration issue to be fixed on the server
|
||||||
side */
|
side */
|
||||||
APP_SM_NORMAL,
|
APP_SM_NORMAL,
|
||||||
@ -92,14 +92,14 @@ enum {
|
|||||||
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */
|
#define LED_BAR_COUNT_INIT_VALUE (-1) /** */
|
||||||
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */
|
#define LED_BAR_ANIMATION_PERIOD 100 /** ms */
|
||||||
#define DISP_UPDATE_INTERVAL 5000 /** ms */
|
#define DISP_UPDATE_INTERVAL 5000 /** ms */
|
||||||
#define SERVER_CONFIG_UPDATE_INTERVAL 30000 /** ms */
|
#define SERVER_CONFIG_UPDATE_INTERVAL 15000 /** ms */
|
||||||
#define SERVER_SYNC_INTERVAL 60000 /** ms */
|
#define SERVER_SYNC_INTERVAL 60000 /** ms */
|
||||||
#define MQTT_SYNC_INTERVAL 60000 /** ms */
|
#define MQTT_SYNC_INTERVAL 60000 /** ms */
|
||||||
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
|
#define SENSOR_CO2_CALIB_COUNTDOWN_MAX 5 /** sec */
|
||||||
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
|
#define SENSOR_TVOC_UPDATE_INTERVAL 1000 /** ms */
|
||||||
#define SENSOR_CO2_UPDATE_INTERVAL 5000 /** ms */
|
#define SENSOR_CO2_UPDATE_INTERVAL 4000 /** ms */
|
||||||
#define SENSOR_PM_UPDATE_INTERVAL 5000 /** ms */
|
#define SENSOR_PM_UPDATE_INTERVAL 2000 /** ms */
|
||||||
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 2000 /** ms */
|
#define SENSOR_TEMP_HUM_UPDATE_INTERVAL 5000 /** ms */
|
||||||
#define DISPLAY_DELAY_SHOW_CONTENT_MS 2000 /** 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 \
|
||||||
@ -726,7 +726,9 @@ bool hasSensorPMS1 = true;
|
|||||||
bool hasSensorPMS2 = true;
|
bool hasSensorPMS2 = true;
|
||||||
bool hasSensorSGP = true;
|
bool hasSensorSGP = true;
|
||||||
uint32_t factoryBtnPressTime = 0;
|
uint32_t factoryBtnPressTime = 0;
|
||||||
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, updateServerConfiguration);
|
String mdnsModelName = "";
|
||||||
|
AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL,
|
||||||
|
updateServerConfiguration);
|
||||||
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
|
AgSchedule serverSchedule(SERVER_SYNC_INTERVAL, sendDataToServer);
|
||||||
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
|
AgSchedule co2Schedule(SENSOR_CO2_UPDATE_INTERVAL, co2Update);
|
||||||
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
|
AgSchedule pmsSchedule(SENSOR_PM_UPDATE_INTERVAL, pmUpdate);
|
||||||
@ -904,6 +906,8 @@ void boardInit(void) {
|
|||||||
failedHandler("Init I2C failed");
|
failedHandler("Init I2C failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Serial.println("Firmware Version: "+ag.getVersion());
|
||||||
|
|
||||||
ag.watchdog.begin();
|
ag.watchdog.begin();
|
||||||
ag.button.begin();
|
ag.button.begin();
|
||||||
ag.statusLed.begin();
|
ag.statusLed.begin();
|
||||||
@ -951,7 +955,7 @@ void boardInit(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.printf("Firmware node: %s\r\n", getFwMode(fw_mode));
|
Serial.printf("Firmware Mode: %s\r\n", getFwMode(fw_mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void failedHandler(String msg) {
|
void failedHandler(String msg) {
|
||||||
@ -1188,6 +1192,11 @@ static void updateServerConfiguration(void) {
|
|||||||
Serial.println("Connect to new mqtt broker failed");
|
Serial.println("Connect to new mqtt broker failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mdnsModelName != agServer.getModelName()) {
|
||||||
|
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
|
||||||
|
mdnsModelName = agServer.getModelName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1330,7 +1339,10 @@ static void webServerInit(void) {
|
|||||||
webServer.on("/measures/current", HTTP_GET, webServerMeasureCurrentGet);
|
webServer.on("/measures/current", HTTP_GET, webServerMeasureCurrentGet);
|
||||||
webServer.begin();
|
webServer.begin();
|
||||||
MDNS.addService("http", "tcp", 80);
|
MDNS.addService("http", "tcp", 80);
|
||||||
MDNS.addServiceTxt("http", "_tcp", "board", ag.getBoardName());
|
if (mdnsModelName != agServer.getModelName()) {
|
||||||
|
MDNS.addServiceTxt("http", "_tcp", "model", agServer.getModelName());
|
||||||
|
mdnsModelName = agServer.getModelName();
|
||||||
|
}
|
||||||
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
|
MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId());
|
||||||
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
|
MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion());
|
||||||
|
|
||||||
@ -1399,13 +1411,13 @@ static String getServerSyncData(bool localServer) {
|
|||||||
|
|
||||||
if ((fw_mode == FW_MODE_PPT) || (fw_mode == FW_MODE_PST)) {
|
if ((fw_mode == FW_MODE_PPT) || (fw_mode == FW_MODE_PST)) {
|
||||||
if (hasSensorSGP) {
|
if (hasSensorSGP) {
|
||||||
if (tvocIndex > 0) {
|
if (tvocIndex >= 0) {
|
||||||
root["tvoc_index"] = tvocIndex;
|
root["tvoc_index"] = tvocIndex;
|
||||||
}
|
}
|
||||||
if (tvocRawIndex >= 0) {
|
if (tvocRawIndex >= 0) {
|
||||||
root["tvoc_raw"] = tvocRawIndex;
|
root["tvoc_raw"] = tvocRawIndex;
|
||||||
}
|
}
|
||||||
if (noxIndex > 0) {
|
if (noxIndex >= 0) {
|
||||||
root["nox_index"] = noxIndex;
|
root["nox_index"] = noxIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name=AirGradient Air Quality Sensor
|
name=AirGradient Air Quality Sensor
|
||||||
version=3.0.4
|
version=3.0.6
|
||||||
author=AirGradient <support@airgradient.com>
|
author=AirGradient <support@airgradient.com>
|
||||||
maintainer=AirGradient <support@airgradient.com>
|
maintainer=AirGradient <support@airgradient.com>
|
||||||
sentence=ESP32-C3 / ESP8266 library for air quality monitor measuring PM, CO2, Temperature, TVOC and Humidity with OLED display.
|
sentence=ESP32-C3 / ESP8266 library for air quality monitor measuring PM, CO2, Temperature, TVOC and Humidity with OLED display.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "AirGradient.h"
|
#include "AirGradient.h"
|
||||||
|
|
||||||
#define AG_LIB_VER "3.0.4"
|
#define AG_LIB_VER "3.0.6"
|
||||||
|
|
||||||
AirGradient::AirGradient(BoardType type)
|
AirGradient::AirGradient(BoardType type)
|
||||||
: pms5003(type), pms5003t_1(type), pms5003t_2(type), s8(type), sgp41(type),
|
: pms5003(type), pms5003t_1(type), pms5003t_2(type), s8(type), sgp41(type),
|
||||||
|
Reference in New Issue
Block a user