iOS x IoT ( 5 ) — Arduino Uno + ESP8266 + DHT-22

Arduino R3 picture from https://www.arduino.cc/
本系列文旨在實驗一個用iOS App接收資料的微型物聯網(IoT)架構。

這個章節的目的,是要利用 Arduino 建立一個簡易的溫溼度感測電路

開始之前,先花幾分鐘的時間認識一下 Arduino,可以參考 LazyTomato Lab 這支生動活潑的影片:

LazyTomato — Arduino 到底是什麼?

Arduino 有了基本了解後,就正式開始吧!

📕 硬體元件簡介

本專案使用到的硬體元件如下列表:

硬體元件列表
Arduino picture from Here!

📍 Arduino Uno R3 :

最常被使用的 Arduino 開發板,可以透過 USB 連接埠與電腦連接,進行電力供應程式燒錄

板子本身可以接上各種電子裝置,如 LEDLCD、馬達、開關、WiFiBluetoothRFID 等一大堆模組,配合撰寫程式,就能做出各式各樣的應用。

DHT-22 & DHT-11 picture from Here! by Umang Gajera

📍 DHT-22 溫濕度模組:

白色DHT-22藍色DHT-11準確度以及可量測範圍DHT-22 > DHT-11,但取樣速率是 DHT-11 (每秒一次) > DHT-22 (兩秒一次)。

DHT-22 含黑色背板

模組在使用時,必須在 VCCDATA 間串連一個 4.7kΩ 的電阻,方能於 DATA 腳位得到正確的數值,但是,像左圖這種有背板的,則不需要額外串連電阻。

ESP8266 (ESP-01) 使用 fritzing 繪製

📍 ESP8266 (ESP-01) 模組:

WiFi 模組系列 ESP-01 ~ ESP-12,其中 ESP-01 是最基本的,電流只能接 3.3 V,千萬不能直接連接 5V,會燒毀!

可以設定成基地台模式 ( AP ) 或直接連接無線網路 ( P2P )。

麵包板杜邦線、還有麵包線都是額外連接電路使用的,需自行斟酌要用多少、如何接線。

📗 電路接線圖

本專案製作的電路接線圖繪製如下:

電路接線圖 - 使用 fritzing 繪製

🔌 ESP8266 ( ESP-01 ):

  • UTXD 接到 Arduino 3 號腳位。
  • URXD 接到 Arduino4 號腳位。
  • CH_PDVCC 分別接到 Arduino3.3V
  • GNDArduinoGND

🔌 DHT-22:

  • VCC 接到 Arduino5V
  • DATA 接到 Arduino5 號腳位。
  • GNDArduinoGND
  • 如果採用沒有背板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,示意如下紅框部分。

外部 IP 位址

在第 119 行client.publish(topic,message) 的意思是:溫濕度 message 會被 publishBroker topic ,而 topic 第 13 行Arduino/DHT22

程式上傳到 Arduino 後,在 IDE 右上角-序列埠監控視窗可看到 payload,傳輸速率記得設定為 9600 baud

序列埠監控視窗

程式中並沒有設定傳送的 MQTT 訊息品質,原因是 PubSubClient 只能發布QoS 0 的訊息,詳細:PubSubClient document

📝 小結

Arduino 的東西太多太多,在這之前我完全沒碰過,所以我的電路與程式多半是參考下面這本書設計修正的:

對有點程式背景的初學者來說應該不算太難,而且內容全彩,接線的時候非常的有幫助!

除了書籍以外,軟爛番茄工作室 LazyTomato Lab 的影片有助於初期的知識建立,而且影片生動活潑,讓人有種迫不及待動手的感覺!

LazyTomato Lab Youtube 頻道主頁

經過上面的過程,我們已經完成了一個 ArduinoClient 端,它會定時 (每兩秒) 透過 topic,傳送一個溫濕度資料JSON 字串給 Broker。

以下是我的完成圖:

Arduino Uno + ESP8266 + DHT-22

下個章節,我們要製作一個 iOS 應用程式,用來顯示即時的溫濕度資料。

如果您覺得這篇文章還不錯或有幫助請幫我按個一兩下[拍手👏]給我點鼓勵吧!另外,您對文章內容有任何問題或發現錯誤,請不吝指正,強烈歡迎留言討論💬!

--

--

Syashin Chen
彼得潘的 Swift iOS / Flutter App 開發教室

轉行滿兩年的小RD,喜歡做簡單有趣的東西,常常不小心複雜化。