diff --git a/examples/ONE/ONE.ino b/examples/ONE/ONE.ino index 5a24a9c..fde5c3c 100644 --- a/examples/ONE/ONE.ino +++ b/examples/ONE/ONE.ino @@ -429,13 +429,12 @@ public: */ void showServerConfig(void) { Serial.println("Server configuration: "); - Serial.printf(" inF: %s\r\n", config.inF ? "true" : "false"); - Serial.printf(" inUSAQI: %s\r\n", - config.inUSAQI ? "true" : "false"); - Serial.printf(" useRGBLedBar: %d\r\n", (int)config.useRGBLedBar); - Serial.printf(" Model: %s\r\n", config.models); - Serial.printf(" Mqtt Broker: %s\r\n", config.mqttBrokers); - Serial.printf(" S8 calib period: %d\r\n", co2AbcCalib); + Serial.printf("inF: %s\r\n", config.inF ? "true" : "false"); + Serial.printf("inUSAQI: %s\r\n", config.inUSAQI ? "true" : "false"); + Serial.printf("useRGBLedBar: %d\r\n", (int)config.useRGBLedBar); + Serial.printf("Model: %s\r\n", config.models); + Serial.printf("MQTT Broker: %s\r\n", config.mqttBrokers); + Serial.printf("S8 calibration period: %d\r\n", co2AbcCalib); } /** @@ -566,19 +565,19 @@ public: /** init client */ client = esp_mqtt_client_init(&config); if (client == NULL) { - Serial.println("mqtt client init failed"); + Serial.println("MQTT client init failed"); return false; } /** Register event */ if (esp_mqtt_client_register_event(client, MQTT_EVENT_ANY, mqtt_event_handler, NULL) != ESP_OK) { - Serial.println("mqtt client register event failed"); + Serial.println("MQTT client register event failed"); return false; } if (esp_mqtt_client_start(client) != ESP_OK) { - Serial.println("mqtt client start failed"); + Serial.println("MQTT client start failed"); return false; } @@ -711,8 +710,10 @@ bool hasSensorSGP = true; bool hasSensorSHT = true; int pmFailCount = 0; uint32_t factoryBtnPressTime = 0; -String mdnsModelName = ""; +String mdnsModelName = "I-9PSL"; int getCO2FailCount = 0; +uint32_t addToDashboardTime; +bool isAddToDashboard = true; AgSchedule dispLedSchedule(DISP_UPDATE_INTERVAL, displayAndLedBarUpdate); AgSchedule configSchedule(SERVER_CONFIG_UPDATE_INTERVAL, updateServerConfiguration); @@ -915,7 +916,7 @@ static void co2Update(void) { if (value >= 0) { co2Ppm = value; getCO2FailCount = 0; - Serial.printf("CO2 index: %d\r\n", co2Ppm); + Serial.printf("CO2 (ppm): %d\r\n", co2Ppm); } else { getCO2FailCount++; Serial.printf("Get CO2 failed: %d\r\n", getCO2FailCount); @@ -1082,7 +1083,7 @@ void webServerHandler(void *param) { static void webServerInit(void) { String host = "airgradient_" + getDevId(); if (!MDNS.begin(host)) { - Serial.println("Init MDNS failed"); + Serial.println("Init mDNS failed"); return; } @@ -1091,9 +1092,16 @@ static void webServerInit(void) { webServer.on("/metrics", HTTP_GET, webServerMetricsGet); webServer.begin(); MDNS.addService("http", "tcp", 80); - MDNS.addServiceTxt("http", "_tcp", "model", ag.getBoardName()); + MDNS.addServiceTxt("http", "_tcp", "model", mdnsModelName); MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId()); MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion()); + MDNS.addServiceTxt("http", "_tcp", "vendor", "AirGradient"); + MDNS.addService("http", "tcp", 80); + MDNS.addService("_airgradient", "tcp", 80); + MDNS.addServiceTxt("airgradient", "_tcp", "model", mdnsModelName); + MDNS.addServiceTxt("airgradient", "_tcp", "serialno", getDevId()); + MDNS.addServiceTxt("airgradient", "_tcp", "fw_ver", ag.getVersion()); + MDNS.addServiceTxt("airgradient", "_tcp", "vendor", "AirGradient"); if (xTaskCreate(webServerHandler, "webserver", 1024 * 4, NULL, 5, NULL) != pdTRUE) { @@ -1171,9 +1179,9 @@ static void createMqttTask(void) { String topic = "airgradient/readings/" + getDevId(); if (agMqtt.publish(topic.c_str(), syncData.c_str(), syncData.length())) { - Serial.println("Mqtt sync success"); + Serial.println("MQTT sync success"); } else { - Serial.println("Mqtt sync failure"); + Serial.println("MQTT sync failure"); } } } @@ -1336,7 +1344,7 @@ static void displayShowDashboard(String err) { u8g2.drawStr(105, 10, strBuf); } } else { - Serial.println("Disp show error: " + err); + Serial.println("Display show error: " + err); int strWidth = u8g2.getStrWidth(err.c_str()); u8g2.drawStr((126 - strWidth) / 2, 10, err.c_str()); @@ -1753,7 +1761,7 @@ static void updateServerConfiguration(void) { if (hasSensorS8) { co2Calibration(); } else { - Serial.println("CO2 S8 not available, calib ignored"); + Serial.println("CO2 S8 not available, calibration ignored"); } } @@ -1765,13 +1773,13 @@ static void updateServerConfiguration(void) { int curHour = ag.s8.getAbcPeriod(); Serial.printf("Current config: %d (hours)\r\n", curHour); if (curHour == newHour) { - Serial.println("set 'abcDays' ignored"); + Serial.println("Set 'abcDays' ignored"); } else { if (ag.s8.setAbcPeriod(agServer.getCo2AbcDaysConfig() * 24) == false) { - Serial.println("Set S8 abcDays period calib failed"); + Serial.println("Set S8 abcDays period calibration failed"); } else { - Serial.println("Set S8 abcDays period calib success"); + Serial.println("Set S8 abcDays period calibration success"); } } } else { @@ -1796,10 +1804,10 @@ static void updateServerConfiguration(void) { mqttTask = NULL; } if (agMqtt.begin(mqttUri)) { - Serial.println("Connect to new mqtt broker success"); + Serial.println("Connect to MQTT broker successful"); createMqttTask(); } else { - Serial.println("Connect to new mqtt broker failed"); + Serial.println("Connect to MQTT broker failed"); } } } @@ -2102,7 +2110,16 @@ static void dispSmHandler(int sm) { break; } case APP_SM_SENSOR_CONFIG_FAILED: { - displayShowDashboard("Add to Dashboard"); + uint32_t ms = (uint32_t)(millis() - addToDashboardTime); + if (ms >= 5000) { + addToDashboardTime = millis(); + if (isAddToDashboard) { + displayShowDashboard("Add to Dashboard"); + } else { + displayShowDashboard(getDevId()); + } + isAddToDashboard = !isAddToDashboard; + } break; } case APP_SM_NORMAL: { @@ -2204,10 +2221,10 @@ static void tvocUpdate(void) { noxRawIndex = ag.sgp41.getNoxRaw(); Serial.println(); - Serial.printf(" TVOC index: %d\r\n", tvocIndex); - Serial.printf("TVOC raw index: %d\r\n", tvocRawIndex); - Serial.printf(" NOx index: %d\r\n", noxIndex); - Serial.printf(" NOx raw index: %d\r\n", noxRawIndex); + Serial.printf("TVOC index: %d\r\n", tvocIndex); + Serial.printf("TVOC raw: %d\r\n", tvocRawIndex); + Serial.printf("NOx index: %d\r\n", noxIndex); + Serial.printf("NOx raw: %d\r\n", noxRawIndex); } /** @@ -2222,14 +2239,14 @@ static void pmUpdate(void) { pm03PCount = ag.pms5003.getPm03ParticleCount(); Serial.println(); - Serial.printf(" PMS0.1: %d\r\n", pm01); - Serial.printf(" PMS2.5: %d\r\n", pm25); - Serial.printf(" PMS10.0: %d\r\n", pm10); - Serial.printf("PMS3.0 Count: %d\r\n", pm03PCount); + Serial.printf("PM1 ug/m3: %d\r\n", pm01); + Serial.printf("PM2.5 ug/m3: %d\r\n", pm25); + Serial.printf("PM10 ug/m3: %d\r\n", pm10); + Serial.printf("PM0.3 Count: %d\r\n", pm03PCount); pmFailCount = 0; } else { pmFailCount++; - Serial.printf("PM read failed: %d\r\n", pmFailCount); + Serial.printf("PMS read failed: %d\r\n", pmFailCount); if (pmFailCount >= 3) { pm01 = -1; pm25 = -1; @@ -2261,10 +2278,10 @@ static void tempHumUpdate(void) { temp = ag.sht.getTemperature(); hum = ag.sht.getRelativeHumidity(); - Serial.printf("Temperature: %0.2f\r\n", temp); - Serial.printf(" Humidity: %d\r\n", hum); + Serial.printf("Temperature in C: %0.2f\r\n", temp); + Serial.printf("Relative Humidity: %d\r\n", hum); } else { - Serial.println("Measure SHT failed"); + Serial.println("SHT read failed"); } } diff --git a/examples/Open_Air/Open_Air.ino b/examples/Open_Air/Open_Air.ino index e13f066..f614f90 100644 --- a/examples/Open_Air/Open_Air.ino +++ b/examples/Open_Air/Open_Air.ino @@ -430,13 +430,12 @@ public: */ void showServerConfig(void) { Serial.println("Server configuration: "); - Serial.printf(" inF: %s\r\n", config.inF ? "true" : "false"); - Serial.printf(" inUSAQI: %s\r\n", - config.inUSAQI ? "true" : "false"); - Serial.printf(" useRGBLedBar: %d\r\n", (int)config.useRGBLedBar); - Serial.printf(" Model: %s\r\n", config.models); - Serial.printf(" Mqtt Broker: %s\r\n", config.mqttBrokers); - Serial.printf(" S8 calib period: %d\r\n", co2AbcCalib); + Serial.printf("inF: %s\r\n", config.inF ? "true" : "false"); + Serial.printf("inUSAQI: %s\r\n", config.inUSAQI ? "true" : "false"); + Serial.printf("useRGBLedBar: %d\r\n", (int)config.useRGBLedBar); + Serial.printf("Model: %s\r\n", config.models); + Serial.printf("MQTT Broker: %s\r\n", config.mqttBrokers); + Serial.printf("S8 calibration period: %d\r\n", co2AbcCalib); } /** @@ -567,19 +566,19 @@ public: /** init client */ client = esp_mqtt_client_init(&config); if (client == NULL) { - Serial.println("mqtt client init failed"); + Serial.println("MQTT client init failed"); return false; } /** Register event */ if (esp_mqtt_client_register_event(client, MQTT_EVENT_ANY, mqtt_event_handler, NULL) != ESP_OK) { - Serial.println("mqtt client register event failed"); + Serial.println("MQTT client register event failed"); return false; } if (esp_mqtt_client_start(client) != ESP_OK) { - Serial.println("mqtt client start failed"); + Serial.println("MQTT client start failed"); return false; } @@ -701,7 +700,8 @@ const int targetCount = 20; enum { FW_MODE_PST, /** PMS5003T, S8 and SGP41 */ FW_MODE_PPT, /** PMS5003T_1, PMS5003T_2, SGP41 */ - FW_MODE_PP /** PMS5003T_1, PMS5003T_2 */ + FW_MODE_PP, /** PMS5003T_1, PMS5003T_2 */ + FW_MDOE_PS /** PMS5003T, S8 */ }; int fw_mode = FW_MODE_PST; @@ -950,9 +950,10 @@ void boardInit(void) { if (hasSensorS8 == false) { fw_mode = FW_MODE_PP; - Serial.println("Can not detect SGP run mode 'PP'"); + Serial.println("Can not detect SGP run mode 'O-1PP'"); } else { - Serial.println("Can not detect SGP run mode 'PST' without SGP"); + Serial.println("Can not detect SGP run mode 'O-1PS'"); + fw_mode = FW_MDOE_PS; } } @@ -1004,6 +1005,21 @@ void boardInit(void) { } Serial.printf("Firmware Mode: %s\r\n", getFwMode(fw_mode)); + switch (fw_mode) { + case FW_MODE_PP: + mdnsModelName = "O-1PP"; + break; + case FW_MODE_PPT: + mdnsModelName = "O-1PPT"; + break; + case FW_MODE_PST: + mdnsModelName = "O-1PST"; + break; + case FW_MDOE_PS: + mdnsModelName = "0-1PS"; + default: + break; + } } void failedHandler(String msg) { @@ -1016,7 +1032,7 @@ void failedHandler(String msg) { void co2Calibration(void) { /** Count down for co2CalibCountdown secs */ for (int i = 0; i < SENSOR_CO2_CALIB_COUNTDOWN_MAX; i++) { - Serial.printf("Start CO2 calib after %d sec\r\n", + Serial.printf("Start CO2 calibration after %d sec\r\n", SENSOR_CO2_CALIB_COUNTDOWN_MAX - i); delay(1000); } @@ -1024,16 +1040,16 @@ void co2Calibration(void) { if (ag.s8.setBaselineCalibration()) { Serial.println("Calibration success"); delay(1000); - Serial.println("Wait for calib finish..."); + Serial.println("Wait for calibration to finish..."); int count = 0; while (ag.s8.isBaseLineCalibrationDone() == false) { delay(1000); count++; } - Serial.printf("Calib finish after %d sec\r\n", count); + Serial.printf("Calibration finished after %d sec\r\n", count); delay(2000); } else { - Serial.println("Calibration failure!!!"); + Serial.println("Calibration failure"); delay(2000); } } @@ -1055,7 +1071,7 @@ static void updateWiFiConnect(void) { lastRetry = millis(); WiFi.reconnect(); - Serial.printf("Re-Connect WiFi\r\n"); + Serial.printf("Re-Connect to WiFi\r\n"); } } @@ -1070,10 +1086,10 @@ static void tvocUpdate(void) { noxRawIndex = ag.sgp41.getNoxRaw(); Serial.println(); - Serial.printf(" TVOC index: %d\r\n", tvocIndex); - Serial.printf("TVOC raw index: %d\r\n", tvocRawIndex); - Serial.printf(" NOx index: %d\r\n", noxIndex); - Serial.printf(" NOx raw index: %d\r\n", noxRawIndex); + Serial.printf("TVOC index: %d\r\n", tvocIndex); + Serial.printf("TVOC raw: %d\r\n", tvocRawIndex); + Serial.printf("NOx index: %d\r\n", noxIndex); + Serial.printf("NOx raw: %d\r\n", noxRawIndex); } /** @@ -1094,12 +1110,12 @@ static void pmUpdate(void) { pmsResult_1 = true; Serial.println(); - Serial.printf("[1] PMS0.1: %d\r\n", pm01_1); - Serial.printf("[1] PMS2.5: %d\r\n", pm25_1); - Serial.printf("[1] PMS10.0: %d\r\n", pm10_1); - Serial.printf("[1]PMS3.0 Count: %d\r\n", pm03PCount_1); - Serial.printf("[1] Temperature: %0.2f\r\n", temp_1); - Serial.printf("[1] Humidity: %d\r\n", hum_1); + Serial.printf("[1] PM1 ug/m3: %d\r\n", pm01_1); + Serial.printf("[1] PM2.5 ug/m3: %d\r\n", pm25_1); + Serial.printf("[1] PM10 ug/m3: %d\r\n", pm10_1); + Serial.printf("[1] PM3.0 Count: %d\r\n", pm03PCount_1); + Serial.printf("[1] Temperature in C: %0.2f\r\n", temp_1); + Serial.printf("[1] Relative Humidity: %d\r\n", hum_1); } else { pm01_1 = -1; pm25_1 = -1; @@ -1120,12 +1136,12 @@ static void pmUpdate(void) { pmsResult_2 = true; Serial.println(); - Serial.printf("[2] PMS0.1: %d\r\n", pm01_2); - Serial.printf("[2] PMS2.5: %d\r\n", pm25_2); - Serial.printf("[2] PMS10.0: %d\r\n", pm10_2); - Serial.printf("[2]PMS3.0 Count: %d\r\n", pm03PCount_2); - Serial.printf("[2] Temperature: %0.2f\r\n", temp_2); - Serial.printf("[2] Humidity: %d\r\n", hum_2); + Serial.printf("[2] PM1 ug/m3: %d\r\n", pm01_2); + Serial.printf("[2] PM2.5 ug/m3: %d\r\n", pm25_2); + Serial.printf("[2] PM10 ug/m3: %d\r\n", pm10_2); + Serial.printf("[2] PM3.0 Count: %d\r\n", pm03PCount_2); + Serial.printf("[2] Temperature in C: %0.2f\r\n", temp_2); + Serial.printf("[2] Relative Humidity: %d\r\n", hum_2); } else { pm01_2 = -1; pm25_2 = -1; @@ -1193,7 +1209,7 @@ static void co2Update(void) { if (value >= 0) { co2Ppm = value; getCO2FailCount = 0; - Serial.printf("CO2 index: %d\r\n", co2Ppm); + Serial.printf("CO2 ppm: %d\r\n", co2Ppm); } else { getCO2FailCount++; Serial.printf("Get CO2 failed: %d\r\n", getCO2FailCount); @@ -1211,7 +1227,7 @@ static void updateServerConfiguration(void) { if (hasSensorS8) { co2Calibration(); } else { - Serial.println("CO2 S8 not available, calib ignored"); + Serial.println("CO2 S8 not available, calibration ignored"); } } @@ -1223,13 +1239,13 @@ static void updateServerConfiguration(void) { int curHour = ag.s8.getAbcPeriod(); Serial.printf("Current config: %d (hours)\r\n", curHour); if (curHour == newHour) { - Serial.println("set 'abcDays' ignored"); + Serial.println("Set 'abcDays' ignored"); } else { if (ag.s8.setAbcPeriod(agServer.getCo2AbcDaysConfig() * 24) == false) { - Serial.println("Set S8 abcDays period calib failed"); + Serial.println("Set S8 abcDays period calibration failed"); } else { - Serial.println("Set S8 abcDays period calib success"); + Serial.println("Set S8 abcDays period calibration success"); } } } @@ -1246,10 +1262,10 @@ static void updateServerConfiguration(void) { mqttTask = NULL; } if (agMqtt.begin(mqttUri)) { - Serial.println("Connect to new mqtt broker success"); + Serial.println("Connect to MQTT broker successful"); createMqttTask(); } else { - Serial.println("Connect to new mqtt broker failed"); + Serial.println("Connect to MQTT broker failed"); } } } @@ -1366,6 +1382,8 @@ static const char *getFwMode(int mode) { return "FW_MODE_PPT"; case FW_MODE_PP: return "FW_MODE_PP"; + case FW_MDOE_PS: + return "FW_MODE_PS"; default: break; } @@ -1394,9 +1412,16 @@ static void webServerInit(void) { webServer.on("/measures/current", HTTP_GET, webServerMeasureCurrentGet); webServer.begin(); MDNS.addService("http", "tcp", 80); - MDNS.addServiceTxt("http", "_tcp", "model", ag.getBoardName()); + MDNS.addServiceTxt("http", "_tcp", "model", mdnsModelName); MDNS.addServiceTxt("http", "_tcp", "serialno", getDevId()); MDNS.addServiceTxt("http", "_tcp", "fw_ver", ag.getVersion()); + MDNS.addServiceTxt("http", "_tcp", "vendor", "AirGradient"); + MDNS.addService("http", "tcp", 80); + MDNS.addService("_airgradient", "tcp", 80); + MDNS.addServiceTxt("airgradient", "_tcp", "model", mdnsModelName); + MDNS.addServiceTxt("airgradient", "_tcp", "serialno", getDevId()); + MDNS.addServiceTxt("airgradient", "_tcp", "fw_ver", ag.getVersion()); + MDNS.addServiceTxt("airgradient", "_tcp", "vendor", "AirGradient"); if (xTaskCreate(webServerHandler, "webserver", 1024 * 4, NULL, 5, NULL) != pdTRUE) { diff --git a/library.properties b/library.properties index 82ed8a0..37e65a9 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=AirGradient Air Quality Sensor -version=3.0.6 +version=3.0.7 author=AirGradient maintainer=AirGradient sentence=ESP32-C3 / ESP8266 library for air quality monitor measuring PM, CO2, Temperature, TVOC and Humidity with OLED display. diff --git a/src/AirGradient.cpp b/src/AirGradient.cpp index 0cff980..294d0db 100644 --- a/src/AirGradient.cpp +++ b/src/AirGradient.cpp @@ -1,6 +1,6 @@ #include "AirGradient.h" -#define AG_LIB_VER "3.0.6" +#define AG_LIB_VER "3.0.7" AirGradient::AirGradient(BoardType type) : pms5003(type), pms5003t_1(type), pms5003t_2(type), s8(type), sgp41(type),