From 6101429d3040b1d82cc33318f9ac75524b5dd5b2 Mon Sep 17 00:00:00 2001 From: Achim Date: Fri, 13 Jan 2023 06:56:17 +0700 Subject: [PATCH] Updated outdoor example --- examples/DIY_OUTDOOR/DIY_OUTDOOR.ino | 174 ++++++++++++++------------- 1 file changed, 90 insertions(+), 84 deletions(-) diff --git a/examples/DIY_OUTDOOR/DIY_OUTDOOR.ino b/examples/DIY_OUTDOOR/DIY_OUTDOOR.ino index 04acb76..9de8a7f 100644 --- a/examples/DIY_OUTDOOR/DIY_OUTDOOR.ino +++ b/examples/DIY_OUTDOOR/DIY_OUTDOOR.ino @@ -15,9 +15,9 @@ If you are a school or university contact us for a free trial on the AirGradient https://www.airgradient.com/ License: CC BY-NC 4.0 Attribution-NonCommercial 4.0 International - */ + #include "PMS.h" #include "SoftwareSerial.h" #include @@ -27,114 +27,121 @@ License: CC BY-NC 4.0 Attribution-NonCommercial 4.0 International #include #include -SoftwareSerial softSerial(D6, D5); //(RX, TX) -SoftwareSerial soft2(D3, D7); //(RX, TX) +SoftwareSerial softSerial(D6, D5); +SoftwareSerial soft2(D3, D7); + PMS pms(softSerial); PMS pms2(soft2); PMS::DATA data; +PMS::DATA data2; + +float pm1Value=0; +int pm1Position = 0; + +float pm2Value=0; +int pm2Position = 0; -int pm1 = 0; float temp_pm1 = 0; float hum_pm1 = 0; -int pm2 = 0; float temp_pm2 = 0; float hum_pm2 = 0; +unsigned long currentMillis = 0; + +const int pm1Interval = 5000; +unsigned long previousPm1 = 0; + +const int pm2Interval = 5000; +unsigned long previousPm2 = 0; + String APIROOT = "http://hw.airgradient.com/"; void setup() { Serial.begin(115200); - Serial.println("Welcome to AirGradient"); softSerial.begin(9600); soft2.begin(9600); Wire.begin(); pinMode(D7, OUTPUT); - connectToWifi(); } + void loop() { - - if (digitalRead(D8) == HIGH) { - digitalWrite(D7, HIGH); - } - else { - digitalWrite(D7, LOW); - } - - if (pms.read(data)){ - pm1 = data.PM_AE_UG_2_5; - temp_pm1 = data.AMB_TMP; - hum_pm1 = data.AMB_HUM; - Serial.print("PMS 1: PM 2.5 (ug/m3): "); - Serial.println(pm1); - Serial.print("PMS 1: Temp: "); - Serial.println(temp_pm1); - Serial.print("PMS 1: Hum: "); - Serial.println(hum_pm1); - Serial.println(); - delay(1000); - sendToServerPM1(); - } - if (pms2.read(data)){ - pm2 = data.PM_AE_UG_2_5; - temp_pm2 = data.AMB_TMP ; - hum_pm2 = data.AMB_HUM; - Serial.print("PMS 2: PM 2.5 (ug/m3): "); - Serial.println(pm2); - Serial.print("PMS 2: Temp: "); - Serial.println(temp_pm2); - Serial.print("PMS 2: Hum: "); - Serial.println(hum_pm2); - Serial.println(); - delay(1000); - sendToServerPM2(); - } - - if (hum_pm1 > 0 && hum_pm2 > 0) sendToServer(); - - delay(30000); - + currentMillis = millis(); + updatePm1(); + updatePm2(); } - -void sendToServer() { - String payload = "{\"wifi\":" + String(WiFi.RSSI()) - + ", \"pm02\":" + String((pm1+pm2)/2) - + ", \"atmp\":" + String((temp_pm1 + temp_pm2) / 20) - + ", \"rhum\":" + String((hum_pm1 + hum_pm2) / 20) - + "}"; - - if(WiFi.status()== WL_CONNECTED){ - digitalWrite(D7, HIGH); - delay(300); - Serial.println(payload); - String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "/measures"; - Serial.println(POSTURL); - WiFiClient client; - HTTPClient http; - http.begin(client, POSTURL); - http.addHeader("content-type", "application/json"); - int httpCode = http.POST(payload); - String response = http.getString(); - Serial.println(httpCode); - Serial.println(response); - http.end(); - digitalWrite(D7, LOW); - } - else { - Serial.println("WiFi Disconnected"); - } +void updatePm1() +{ + if (currentMillis - previousPm1 >= pm1Interval) { + digitalWrite(D7, HIGH); + delay(400); + digitalWrite(D7, LOW); + Serial.println("updatePm1: "+String(pm1Position)); + previousPm1 += pm1Interval; + pms.requestRead(); + if (pms.readUntil(data)){ + Serial.println("success read"); + int pm1 = data.PM_AE_UG_2_5; + temp_pm1 = data.AMB_TMP; + hum_pm1 = data.AMB_HUM; + Serial.print("PMS 1: PM 2.5 (ug/m3): "); + Serial.println(pm1); + Serial.print("PMS 1: Temp: "); + Serial.println(temp_pm1); + Serial.print("PMS 1: Hum: "); + Serial.println(hum_pm1); + Serial.println(); + delay(1000); + pm1Value=pm1Value+pm1; + pm1Position++; + if (pm1Position==20) { + sendToServerPM1(pm1Value); + pm1Position=0; + pm1Value=0; + } + } + } } -void sendToServerPM1() { +void updatePm2() +{ + if (currentMillis - previousPm2 >= pm2Interval) { + Serial.println("updatePm2: "+String(pm2Position)); + previousPm2 += pm2Interval; + pms2.requestRead(); + if (pms2.readUntil(data2)){ + int pm2 = data2.PM_AE_UG_2_5; + temp_pm2 = data2.AMB_TMP ; + hum_pm2 = data2.AMB_HUM; + Serial.print("PMS 2: PM 2.5 (ug/m3): "); + Serial.println(pm2); + Serial.print("PMS 2: Temp: "); + Serial.println(temp_pm2); + Serial.print("PMS 2: Hum: "); + Serial.println(hum_pm2); + Serial.println(); + delay(1000); + pm2Value=pm2Value+pm2; + pm2Position++; + if (pm2Position==20) { + sendToServerPM2(pm2Value); + pm2Position=0; + pm2Value=0; + } + } + } +} + +void sendToServerPM1(float pm1Value) { String payload = "{\"wifi\":" + String(WiFi.RSSI()) - + ", \"pm02\":" + String(pm1) + + ", \"pm02\":" + String(pm1Value/20) + ", \"atmp\":" + String(temp_pm1/10) + ", \"rhum\":" + String(hum_pm1/10) + "}"; @@ -143,7 +150,7 @@ void sendToServerPM1() { digitalWrite(D7, HIGH); delay(300); Serial.println(payload); - String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "pm1/measures"; + String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "-1/measures"; Serial.println(POSTURL); WiFiClient client; HTTPClient http; @@ -162,9 +169,9 @@ void sendToServerPM1() { } -void sendToServerPM2() { +void sendToServerPM2(float pm2Value) { String payload = "{\"wifi\":" + String(WiFi.RSSI()) - + ", \"pm02\":" + String(pm2) + + ", \"pm02\":" + String(pm2Value/20) + ", \"atmp\":" + String(temp_pm2/10) + ", \"rhum\":" + String(hum_pm2/10) + "}"; @@ -173,7 +180,7 @@ void sendToServerPM2() { digitalWrite(D7, HIGH); delay(300); Serial.println(payload); - String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "pm2/measures"; + String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "-2/measures"; Serial.println(POSTURL); WiFiClient client; HTTPClient http; @@ -197,10 +204,9 @@ void sendToServerPM2() { WiFiManager wifiManager; //WiFi.disconnect(); //to delete previous saved hotspot String HOTSPOT = "AIRGRADIENT-" + String(ESP.getChipId(), HEX); - wifiManager.setTimeout(120); + wifiManager.setTimeout(60); if (!wifiManager.autoConnect((const char * ) HOTSPOT.c_str())) { Serial.println("failed to connect and hit timeout"); delay(6000); } - }