Updated outdoor example

This commit is contained in:
Achim
2023-01-13 06:56:17 +07:00
parent 47c55ae0dd
commit 6101429d30

View File

@ -15,9 +15,9 @@ If you are a school or university contact us for a free trial on the AirGradient
https://www.airgradient.com/ https://www.airgradient.com/
License: CC BY-NC 4.0 Attribution-NonCommercial 4.0 International License: CC BY-NC 4.0 Attribution-NonCommercial 4.0 International
*/ */
#include "PMS.h" #include "PMS.h"
#include "SoftwareSerial.h" #include "SoftwareSerial.h"
#include <Wire.h> #include <Wire.h>
@ -27,114 +27,121 @@ License: CC BY-NC 4.0 Attribution-NonCommercial 4.0 International
#include <ESP8266HTTPClient.h> #include <ESP8266HTTPClient.h>
#include <WiFiClient.h> #include <WiFiClient.h>
SoftwareSerial softSerial(D6, D5); //(RX, TX) SoftwareSerial softSerial(D6, D5);
SoftwareSerial soft2(D3, D7); //(RX, TX) SoftwareSerial soft2(D3, D7);
PMS pms(softSerial); PMS pms(softSerial);
PMS pms2(soft2); PMS pms2(soft2);
PMS::DATA data; 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 temp_pm1 = 0;
float hum_pm1 = 0; float hum_pm1 = 0;
int pm2 = 0;
float temp_pm2 = 0; float temp_pm2 = 0;
float hum_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/"; String APIROOT = "http://hw.airgradient.com/";
void setup() void setup()
{ {
Serial.begin(115200); Serial.begin(115200);
Serial.println("Welcome to AirGradient");
softSerial.begin(9600); softSerial.begin(9600);
soft2.begin(9600); soft2.begin(9600);
Wire.begin(); Wire.begin();
pinMode(D7, OUTPUT); pinMode(D7, OUTPUT);
connectToWifi(); connectToWifi();
} }
void loop() void loop()
{ {
currentMillis = millis();
if (digitalRead(D8) == HIGH) { updatePm1();
digitalWrite(D7, HIGH); updatePm2();
}
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);
} }
void updatePm1()
void sendToServer() { {
String payload = "{\"wifi\":" + String(WiFi.RSSI()) if (currentMillis - previousPm1 >= pm1Interval) {
+ ", \"pm02\":" + String((pm1+pm2)/2) digitalWrite(D7, HIGH);
+ ", \"atmp\":" + String((temp_pm1 + temp_pm2) / 20) delay(400);
+ ", \"rhum\":" + String((hum_pm1 + hum_pm2) / 20) digitalWrite(D7, LOW);
+ "}"; Serial.println("updatePm1: "+String(pm1Position));
previousPm1 += pm1Interval;
if(WiFi.status()== WL_CONNECTED){ pms.requestRead();
digitalWrite(D7, HIGH); if (pms.readUntil(data)){
delay(300); Serial.println("success read");
Serial.println(payload); int pm1 = data.PM_AE_UG_2_5;
String POSTURL = APIROOT + "sensors/airgradient:" + String(ESP.getChipId(), HEX) + "/measures"; temp_pm1 = data.AMB_TMP;
Serial.println(POSTURL); hum_pm1 = data.AMB_HUM;
WiFiClient client; Serial.print("PMS 1: PM 2.5 (ug/m3): ");
HTTPClient http; Serial.println(pm1);
http.begin(client, POSTURL); Serial.print("PMS 1: Temp: ");
http.addHeader("content-type", "application/json"); Serial.println(temp_pm1);
int httpCode = http.POST(payload); Serial.print("PMS 1: Hum: ");
String response = http.getString(); Serial.println(hum_pm1);
Serial.println(httpCode); Serial.println();
Serial.println(response); delay(1000);
http.end(); pm1Value=pm1Value+pm1;
digitalWrite(D7, LOW); pm1Position++;
} if (pm1Position==20) {
else { sendToServerPM1(pm1Value);
Serial.println("WiFi Disconnected"); 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()) String payload = "{\"wifi\":" + String(WiFi.RSSI())
+ ", \"pm02\":" + String(pm1) + ", \"pm02\":" + String(pm1Value/20)
+ ", \"atmp\":" + String(temp_pm1/10) + ", \"atmp\":" + String(temp_pm1/10)
+ ", \"rhum\":" + String(hum_pm1/10) + ", \"rhum\":" + String(hum_pm1/10)
+ "}"; + "}";
@ -143,7 +150,7 @@ void sendToServerPM1() {
digitalWrite(D7, HIGH); digitalWrite(D7, HIGH);
delay(300); delay(300);
Serial.println(payload); 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); Serial.println(POSTURL);
WiFiClient client; WiFiClient client;
HTTPClient http; HTTPClient http;
@ -162,9 +169,9 @@ void sendToServerPM1() {
} }
void sendToServerPM2() { void sendToServerPM2(float pm2Value) {
String payload = "{\"wifi\":" + String(WiFi.RSSI()) String payload = "{\"wifi\":" + String(WiFi.RSSI())
+ ", \"pm02\":" + String(pm2) + ", \"pm02\":" + String(pm2Value/20)
+ ", \"atmp\":" + String(temp_pm2/10) + ", \"atmp\":" + String(temp_pm2/10)
+ ", \"rhum\":" + String(hum_pm2/10) + ", \"rhum\":" + String(hum_pm2/10)
+ "}"; + "}";
@ -173,7 +180,7 @@ void sendToServerPM2() {
digitalWrite(D7, HIGH); digitalWrite(D7, HIGH);
delay(300); delay(300);
Serial.println(payload); 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); Serial.println(POSTURL);
WiFiClient client; WiFiClient client;
HTTPClient http; HTTPClient http;
@ -197,10 +204,9 @@ void sendToServerPM2() {
WiFiManager wifiManager; WiFiManager wifiManager;
//WiFi.disconnect(); //to delete previous saved hotspot //WiFi.disconnect(); //to delete previous saved hotspot
String HOTSPOT = "AIRGRADIENT-" + String(ESP.getChipId(), HEX); String HOTSPOT = "AIRGRADIENT-" + String(ESP.getChipId(), HEX);
wifiManager.setTimeout(120); wifiManager.setTimeout(60);
if (!wifiManager.autoConnect((const char * ) HOTSPOT.c_str())) { if (!wifiManager.autoConnect((const char * ) HOTSPOT.c_str())) {
Serial.println("failed to connect and hit timeout"); Serial.println("failed to connect and hit timeout");
delay(6000); delay(6000);
} }
} }