iOS x IoT ( 5 ) — Arduino Uno + ESP8266 + DHT-22
本系列文旨在實驗一個用iOS App接收資料的微型物聯網(IoT)架構。
這個章節的目的,是要利用 Arduino 建立一個簡易的溫溼度感測電路。
開始之前,先花幾分鐘的時間認識一下 Arduino,可以參考 LazyTomato Lab 這支生動活潑的影片:
對 Arduino 有了基本了解後,就正式開始吧!
📕 硬體元件簡介
本專案使用到的硬體元件如下列表:
📍 Arduino Uno R3 :
最常被使用的 Arduino 開發板,可以透過 USB 連接埠與電腦連接,進行電力供應或程式燒錄。
板子本身可以接上各種電子裝置,如 LED、LCD、馬達、開關、WiFi、Bluetooth、RFID 等一大堆模組,配合撰寫程式,就能做出各式各樣的應用。
📍 DHT-22 溫濕度模組:
白色為 DHT-22,藍色為 DHT-11,準確度以及可量測範圍是DHT-22 > DHT-11,但取樣速率是 DHT-11 (每秒一次) > DHT-22 (兩秒一次)。
模組在使用時,必須在 VCC 與 DATA 間串連一個 4.7kΩ 的電阻,方能於 DATA 腳位得到正確的數值,但是,像左圖這種有背板的,則不需要額外串連電阻。
📍 ESP8266 (ESP-01) 模組:
WiFi 模組系列 ESP-01 ~ ESP-12,其中 ESP-01 是最基本的,電流只能接 3.3 V,千萬不能直接連接 5V,會燒毀!
可以設定成基地台模式 ( AP ) 或直接連接無線網路 ( P2P )。
麵包板、杜邦線、還有麵包線都是額外連接電路使用的,需自行斟酌要用多少、如何接線。
📗 電路接線圖
本專案製作的電路接線圖繪製如下:
🔌 ESP8266 ( ESP-01 ):
- UTXD 接到 Arduino 的 3 號腳位。
- URXD 接到 Arduino 的 4 號腳位。
- CH_PD 與 VCC 分別接到 Arduino 的 3.3V。
- GND 接 Arduino 的 GND。
🔌 DHT-22:
- VCC 接到 Arduino 的 5V。
- DATA 接到 Arduino 的 5 號腳位。
- GND 接 Arduino 的 GND。
- 如果採用沒有背板的 DHT-22,則需要在 VCC 與 DATA 間,串連一個 4.7kΩ 的電阻 (如上圖),有背板的 DHT-22 不用。
📘 安裝程式庫
我們的 Arduino 程式需要用到一些別人寫好的程式庫,請先打開 Arduino IDE 照下圖步驟安裝:
📍 安裝下列程式庫:
- WiFiEsp,版本:2.2.2。
- PubSubClient,版本:2.6.0。
- DHT-sensor-library,版本:1.2.3。
(注意:DHT-sensor-library 不要裝 1.3.0 版本,因為 1.3.0 還需要安裝另外的相依程式庫才能使用)
📙 Arduino 主程式
連接 ESP-01 與 DHT22 的 Arduino 程式與說明如下:
其中要特別說明一下,在第 9 行的 mqttServer
是我們在第三章建立 VM 的外部 IP,示意如下紅框部分。
在第 119 行,client.publish(topic,message)
的意思是:溫濕度 message
會被 publish 到 Broker 的 topic ,而 topic
在第 13 行:Arduino/DHT22。
程式上傳到 Arduino 後,在 IDE 右上角-序列埠監控視窗可看到 payload
,傳輸速率記得設定為 9600 baud。
程式中並沒有設定傳送的 MQTT 訊息品質,原因是 PubSubClient 只能發布QoS 0 的訊息,詳細:PubSubClient document。
📝 小結
Arduino 的東西太多太多,在這之前我完全沒碰過,所以我的電路與程式多半是參考下面這本書設計修正的:
對有點程式背景的初學者來說應該不算太難,而且內容全彩,接線的時候非常的有幫助!
除了書籍以外,軟爛番茄工作室 LazyTomato Lab 的影片有助於初期的知識建立,而且影片生動活潑,讓人有種迫不及待動手的感覺!
經過上面的過程,我們已經完成了一個 Arduino 的 Client 端,它會定時 (每兩秒) 透過 topic,傳送一個溫濕度資料的 JSON 字串給 Broker。
以下是我的完成圖:
下個章節,我們要製作一個 iOS 應用程式,用來顯示即時的溫濕度資料。
如果您覺得這篇文章還不錯或有幫助請幫我按個一兩下[拍手👏]給我點鼓勵吧!另外,您對文章內容有任何問題或發現錯誤,請不吝指正,強烈歡迎留言討論💬!
系列文章連結:
iOSxIoT(1) — Overview
iOSxIoT(2) — MQTT簡介
iOSxIoT(3) — 建立雲端Server
iOSxIoT(4) — 建立MQTT Broker
iOSxIoT(5) — Arduino Uno+ESP8266+DHT-22
iOSxIoT(6) — iOS溫濕度顯示器&總結