文/曹永忠、許智誠、蔡英德
智慧家居是物聯網開發中非常重要的一環,筆者之前文章〈智慧家庭:健康體重的核心技術〉(曹永忠, 許智誠, & 蔡英德, 2015h, 2017)、〈家居生活的好夥伴:讓 ARDUINO 照顧您的眼睛〉(曹永忠, 許智誠, & 蔡英德, 2015g)、〈家居生活的好保全:讓ARDUINO替您看顧您的房子〉(曹永忠, 許智誠, & 蔡英德, 2015f)、〈「物聯網」的生活應用實作:用 DS18B20 溫度感測器偵測天氣溫度〉(曹永忠, 許智誠, & 蔡英德, 2015e)…等文章中,筆者一直在討論智慧家居的概念,不過這些文章中,仍是著重在感測器的基礎開發,對於智慧監控等裝置較少著墨。
對於智慧家居環境監控議題中,手機、平板等智慧裝置的應用(曹永忠, 吳佳駿, 許智誠, & 蔡英德, 2016a, 2016b, 2017a, 2017b; 曹永忠, 許智誠, & 蔡英德, 2015c, 2015d, 2016a, 2016b; 曹永忠, 蔡佳軒, 許智誠, & 蔡英德, 2015a, 2015b),反而是智慧家居非常重要的一環,若能將感測裝置與智慧行動裝置整合,將可以讓智慧家居的開發更加完善。
本文將使用 DHT22 溫溼度感測模組(曹永忠, 2016, 2017a, 2017b; 曹永忠, 許智誠, & 蔡英德, 2016c, 2016d),讀出溫溼度資訊後,透過藍芽通訊方式,將資訊傳送到智慧行動裝置,透過 MIT APP INVENTOR 2 開發工具,進行智慧行動裝置監控家居溫溼度之物聯網系統整合開發,希望透過這樣簡單的案例,可以傳達筆者在智慧家居環境監控開發上經歷分享。
溫濕度感測器介紹
本實驗為了讓 Ameba RTL8195AM 開發板進階使用,使用了更進階的的 DHT22 溫濕度感測模組(如下圖所示)(曹永忠, 許智誠, et al., 2016c, 2016d)。

圖 1 DHT22 溫濕度感測模組
如下表所示,本模組只要將 Vcc 接到 Ameba RTL8195AM 開發板 +5V 腳位,Gnd 接到 Ameba RTL8195AM 開發板 Gnd 腳位,DAT 接到 Ameba RTL8195AM 開發板 Digital Input 腳位 7,完成電路組立。
表 1 DHT22 溫濕度感測模組接腳圖
DHT22 溫濕度感測模組 | Arduino 開發板接腳 | 解說 |
DAT | Ameba RTL8195AM
digital Input pin 7 |
DHT22 資料輸出腳位 |
5V | Ameba RTL8195AM 5V | 5V 陽極接點 |
GND | Ameba RTL8195AM Gnd | 共地接點 |
![]() |
看不懂上面電路組立表的讀者,也可以參考下圖所示,將本模組只要將 Vcc 接到 Ameba RTL8195AM 開發板 +5V 腳位,Gnd 接到 Ameba RTL8195AM 開發板 Gnd 腳位,DAT 接到 Ameba RTL8195AM 開發板 Digital Input 腳位 7,完成電路組立。

圖 2 DHT22 電路組立圖
如下圖所示,我們可以看到 DHT22 溫濕度感測模組實際接到 Ameba RTL8195AM 開發版之電路實際組立圖。

圖 3 DHT22 電路組立圖
我們將下表之 DHT22 溫濕度感測器讀取溫濕度測試程式攥寫好之後,編譯完成後上傳到 Arduino 開發板。
表 2 DHT22 溫濕度感測器讀取溫濕度測試程式
DHT22溫濕度感測器讀取溫濕度測試程式(DHT22) |
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include “DHT.h”
#define DHTPIN 6 // what digital pin we’re connected to
// Uncomment whatever type you’re using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 4 (on the right) of the sensor to GROUND // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE);
void setup() { Serial.begin(9600); Serial.println(“DHTxx test!”);
dht.begin(); }
void loop() { // Wait a few seconds between measurements. delay(2000);
// Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(“Failed to read from DHT sensor!”); return; }
// Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false);
Serial.print(“Humidity: “); Serial.print(h); Serial.print(” %\t”); Serial.print(“Temperature: “); Serial.print(t); Serial.print(” *C “); Serial.print(f); Serial.print(” *F\t”); Serial.print(“Heat index: “); Serial.print(hic); Serial.print(” *C “); Serial.print(hif); Serial.println(” *F”); } |
上述程式執行後,可以見到下圖之 DHT22 溫濕度感測器讀取溫濕度測試程式畫面結果,也可以輕易讀到外界的溫度與濕度了。

圖 4 讀取DHT22溫濕度感測器測試程式畫面結果
藍芽模組控制
我們接下來介紹藍芽模組(HC-05/HC-06),如下圖所示,我們需要用到的硬體有藍芽模組(HC-05/HC-06):

圖 5 藍芽模組(HC-05/HC-06)所需零件表
我們遵從下表來組立電路,來完成電路組立。
表 3 使用手機控制風扇接腳表
藍芽模組(HC-05) | 開發板 |
VCC | +5V |
GND | GND |
TX | DigitalPin 0 |
RX | DigitalPin 1 |
![]() 藍芽模組(HC-05/HC-06) |
我們打開 Arduino 開發板的開發工具:Sketch IDE 整合開發軟體,攥寫一段程式,如下表所示之藍芽模組(HC-05/HC-06)測試程式一,並將之編譯後上傳到 Ameba 8195 AM 開發板(曹永忠, 許智誠, & 蔡英德, 2015a, 2015b)。
表 4 8 藍芽模組(HC-05/HC-06)
藍芽模組(HC-05/HC-06) (BT_Talk_Serialk) |
#include <SoftwareSerial.h> // 引用程式庫
// 定義連接藍牙模組的序列埠 SoftwareSerial BT(0, 1); // 接收腳, 傳送腳 char val; // 儲存接收資料的變數
void setup() { Serial.begin(9600); // 與電腦序列埠連線 Serial.println(“BT is ready!”);
// 設定藍牙模組的連線速率 // 如果是HC-05,請改成9600 BT.begin(9600); }
void loop() {
// 若收到藍牙模組的資料,則送到「序列埠監控視窗」 if (BT.available()) { val = BT.read(); Serial.print(val); }
// 若收到「序列埠監控視窗」的資料,則送到藍牙模組 if (Serial.available()) { val = Serial.read(); BT.write(val); } } |

圖 6 Arduino 通訊監控畫面-監控藍芽通訊內容
如下圖所示,我們執行後,會出現「BT is ready!」後,我們在下圖左上角紅框區輸入區中,輸入文字,輸入完畢後,按下下圖所示之右上角紅框區傳送鈕將資料傳出。

圖 7 通訊監控畫面-輸入送出通訊內容字元輸入區
如下圖所示,我們輸入文字「abcd」,輸入完畢後按下下圖所示之右上角紅框區傳送鈕將資料傳出。

圖 8 通訊監控畫面-送出輸入區內容
如下圖所示,我們在手機端使用 BlueToothRC 應用程式,連接 Ameba 8195AM 所使用的 HC-05 藍芽模組後,進行傳輸作業,我們可以在下圖所示中,看到傳入的「abcd」的文字,可以見到 Ameba 8195AM 所使用的 HC-05 藍芽模組已成功傳送資料。

圖 8 手機端藍芽接收畫面
如下圖所示,我們在手機端使用 BlueToothRC 應用程式,連接 Ameba 8195AM 所使用的 HC-05 藍芽模組後,輸入的「ameba 8195 am」的文字,再按下右上角之傳送鈕,將資料傳出到另一端藍芽模組。

圖 8手機端藍芽接收畫面
如下圖所示,我們在監控視窗中,將藍芽模組接收的所有資訊,轉顯示在監控視窗上,我們可以看到手機端傳送的「ameba 8195 am」的文字,請注意,本文為了傳送顯示效果,我們共傳送三次,請讀者不要誤會。

圖 8 通訊監控畫面-取得手機端藍芽傳送資料
最後本文中介紹了如何讀取溫溼度感測模組的資訊,並介紹藍芽模組如何進行通訊的技術,相信讀者看完之後,對傳輸資料的技術,可以有相當程度的運用能力。
後續
本篇是「物聯網」系列中〈使用智慧行動裝置監控家居溫溼度〉之上篇,主要告訴讀者,如何讓 Ameba RTL 8195 AM 開發板讀取溫溼度模組,在使用藍芽模組與手機端相互傳送資料,下篇筆者會針對傳送編碼與原理做進一步解析,做更進一步的講解。
後續筆者還會繼續發表「物聯網」系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網(Internet of Thing:IOT)產品開發相關技術。
敬請期待更多的文章。
作者介紹
曹永忠 (Yung-Chung Tsao) ,目前為自由作家暨專業 Maker,專研於軟體工程、軟體開發與設計、物件導向程式設計,商品攝影及人像攝影。長期投入創客運動、資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。Email:prgbruce@gmail.com、Line ID:dr.brucetsao
作者網頁/臉書社群(Arduino.Taiwan)/Github 網站/Youtube
許智誠(Chih-Cheng Hsu),美國加州大學洛杉磯分校(UCLA)資訊工程系博士,曾任職於美國 IBM 等軟體公司多年,現任教於中央大學資訊管理學系專任副教授,主要研究為軟體工程、設計流程與自動化、數位教學、雲端裝置、多層式網頁系統、系統整合。
Email: khsu@mgt.ncu.edu.tw
蔡英德(Yin-Te Tsai),國立清華大學資訊科學系博士,目前是靜宜大學資訊傳播工程學系教授、靜宜大學計算機及通訊中心主任,主要研究為演算法設計與分析、生物資訊、軟體開發、視障輔具設計與開發。
Email:yttsai@pu.edu.tw
參考文獻:
曹永忠. (2016). 智慧家庭:PM2.5 空氣感測器(感測器篇). 智慧家庭. Retrieved 2016/2/26, from https://vmaker.tw/archives/3812
曹永忠. (2017a). 如何使用Linkit 7697建立智慧溫度監控平台(上). Retrieved 2017/7/3, from http://makerpro.cc/2017/07/make-a-smart-temperature-monitor-platform-by-linkit7697-part-one/
曹永忠. (2017b). 如何使用LinkIt 7697建立智慧溫度監控平台(下). Retrieved 2017/8/2, from http://makerpro.cc/2017/08/make-a-smart-temperature-monitor-platform-by-linkit7697-part-two/
曹永忠, 吳佳駿, 許智誠, & 蔡英德. (2016a). Ameba气氛灯程序开发(智能家庭篇):Using Ameba to Develop a Hue Light Bulb (Smart Home) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 吳佳駿, 許智誠, & 蔡英德. (2016b). Ameba氣氛燈程式開發(智慧家庭篇):Using Ameba to Develop a Hue Light Bulb (Smart Home) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 吳佳駿, 許智誠, & 蔡英德. (2017a). Ameba程式設計(物聯網基礎篇):An Introduction to Internet of Thing by Using Ameba RTL8195AM (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 吳佳駿, 許智誠, & 蔡英德. (2017b). Ameba程序设计(物联网基础篇):An Introduction to Internet of Thing by Using Ameba RTL8195AM (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2015a). Arduino手機互動程式設計基礎篇:Using Arduino to Develop the Interactive Games with Mobile Phone via the Bluetooth (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2015b). Arduino樂高自走車:Using Arduino to Develop an Autonomous Car with LEGO-Blocks Assembled (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2015c). LinkIt智能电力监控(网络篇):Using LinkIt ONE to Develop an IOT-based Power-Socket (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2015d). LinkIt智慧電力監控(網路篇)):Using LinkIt ONE to Develop an IOT-based Power-Socket (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2015e). 『物聯網』的生活應用實作:用DS18B20溫度感測器偵測天氣溫度. Retrieved 2015/9/19, from http://www.techbang.com/posts/26208-the-internet-of-things-daily-life-how-to-know-the-temperature-and-humidity
曹永忠, 許智誠, & 蔡英德. (2015f). 家居生活的好保全:讓ARDUINO替您看顧您的房子. Retrieved 2015/6/30, from http://makerdiwo.com/archives/3653
曹永忠, 許智誠, & 蔡英德. (2015g). 家居生活的好夥伴:讓ARDUINO照顧您的眼睛. Retrieved 2015/5/26, from http://makerdiwo.com/archives/2920
曹永忠, 許智誠, & 蔡英德. (2015h). 智慧家庭:健康體重的核心技術. 智慧家庭. Retrieved 2015/12/15, from https://makerdiwo.com/archives/6838
曹永忠, 許智誠, & 蔡英德. (2016a). Arduino投币定时器(网络篇):Using Arduino to Develop a Timing Controlling Device via Internet (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2016b). Arduino投幣計時器(網路篇):Using Arduino to Develop a Timing Controlling Device via Internet (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2016c). Arduino程式教學(溫溼度模組篇):Arduino Programming (Temperature& Humidity Modules) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2016d). Arduino程序教学(温湿度模块篇):Arduino Programming (Temperature& Humidity Modules) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 許智誠, & 蔡英德. (2017). 【物聯網開發系列】氣象物聯網 :風力偵測開發感測器篇. 物聯網開發系列. Retrieved 2017/8/8, from https://vmaker.tw/archives/19431
曹永忠, 蔡佳軒, 許智誠, & 蔡英德. (2015a). Arduino智慧电力监控(手机篇):Using Arduino to Develop an Advanced Monitoring Device of the Power-Socket (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
曹永忠, 蔡佳軒, 許智誠, & 蔡英德. (2015b). Arduino智慧電力監控(手機篇):Using Arduino to Develop an Advanced Monitoring Device of the Power-Socket (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.