:::

8. 程式撰寫

一、需下載安裝的軟體或程式

uno改進版專用驅動程式(WCH CH340G):http://www.wch.cn/download/CH341SER_EXE.html

Arduino程式編輯器下載:https://downloads.arduino.cc/arduino-1.8.9-windows.exe

匯入彩色螢幕程式庫(UTFT):https://drive.google.com/open?id=1Od6TVh_Moa6Zq1iW6-tpKqJcxmFidTiV

匯入方式:

二、修改範例程式

下載完整pm2.5系統程式:

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 (108/5/1更新 for 南寧高中 )

http://maker.tn.edu.tw/uploads/tad_book3/file/uno_esp8266_G5T_TFT_NTIVS.ino (108/5/1更新 for 南工 )

下載方式:按右鍵,點「另存連結為(K)...」

 

修改現場 WiFi 名稱(SSID)和密碼(PASS),必須注意「 "TN-Edu-4G-1005" 」雙引號內不能有多餘的空格!!

SSID:TN-Edu-4G-1005

PASS:38786890

修改個人代號或場地名稱

南工物聯網系統:iot-user 改成自己自訂的代號或設備所在的場地名稱。

#include <SoftwareSerial.h>
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.h>
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);
} 

 


搜尋

錯誤訊息
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 40
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 40
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 73
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 505
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 505
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined index: bootstrap 在檔案中的第 /modules/tadtools/preloads/core.php 列 68
已棄用
資料庫語法
0.000072 - SET SQL_BIG_SELECTS = 1
0.000648 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '1') ORDER BY conf_order ASC
0.000231 - SELECT sess_data, sess_ip FROM session WHERE sess_id = '7ir7m148svkpis93568i2l20sa'
0.000308 - SELECT * FROM modules WHERE dirname = 'tad_book3'
0.000555 - SELECT COUNT(*) FROM group_permission WHERE (`gperm_modid` = '1' AND (`gperm_groupid` = '3') AND `gperm_name` = 'module_read' AND `gperm_itemid` = '9')
0.000298 - SELECT * FROM config WHERE (`conf_modid` = '9') ORDER BY conf_order ASC
0.000402 - select a.tbsn,a.title,b.author,a.category,a.page,a.paragraph,a.sort from tad_book3_docs as a left join tad_book3 as b on a.tbsn=b.tbsn where a.tbdsn='400'
0.000179 - SELECT tbsn,title FROM tad_book3 ORDER BY sort
0.000289 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '5') ORDER BY conf_order ASC
0.000190 - SELECT COUNT(*) FROM banner
0.000129 - SELECT * FROM banner LIMIT 1, 1
0.003178 - UPDATE banner SET impmade = 1277987 WHERE bid = 2
0.000280 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '3') ORDER BY conf_order ASC
0.001165 - SELECT DISTINCT gperm_itemid FROM group_permission WHERE gperm_name = 'block_read' AND gperm_modid = 1 AND gperm_groupid IN (3)
0.000929 - SELECT b.* FROM newblocks b, block_module_link m WHERE m.block_id=b.bid AND b.isactive=1 AND b.visible=1 AND m.module_id IN (0,9) AND b.bid IN (1,2,3,4,5,6,7,8,9,10,11,18,15,16,20,19,58,60,61,73,72,74,71,76,75,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,111,109,110,112,113,114,115,116,117,118,119,120,121,122,123) ORDER BY b.weight, m.block_id
0.000694 - SELECT f.*, s.tpl_source FROM tplfile f LEFT JOIN tplsource s ON s.tpl_id=f.tpl_id WHERE (`tpl_tplset` = 'default' AND `tpl_file` = 'system_block_search.tpl') ORDER BY tpl_refid
0.003906 - update tad_book3_docs set `count` = `count`+1 where tbdsn='400'
0.000223 - select * from tad_book3_docs where tbdsn='400'
0.000152 - select * from tad_book3 where tbsn='21'
0.000211 - select mid from modules where dirname='tad_book3'
0.000496 - desc `tad_book3_data_center` `sort`
0.000235 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_book3_data_center` where `mid`= '9' and `col_name`='read_tbdsn_date' and `col_sn`='400' order by `sort` , `data_sort`
0.001304 - select tbdsn,title,content,category,page,paragraph,sort,enable,uid,from_tbdsn from tad_book3_docs where tbsn='21' and `enable`='1' order by category,page,paragraph,sort
0.000881 - select tbdsn,title,category,page,paragraph,sort from tad_book3_docs where tbsn='21' and (`content` != '' or `from_tbdsn` != 0) and enable='1' order by category,page,paragraph,sort
0.000220 - SELECT * FROM modules WHERE dirname = 'tadtools'
0.000229 - SELECT * FROM config WHERE (`conf_modid` = '4') ORDER BY conf_order ASC
0.000172 - select mid from modules where dirname='tad_book3'
0.000282 - desc `tad_book3_data_center` `sort`
0.000187 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_book3_data_center` where `mid`= '9' and `col_name`='video_tbdsn_date' and `col_sn`='400' order by `sort` , `data_sort`
0.000219 - select groupid,name from groups
0.000431 - select * from `tad_book3_files_center` where `col_name`='mp4' and `col_sn`='400' and `kind`='file' order by sort limit 0,1
0.000284 - select `tt_theme`,`tt_use_bootstrap`,`tt_bootstrap_color`,`tt_theme_kind` from `tadtools_setup` where `tt_theme`='school2015'
0.000429 - SELECT f.*, s.tpl_source FROM tplfile f LEFT JOIN tplsource s ON s.tpl_id=f.tpl_id WHERE (`tpl_tplset` = 'default' AND `tpl_file` = 'tadbook3_index.tpl') ORDER BY tpl_refid
0.000265 - SELECT * FROM modules WHERE dirname = 'tad_themes'
0.000276 - SELECT * FROM config WHERE (`conf_modid` = '3') ORDER BY conf_order ASC
0.000172 - select `tt_bootstrap_color` from tadtools_setup where `tt_theme`='school2015'
0.000304 - select * from tad_themes where `theme_name`='school2015'
0.000241 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000294 - select * from tad_themes_blocks where `theme_id`='7'
0.000187 - select mid from modules where dirname='tad_themes'
0.000481 - desc `tad_themes_data_center` `sort`
0.000146 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_themes_data_center` where `mid`= '3' and `col_name`='theme_id' and `col_sn`='7' order by `sort` , `data_sort`
0.000185 - select conf_value from config where conf_name ='allow_register'
0.000311 - select `mid`, `name`, `dirname` from modules where isactive='1' and hasmain='1' and weight!=0 order by weight
0.000176 - SELECT * FROM modules WHERE dirname = 'tad_blocks'
0.000195 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000207 - select count(*) from priv_msgs where `to_userid` ='0' and `read_msg`=0 group by `to_userid`
0.000377 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='0' and status='1' order by position
0.000214 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='11' and status='1' order by position
0.000157 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='14' and status='1' order by position
0.000144 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='15' and status='1' order by position
0.000172 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='17' and status='1' order by position
0.000175 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='16' and status='1' order by position
0.000145 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='18' and status='1' order by position
0.000403 - select a.* from tad_themes_files_center as a left join tad_themes as b on a.col_sn=b.theme_id where a.`col_name`='slide' and b.`theme_name`='school2015'
0.000219 - SELECT * FROM modules WHERE dirname = 'tad_login'
0.000333 - SELECT * FROM config WHERE (`conf_modid` = '14') ORDER BY conf_order ASC
總計: 57
區塊
搜尋: 沒有快取
總計: 1
額外資訊
包含檔案: 204 檔案
使用記憶體: 7000888 bytes
計時
XOOPS 使用 0.122 秒來載入。
XOOPS Boot 使用 0.028 秒來載入。
Module init 使用 0.007 秒來載入。
XOOPS output init 使用 0.033 秒來載入。
Module display 使用 0.027 秒來載入。
Page rendering 使用 0.025 秒來載入。