:::
PM2.5空污監測器實作

PM2.5精簡版分享(使用ESP-01作主控版)

discuss pic 2016-08-12 09:35:51
1.打開ARDUINO軟體,檔案>>偏好設定,
在下方額外的板子管理員網址:輸入http://arduino.esp8266.com/stable/package_esp8266com_index.json


2.接著到工具>>板子>>板子管理員
拉到最下一欄會多一項ESP8266,需在欄內點一下才會出現安裝訊息


安裝好後會顯示INSTALLED

3.接下來到工具>>板子>>選Generic ESP8266 Module


板子選好後,再改一下Flash Size(我只知道1M,後面的SPIFFS就不知啥意思)


4.把ESP8266接到USB to 8266轉接板,並且將開關調到燒錄模式


5.把以下程式碼貼到ARDUINO,修改一下各校環境資訊,就可以上傳了(記得檢查一下連接埠有沒有選對)
#include <DHT.h> #include <ESP8266WiFi.h>
#define  Buzzer     2   //接蜂鳴器
#define  DHTPIN     0   //接DHT22
#define  DHTTYPE    DHT22 
DHT dht(DHTPIN, DHTTYPE,11);

//*-- IoT Information
#define SSID    "修改無線網路名稱"      //無線網路名稱
#define PASS    "修改無線網路密碼"      //無線網路密碼
#define HOST    "pm25.tn.edu.tw"        //PM2.5網站網址
#define PORT    80
String PMgps = "修改學校經緯度座標";   //學校經緯度座標
String schoolcode = "修改學校代碼";    //學校代碼
int no = 0;                            //設備編號,可設定0~255,在監測網上可區別一校多個設備
long updateInterval = 1200000;    //傳送資料時間間隔,測試完請設定1800000(30分鐘)
long resettime =86400000;       //每24小時自動重開機

//sharp GP2Y1051 二代 start
int incomeByte[7];
int data;
int z=0;
int sum, count;
float average_pm2d5,sum_2s;
unsigned long error, starttime, buzzerStart, updateStart;
 
void updateSensor( float T)
{
   
   if(T>=200) {
    digitalWrite(Buzzer,HIGH);
    buzzerStart=millis();      //設定Buzzer告警開始時間
   }
   
   if(abs(millis()-buzzerStart)>2000){ 
      digitalWrite(Buzzer,LOW);
   }
   
   if(abs( millis() - updateStart) > updateInterval | updateStart == 0 ){    
      
      float h = dht.readHumidity();
      float t = dht.readTemperature();
     WiFiClient client;
    if( !client.connect( HOST, PORT ) )
    {
         return;
    }
    else
    {
        String getStr = "GET /xoops/api.php?schoolcode=" + schoolcode + "&no=" + no + "&pm25=" + T + "&t=" + t + "&h=" + h +"&gps=" + PMgps + " HTTP/1.1\r\n";
        client.print( getStr );
        client.print( "Host: pm25.tn.edu.tw\n" );
        client.print( "Connection: close\r\n\r\n" );
        
        delay(2000);
        client.stop();
        updateStart = millis();      //重設上傳時間
      }     
   }
}

void setup()
{
    Serial.begin( 2400 );
    Serial.println( SSID );
    WiFi.begin( SSID, PASS );

    dht.begin();
    
    starttime=millis();      //設定Sharp感測器開始的擷取時間
    updateStart = millis();      //設定第一次即上傳
    delay(2000);
 
  pinMode(Buzzer,OUTPUT);
   
}
 
void loop(){

if(starttime >= resettime) { ESP.restart(); }

  while (Serial.available()>0){
    data=Serial.read();
    if(data == 170){
      z=0;
      incomeByte[z]=data;
    }
    else{
      z++;
      incomeByte[z]=data;
    } 
    if(z==6)
    {
      sum=incomeByte[1]+ incomeByte[2]+ incomeByte[3] + incomeByte[4];
 
      if(incomeByte[5]==sum && incomeByte[6]==255 )
      {
        float vo=(incomeByte[1]*256.0+incomeByte[2])/1024.0*5.00;
        float pm = vo*700;
        sum_2s=sum_2s + pm;
        count++;
        if(abs(millis()-starttime)>2000){    
          average_pm2d5=(sum_2s/count)*1.00;
          updateSensor(average_pm2d5);
          Serial.print("PM2.5_Average = "); 
          Serial.println(average_pm2d5,2); 
          starttime=millis();
          sum_2s=0;
          count=0;
        }
      }
      else{
        z=0;
        Serial.flush();
        data='/0';
        for(int m=0;m<7;m++){
          incomeByte[m]=0;
        }
      }
      z=0;
    }
  }
}

程式上傳好,就可以來組裝各個零件了,在這之前先來認識一下ESP-01的腳位定義,
ESP-01可用腳位沒幾支(若您想做其他專案,就是把感測器接到GPIO0或GPIO2),
少了一片UNO連接起來就簡單多了


完整組裝請參考盛南老師畫的電路圖






discuss pic 2016-08-24 12:59:33
超棒的分享,讚,大家一定要玩玩看喔!

搜尋

錯誤訊息
未知: 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
通知: Undefined index: theme_kind 在檔案中的第 /modules/tad_discuss/header.php 列 8
未知: 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 index: op 在檔案中的第 /modules/tad_discuss/function.php 列 57
通知: Undefined index: op 在檔案中的第 /modules/tad_discuss/function.php 列 63
通知: Undefined index: op 在檔案中的第 /modules/tad_discuss/function.php 列 57
通知: Undefined index: op 在檔案中的第 /modules/tad_discuss/function.php 列 63
通知: Undefined index: bootstrap 在檔案中的第 /modules/tadtools/preloads/core.php 列 68
已棄用
資料庫語法
0.000056 - SET SQL_BIG_SELECTS = 1
0.000684 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '1') ORDER BY conf_order ASC
0.000206 - SELECT sess_data, sess_ip FROM session WHERE sess_id = '75t61jrfj0rnr5ud2cbbpeukj0'
0.000249 - SELECT * FROM modules WHERE dirname = 'tad_discuss'
0.000515 - SELECT COUNT(*) FROM group_permission WHERE (`gperm_modid` = '1' AND (`gperm_groupid` = '3') AND `gperm_name` = 'module_read' AND `gperm_itemid` = '13')
0.000289 - SELECT * FROM config WHERE (`conf_modid` = '13') ORDER BY conf_order ASC
0.000350 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '5') ORDER BY conf_order ASC
0.000226 - SELECT COUNT(*) FROM banner
0.000143 - SELECT * FROM banner LIMIT 0, 1
0.003842 - UPDATE banner SET impmade = 1265306 WHERE bid = 1
0.000237 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '3') ORDER BY conf_order ASC
0.001136 - SELECT DISTINCT gperm_itemid FROM group_permission WHERE gperm_name = 'block_read' AND gperm_modid = 1 AND gperm_groupid IN (3)
0.000941 - 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,13) 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.000557 - 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.000289 - SELECT * FROM modules WHERE dirname = 'tadtools'
0.000316 - SELECT * FROM config WHERE (`conf_modid` = '4') ORDER BY conf_order ASC
0.000413 - select * from tad_discuss where DiscussID='48'
0.000337 - SELECT COUNT(*) FROM group_permission WHERE (`gperm_modid` = '13' AND (`gperm_groupid` = '3') AND `gperm_name` = 'forum_read' AND `gperm_itemid` = '1')
0.003397 - update tad_discuss set `Counter`=`Counter`+1 where `DiscussID`='48'
0.000254 - select * from `tad_discuss_board` where `BoardID` = '1'
0.000357 - select * from tad_discuss where DiscussID='48' or ReDiscussID='48' order by ReDiscussID , DiscussDate
0.000348 - select * from tad_discuss where DiscussID='48' or ReDiscussID='48' order by ReDiscussID , DiscussDate LIMIT 0, 20
0.000318 - SELECT * FROM users WHERE uid = '12'
0.000230 - SELECT * FROM smiles
0.000331 - select * from `tad_discuss_files_center` where `col_name`='DiscussID' and `col_sn`='48' order by sort
0.000217 - SELECT * FROM users WHERE uid = '2'
0.000209 - select * from `tad_discuss_files_center` where `col_name`='DiscussID' and `col_sn`='52' order by sort
0.000343 - SELECT COUNT(*) FROM group_permission WHERE (`gperm_modid` = '13' AND (`gperm_groupid` = '3') AND `gperm_name` = 'forum_post' AND `gperm_itemid` = '1')
0.000296 - select `tt_theme`,`tt_use_bootstrap`,`tt_bootstrap_color`,`tt_theme_kind` from `tadtools_setup` where `tt_theme`='school2015'
0.000550 - 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` = 'tad_discuss_discuss.tpl') ORDER BY tpl_refid
0.000504 - 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` = 'tad_discuss_bootstrap.tpl') ORDER BY tpl_refid
0.000384 - 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_notification_select.tpl') ORDER BY tpl_refid
0.000198 - SELECT * FROM modules WHERE dirname = 'tad_themes'
0.000206 - SELECT * FROM config WHERE (`conf_modid` = '3') ORDER BY conf_order ASC
0.000167 - select `tt_bootstrap_color` from tadtools_setup where `tt_theme`='school2015'
0.000343 - select * from tad_themes where `theme_name`='school2015'
0.000213 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000287 - select * from tad_themes_blocks where `theme_id`='7'
0.000224 - select mid from modules where dirname='tad_themes'
0.000475 - desc `tad_themes_data_center` `sort`
0.000145 - 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.000189 - select conf_value from config where conf_name ='allow_register'
0.000351 - select `mid`, `name`, `dirname` from modules where isactive='1' and hasmain='1' and weight!=0 order by weight
0.000161 - SELECT * FROM modules WHERE dirname = 'tad_blocks'
0.000204 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000206 - select count(*) from priv_msgs where `to_userid` ='0' and `read_msg`=0 group by `to_userid`
0.000371 - 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.000168 - 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.000151 - 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.000142 - 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.000139 - 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.000155 - 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.000138 - 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.000430 - 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.000200 - SELECT * FROM modules WHERE dirname = 'tad_login'
0.000340 - SELECT * FROM config WHERE (`conf_modid` = '14') ORDER BY conf_order ASC
總計: 56
區塊
搜尋: 沒有快取
總計: 1
額外資訊
包含檔案: 216 檔案
使用記憶體: 7263008 bytes
計時
XOOPS 使用 0.124 秒來載入。
XOOPS Boot 使用 0.024 秒來載入。
Module init 使用 0.010 秒來載入。
XOOPS output init 使用 0.030 秒來載入。
Module display 使用 0.027 秒來載入。
Page rendering 使用 0.030 秒來載入。