匯入彩色螢幕程式庫(UTFT):[https://drive.google.com/open?id=1Od6TVh\_Moa6Zq1iW6-tpKqJcxmFidTiV](https://drive.google.com/open?id=1Od6TVh_Moa6Zq1iW6-tpKqJcxmFidTiV)
匯入方式:
![](http://maker.tn.edu.tw/uploads/tad_book3/image/messageImage_1561446011310.jpg)
二、修改範例程式
下載完整pm2.5系統程式:
[http://maker.tn.edu.tw/uploads/tad\_book3/file/uno\_esp8266\_G5T\_TFT.ino](http://maker.tn.edu.tw/uploads/tad_book3/file/uno_esp8266_G5T_TFT.ino) (108/5/1更新 for ALL )
[http://maker.tn.edu.tw/uploads/tad\_book3/file/uno\_esp8266\_G5T\_TFT\_NNJH.ino](http://maker.tn.edu.tw/uploads/tad_book3/file/uno_esp8266_G5T_TFT_NNJH.ino) (108/5/1更新 for 南寧高中 )
[http://maker.tn.edu.tw/uploads/tad\_book3/file/uno\_esp8266\_G5T\_TFT\_NTIVS.ino](http://maker.tn.edu.tw/uploads/tad_book3/file/uno_esp8266_G5T_TFT_NTIVS.ino) (108/5/1更新 for 南工 )
下載方式:按右鍵,點「另存連結為(K)...」
![](http://maker.tn.edu.tw/uploads/tad_book3/image/2019-06-25_151223.jpg)
修改現場 WiFi 名稱(SSID)和密碼(PASS),必須注意「 "TN-Edu-4G-1005" 」雙引號內不能有多餘的空格!!
SSID:TN-Edu-4G-1005
PASS:38786890
修改個人代號或場地名稱
南工物聯網系統:iot-user 改成自己自訂的代號或設備所在的場地名稱。
```
#include
SoftwareSerial esp8266(7,8); // make RX Arduino line is pin 4, make TX Arduino line is pin 5.
SoftwareSerial pmsSerial(2, 3); // RX, TX
byte PmsList[32];
#include
UTFT myGLCD(QD220A,A2,A1,A5,A4,A3);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
////////請更改為你的資料////////
#define SLogo "修改液晶呈現的學校縮寫"
#define SSID "修改自己的WiFi名稱"
#define PASS "修改自己的WiFi密碼"
#define ThingSpeakKEY "修改自己在ThingSpeak上的Key"
#define SCHOOLCODE "修改自己的學校代碼"
#define NO "修改自訂的設備編號"
////////////////////////////////
bool CheckSum(uint8_t *__buf, int __n)
{
bool __flag = false; int __sum = 0;
for(int i=0; i<(__n-2); i++)
{
__sum += __buf[i];
}
if(__sum == ((__buf[__n-2]<<8) + __buf[__n-1]))
{
__flag = true;
}
return __flag;
}
void setup(){
/*
pinMode(12,OUTPUT);
digitalWrite(12,HIGH);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
*/
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
pinMode(12,OUTPUT);
digitalWrite(12,HIGH);
pinMode(14,OUTPUT); //A0
digitalWrite(14,HIGH); //A0
String cmd;
Serial.begin(9600);
esp8266.begin(9600); // your esp's baud rate might be different
//esp8266.begin(115200); // your esp's baud rate might be different
pmsSerial.begin(9600); // PMS3003 UART has baud rate 9600
pmsSerial.setTimeout(1500);
//sendDebug("AT+RST");
//delay(10000);
sendEsp8266("AT");
delay(10000);
sendEsp8266("AT+CWMODE=1");
delay(1000);
cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
sendEsp8266(cmd);
myGLCD.InitLCD();
myGLCD.clrScr();
//analogWrite(5,100);
myGLCD.setFont(BigFont);
myGLCD.print("PM2.5 Sencor", 0, 0);
myGLCD.setFont(BigFont);
myGLCD.setColor( 255 , 255 , 0 );
myGLCD.print(SLogo, CENTER , 25); //設定螢幕顯示的學校縮寫
myGLCD.setFont(SmallFont);
myGLCD.setColor( 255 , 0 , 0 );
myGLCD.print("(pm2.5)", 30 ,45);
myGLCD.setFont(SmallFont);
myGLCD.setColor( 255 , 0 , 0 );
myGLCD.print("ug/m3", 40 , 110);
myGLCD.setFont(SmallFont);
myGLCD.setColor( 255 , 0 , 0 );
myGLCD.print("(Temp)", 130 ,105);
myGLCD.setFont(SmallFont);
myGLCD.setColor( 255 , 0 , 0 );
myGLCD.print("(Humandity)", 120 ,135);
}
void loop(){
/*if (esp8266.available()){
Serial.write(esp8266.read());}
if (Serial.available()){
esp8266.write(Serial.read());}
*/
if(pmsSerial.available())
{
static int __index = 0;
PmsList[__index] = pmsSerial.read();
switch(__index)
{
case 0:
__index = (PmsList[0] == 0x42) ? 1 : 0;
break;
case 1:
__index = (PmsList[1] == 0x4d) ? 2 : 0;
break;
case 2:
__index = 3;
break;
case 3:
int __len = (PmsList[2] << 8) + PmsList[3];
if(__len == (28))
{
if(pmsSerial.readBytes(&PmsList[4], __len) == __len)
{
if(CheckSum(PmsList, 32) == 1)
{
int a;
Serial.print("atmosphere, PM1.0=");
a = (PmsList[10]<<8) + PmsList[11];
Serial.print(a);
Serial.println(" ug/m3");
int b;
Serial.print("atmosphere, PM2.5=");
b = (PmsList[12]<<8) + PmsList[13];
Serial.print(b);
Serial.println(" ug/m3");
int c;
Serial.print("atmosphere, PM10=");
c = (PmsList[14]<<8) + PmsList[15];
Serial.print(c);
Serial.println(" ug/m3");
float t;
Serial.print("Temperature=");
t = (PmsList[24]<<8) + PmsList[25];
t = t/10;
Serial.print(t);
Serial.println("c");
float h;
Serial.print("Humility=");
h = (PmsList[26]<<8) + PmsList[27];
h = h/10;
Serial.print(h);
Serial.println("%");
delay(1000);
myGLCD.setFont(SevenSegNumFont);
if ((b) < (16)){
myGLCD.setColor(0, 255, 0);
}
else if( (b) > (16) & (b)<(36)) {
myGLCD.setColor(VGA_YELLOW);
}
else if ((b) > (35) & (b)<(55) ){
myGLCD.setColor(208,123, 0);
}
else if ((b) > (54) & (b)<(151) ) {
myGLCD.setColor(VGA_RED);
}
else if ((b) > (150) ) {
myGLCD.setColor(VGA_PURPLE);
}
if ((b) < (10) ) {
myGLCD.print("00"+String(b) , 5, 58 );
}
else if ((b) > (9) & (b) < (100)) {
myGLCD.print("0"+String(b) , 5, 58 );
}
else if ((b) > (99) ) {
myGLCD.print(String(b) , 5, 58 );
}
myGLCD.setFont(BigFont);
if ((t) < (10) ) {
myGLCD.setColor(VGA_BLUE);
myGLCD.print("0"+String(t) , 115 , 115);
}
else if ((t) > (9) & (t) < (100) ) {
myGLCD.setColor(VGA_WHITE);
myGLCD.print(String(t) , 115 , 115);
}
if (h < 10) {
myGLCD.setColor(VGA_BLUE);
myGLCD.print("0"+String(h) , 115 , 150);
}
else if (h > 9 & h < 65) {
myGLCD.setColor(VGA_WHITE);
myGLCD.print(String(h) , 115 , 150);
}
else if (h >= 65) {
myGLCD.setColor(VGA_RED);
myGLCD.print(String(h) , 115 , 150);
}
String IP ="184.106.153.149"; // ThingSpeak IP Address: 184.106.153.149
String GET = "GET /update?key=" ;
GET += ThingSpeakKEY;
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
sendEsp8266(cmd);
delay(1000);
cmd = GET + "&field1="+a+"&field2="+b+"&field3="+c+"&field4="+t+"&field5="+h;
//sendEsp8266( "AT+CIPSEND=105" );
sendEsp8266( "AT+CIPSEND="+(String)(cmd.length()+2) ); //送出的字串長度需+2
delay(1000);
sendEsp8266(cmd);
delay(1000);
sendEsp8266( "AT+CIPCLOSE" );
delay(5000);
IP ="120.115.2.47"; // 上傳台南市政府教育局PM2.5監測 http://maker.tn.edu.tw/modules/tn_pm25/index.php
GET = "GET /api.php?schoolcode=";
GET += SCHOOLCODE;
GET += "&no=";
GET += NO;
cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
sendEsp8266(cmd);
delay(1000);
cmd = GET + "&pm25="+b+"&t="+t+"&h="+h;
sendEsp8266( "AT+CIPSEND="+(String)(cmd.length()+2) ); //送出的字串長度需+2
delay(1000);
sendEsp8266(cmd);
delay(1000);
sendEsp8266( "AT+CIPCLOSE" );
/*
if (b<16){
analogWrite(9,0);//綠
analogWrite(10,255);//藍
analogWrite(11,255);//紅
}
else if( b > 16 & b<36) {
analogWrite(9,0);
analogWrite(10,255);
analogWrite(11,0);
}
else if( b > 35 & b < 55) {
analogWrite(9,100);
analogWrite(10,200);
analogWrite(11,100);
}
else if( b > 54 & b < 151) {
analogWrite(9,255);
analogWrite(10,255);
analogWrite(11,0);
}
else if(b > 150 ) {
analogWrite(9,255);
analogWrite(10,0);
analogWrite(11,0);
}
*/
delay(6000);
}
}
}
__index = 0;
break;
}
}
}
void sendEsp8266(String sent_cmd)
{
Serial.print("SEND: ");
Serial.println(sent_cmd);
esp8266.println(sent_cmd);
}
```