--- tags: 勇哥, Yungger, IoT, 物聯網, 智慧家庭, MQ-135, 空氣品質, 感測器, ESP8266, Arduino, IDEAS Chain --- # **智慧家庭系列 – 空氣品質檢測** 今天剛好有個機會, 需要對同好演示一下感知器在物聯網中扮演的角色。 其實對於 IoT 創客而言, 手頭上總會有一堆板子與感知器. 加上最近智慧家庭宅是個很夯的賣點, 所以, 隨手就拿了一個身邊有的 MQ-135 Gas Sensor 來做個對周遭二氧化碳濃度的監測演示與簡易說明。 既然要聊的是物聯網, 便需要再挑一片具 WiFi 連網功能的板子, 此範例採用的是 ESP8266 來實作它。 至於要燒錄什麼語言來驅動它呢?雖然最近我寫的都是 MicroPython, 而同好懂的是用 Arduino IDE 來開發, 但其實天下程式語言是一法通就萬法通. 所以, 索性我就將它改成 Arduino 版的來解說。 實驗目標簡述: --- 我們將建置一個空氣品質監測站, 透過一個 MQ-135 氣體感測器, 定時將檢測到空氣品質數據上傳至雲端物聯網數據平台上 (這裡我用的是<font color="red">資策會服創所的雲端數據服務平台 IDEAS Chain</font> 來演示, 當然你也可以使用其他服務平台, 或自己架一個也行)。 當檢測到空氣品質出現異常數據時, 例如二氧化碳濃度值過高時, 就能自動送出即時訊息通知使用者 (這裡我用以一個 LED 來演示, 當數據異常時 LED 亮, 正常時則滅)。 至於, 使用者收到通知後, 自然便可以再決定接下來是否要採取一些相對應的動作。 處理方式可以是人工 or 半人工, 或甚至再連動一些全自動化裝置來排除異常。當然, 這些就會是因人因需求而異了, 在此就預留些想像的空間給同好吧 ! 但若是身為創客的我本人, 自然是會要求一系列的全自動化, 例如, 手機 or LINE通知, 偵測熱源, 馬達控制開窗, 風扇排氣, ...etc. 重點材料說明: --- ![](https://i.imgur.com/5XwR8qS.jpg) MQ-135 空氣品質檢測感測器模組: 一、 尺寸:32mm X22mm X30mm(長X寬X高) 二、 主要晶片:LM393、MQ-135 氣體感測器 三、 工作電壓:DC 5V 四、 特點: *雙路信號輸出(類比數值輸出及TTL電位輸出) *TTL輸出有效信號為低電位。 *具有信號輸出指示。(當輸出低電位時信號燈亮) *類比數值輸出對應至 0~5V 電壓輸出,濃度越高,電壓越高。 *具有長期的使用壽命和可靠的穩定性。 :::info 特別提醒:感測器通電後,需要預熱20S左右,測量的資料才穩定。因為內部有電熱絲,感測器發熱是屬於正常現象,但如果燙手就不正常了。 ::: 實作展示開始: --- **[準備的材料]** • Arduino 板子 x 1 -- 這裡是用內建 WiFi 連網的 ESP8266 • MQ-135 x 1 -- 腳位 DO 可不用接 • 麵包板(含電源模組) x 1 • 連接線 x 3 • 雲端物聯網數據平台 x 1 實體接線圖: --- ![](https://i.imgur.com/3sCrbYm.jpg) ![](https://i.imgur.com/lmR06Qi.jpg) 範例程式碼: --- ```C++ #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> WiFiClient client; HTTPClient http; #define AP_ID "Your AP SSID" #define AP_PWD "Your AP password" const String access_token = "Your Device Access Token"; int value_sensor = 0; int value_led = 0; void connectWiFi() { WiFi.begin(AP_ID, AP_PWD); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println(""); Serial.print("WiFi "); Serial.print(AP_ID); Serial.println ("connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void post(String device_key, String data){ Serial.print("[HTTP] begin...\n"); http.begin(client, "http://iiot.ideaschain.com.tw/api/v1/"+device_key+"/telemetry"); //Specify destination device by its access token http.addHeader("Content-Type", "application/json"); Serial.print("[HTTP] POST...\n"); int httpCode = http.POST(data); if (httpCode > 0) { Serial.printf("[HTTP] POST... code: %d\n", httpCode); if (httpCode == HTTP_CODE_OK) { const String& payload = http.getString(); Serial.println("received payload:\n<<"); Serial.println(payload); Serial.println(">>"); } } else { Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void setup() { pinMode(LED_BUILTIN, OUTPUT) Serial.begin(115200); delay(10); while (!Serial) { ; } connectWiFi(); } void loop(){ value_sensor = analogRead(0); value_led = (value_sensor >= 700) ? 0:1 ; digitalWrite(LED_BUILTIN, value_led); Serial.println(); Serial.println("Sensor Value:"+String(value_sensor)+", LED:"+String(value_led)); String data = "{\"sensor\":"+String(value_sensor)+"\", led\":"+String(value_led)+"}"; post(access_token, data); delay(5000); } ``` 量測的結果: --- 在 <font color="red">IDEAS Chain</font> 雲端物聯網數據平台上, 你可即時看到剛剛上傳的資料與圖表, 範例如下: ![](https://i.imgur.com/nsY2kR5.jpg) ![](https://i.imgur.com/mu77rOc.jpg) ![](https://i.imgur.com/txhLLun.jpg) :::info 執行時, 在本機 Arduino IDE 的 Serial Monitor 監視器上,也可以看到 MQ-135 正在蒐集檢測的值。正常的空氣品質下, 約在150左右,若異常約落在700以上。 ::: --- * ***Yungger 勇哥***: :smile::smile::smile: 就是這麼簡單, 希望能對你邁向創客之路有更近一步的幫助 !