-
Notifications
You must be signed in to change notification settings - Fork 0
/
IAQS.ino
163 lines (142 loc) · 4.64 KB
/
IAQS.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <ESP8266WiFi.h>
#include <Arduino.h>
#define LENG 31 //0x42 + 31 bytes equal to 32 bytes
unsigned char buf[LENG];
int PM01Value=0; //define PM1.0 value of the air detector module
int PM2_5Value=0; //define PM2.5 value of the air detector module
int PM10Value=0; //define PM10 value of the air detector module
float TempValue=0; //define tempetature value of the air detector module
float HumiValue=0; //define humidity value of the air detector module
// replace with your thingspeak.com API key
String apiKey = "API";
// replace with your routers SSID
const char* ssid = "SSID";
// replace with your routers password
const char* password = "password";
const char* server = "api.thingspeak.com";
WiFiClient client;
void setup()
{
Serial.begin(9600);
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Printing the ESP IP address
Serial.println(WiFi.localIP());
}
void loop()
{
if(Serial.find(0x42)){ //start to read when detect 0x42
Serial.readBytes(buf,LENG);
if(buf[0] == 0x4d){
if(checkValue(buf,LENG)){
PM01Value=transmitPM01(buf); //count PM1.0 value of the air detector module
PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module
PM10Value=transmitPM10(buf); //count PM10 value of the air detector module
TempValue=transmitTemp(buf); //count tempeture value of the air detector module
HumiValue=transmitHumi(buf); //count humidity value of the air detector module
}
}
}
static unsigned long OledTimer=millis();
if (millis() - OledTimer >=15000) //delay between readings - 15000 milliseconds is 15 seconds
{
OledTimer=millis();
Serial.print("PM1.0: ");
Serial.print(PM01Value);
Serial.println(" ug/m3");
Serial.print("PM2.5: ");
Serial.print(PM2_5Value);
Serial.println(" ug/m3");
Serial.print("PM10 : ");
Serial.print(PM10Value);
Serial.println(" ug/m3");
Serial.print("Temp : ");
Serial.print(TempValue);
Serial.println(" C");
Serial.print("Humi : ");
Serial.print(HumiValue);
Serial.println(" %");
Serial.println();
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(PM01Value);
postStr +="&field2=";
postStr += String(PM2_5Value);
postStr +="&field3=";
postStr += String(PM10Value);
postStr +="&field4=";
postStr += String(TempValue);
postStr +="&field5=";
postStr += String(HumiValue);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
client.stop();
}
}
char checkValue(unsigned char *thebuf, char leng)
{
char receiveflag=0;
int receiveSum=0;
for(int i=0; i<(leng-2); i++){
receiveSum=receiveSum+thebuf[i];
}
receiveSum=receiveSum + 0x42;
if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1])) //check the serial data
{
receiveSum = 0;
receiveflag = 1;
}
return receiveflag;
}
int transmitPM01(unsigned char *thebuf)
{
int PM01Val;
PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module
return PM01Val;
}
//transmit PM Value to PC
int transmitPM2_5(unsigned char *thebuf)
{
int PM2_5Val;
PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module
return PM2_5Val;
}
//transmit PM Value to PC
int transmitPM10(unsigned char *thebuf)
{
int PM10Val;
PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module
return PM10Val;
}
int transmitTemp(unsigned char *thebuf)
{
float TempVal;
TempVal=((thebuf[23]<<8) + thebuf[24])/10; //count tempetature value of the air detector module
return TempVal;
}
int transmitHumi(unsigned char *thebuf)
{
float HumiVal;
HumiVal=((thebuf[25]<<8) + thebuf[26])/10; //count humidity value of the air detector module
return HumiVal;
}