mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-30 00:47:17 +02:00
Updated outdoor example
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user