在物聯網(IoT)與智慧環境監測的應用中,溫濕度數據是最常被收集的環境資訊之一。而使用 Arduino UNO 搭配 DHT11 溫濕度感測器 和 128×64 OLED 顯示器,可以輕鬆打造一個即時顯示溫濕度的迷你氣象站。本教學將帶你一步步完成這個專案,無論你是 Arduino 新手還是有基礎經驗的開發者,都能順利實作。
在本篇文章中,我們將介紹 DHT11 感測器與 OLED 顯示器的基本原理,並透過 Arduino 程式碼讀取溫濕度數據,並顯示在 OLED 螢幕上。此外,我們還會教你如何安裝相關的函式庫,確保設備能夠順利運作。這個專案不僅能幫助你熟悉 Arduino 的感測與顯示應用,還可以作為進一步開發 智慧家庭、氣象站或環境監測系統 的基礎。
現在,讓我們開始這個有趣的 DIY 專案,透過 Arduino UNO 來實現溫濕度的即時監測吧!
Table of Contents
Toggle實驗所需材料與工具
- Arduino UNO x 1
- DHT11 x 1
- 128 x 64 OLED x 1
- 麵包板 x 1
- 公公杜邦線 x 數條
- 公母杜邦線 x 數條
推薦優良店家(UCI電子):https://s.shopee.tw/3VWLkrBsZs
DHT11模組連結:https://s.shopee.tw/706DvOrjxE
128×64 OLED連結:https://s.shopee.tw/7fLuihvQqT

DHT11 溫濕度感測器與 OLED 顯示器介紹
- DHT11 溫濕度感測器
DHT11 是一款常見的數位溫濕度感測器,適用於各種環境監測應用。它內建溫度與濕度感測單元,並透過單線數據通訊(Single-Wire Protocol)將測量結果傳輸至 Arduino。
DHT11 主要特點:- 測量範圍:
- 溫度:0°C ~ 50°C(±2°C)
- 濕度:20% ~ 90% RH(±5% RH)
- 工作電壓:3.3V ~ 5V
- 通訊方式:單線數據傳輸,適合與 Arduino 連接
- 更新頻率:約 1 秒回傳一次數據
- 測量範圍:
DHT11 的價格便宜且使用簡單,因此廣泛應用於 DIY 專案,如智慧家庭、環境監測與氣象站等。
- 128×64 OLED 顯示器
OLED(Organic Light-Emitting Diode)顯示器是一種自發光螢幕,具有高對比度與低功耗的特性。128×64 像素的 OLED 顯示器使用 I2C 或 SPI 通訊,可與 Arduino 進行輕量級的資料傳輸,適合顯示文字、圖形和即時數據。
OLED 顯示器的優勢:- 解析度高(128×64 像素),適合顯示數據與圖形
- 視角廣、對比度高,在低光環境下仍清晰可見
- 低功耗,適合電池供電的物聯網專案
I2C 介面,簡化接線,減少 Arduino 的 GPIO 佔用本專案將使用 I2C 版本的 128×64 OLED,搭配 DHT11,透過 Arduino UNO 讀取環境溫濕度數據並即時顯示在螢幕上。接下來,我們將進一步說明如何接線並撰寫程式來讀取與顯示數據!
接線方式:Arduino UNO 連接 DHT11 和 128x64 OLED

安裝 Arduino 所需函式庫(DHT & Adafruit SSD1306)
安裝DHT函式庫
步驟 1:打開函式庫管理員
1. 在 Arduino IDE 內,點擊左方選單”函式庫管理員”介面後,會看到許多可用的 Arduino 函式庫。
步驟 2:搜尋並安裝 Simpledht 函式庫
1. 在右上角的搜尋框輸入 “Simpledht”。
2. 找到 “Simple DHT”,這是由 Winlin提供的函式庫,支援 DHT11、DHT22 等感測器。
3. 點擊 「安裝」(Install),等待安裝完成。
步驟 3:確認函式庫安裝成功
安裝完成後,點擊 「範例」(File > Examples),應該可以看到 Simple DHT相關的範例程式碼。如果可以開啟並編譯,代表函式庫已經安裝成功!


安裝SSD1306函式庫
步驟 1:打開函式庫管理員
1. 在 Arduino IDE 內,點擊左方選單”函式庫管理員”介面後,會看到許多可用的 Arduino 函式庫。
步驟 2:搜尋並安裝SSD1306函式庫
1. 在右上角的搜尋框輸入 “SSD1306”。
2. 找到 “SSD1306”,這是由 Adafruit官方提供的函式庫。
3. 點擊 「安裝」(Install),等待安裝完成。
步驟 3:確認函式庫安裝成功
安裝完成後,點擊 「範例」(File > Examples),應該可以看到 SSD1306相關的範例程式碼。如果可以開啟並編譯,代表函式庫已經安裝成功!

安裝U8glib字型
步驟 1:打開函式庫管理員
- 在 Arduino IDE 內,點擊左方選單”函式庫管理員”介面後,會看到許多可用的 Arduino 函式庫。
步驟 2:搜尋並安裝 U8glib 函式庫
- 在右上角的搜尋框輸入 “U8glib”。
- 找到 “U8glib”,這是由 oliver 提供的函式庫。
- 點擊 「安裝」(Install),等待安裝完成。
步驟 3:確認函式庫安裝成功
安裝完成後,點擊 「範例」(File > Examples),應該可以看到 U8glib相關的範例程式碼。如果可以開啟並編譯,代表函式庫已經安裝成功!

撰寫 Arduino 程式:讀取 DHT11 數據並在 OLED 顯示
//使用 U8glib
#include "U8glib.h"
#include
//OLED 初使化設定
//目前OLED常用驅動晶片有 SSD1306 或 SH1106
//SSD1306
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
//SH1106
// U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
int pinDHT11 = 7;
SimpleDHT11 dht11(pinDHT11);
byte temperature = 0;
byte humidity = 0;
void setup(void) {
//設定字型
u8g.setFont(u8g_font_unifont);
}
void loop(void) {
//顯示
u8g.firstPage(); //開始更新顯示內容
do {
draw();
} while (u8g.nextPage()); //完成更新顯示內容
delay(50);
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
return;
}
}
void draw(void) {
//輸出字串(x座標,y座標,文字)
u8g.drawStr(0, 30, "Temture:");
u8g.setPrintPos(75, 30);
u8g.print(temperature);
u8g.drawStr(92, 30, "C");
//輸出字串(x座標,y座標,文字)
u8g.drawStr(0, 50, "Humidity:");
u8g.setPrintPos(75, 50);
u8g.print(humidity);
u8g.drawStr(92, 50, "%");
}

在 SimpleDHT 範例程式中,我們將 SSD1306 和 U8glib 函式庫整合,讓 DHT11 讀取的溫濕度數據顯示在 OLED 上。
在程式的 第 40 行,u8g.drawStr(x座標, y座標, 文字); 用於設定文字在 OLED 螢幕上的顯示位置。第 41 行 則負責顯示 DHT11 讀取的溫度與濕度數據。
為了讓其他函數能夠存取這些數據,需將變數 byte temperature = 0; 和 byte humidity = 0; 移至 loop 外部,使其成為全域變數,確保程式的可讀性與模組化,讓不同函數都能使用這些數據。
上傳程式並測試結果
程式上傳至 Arduino UNO 後,系統開始讀取 DHT11 感測器的溫濕度數據,並即時在 128×64 OLED 顯示器上顯示。經過多次測試,以下是觀察到的結果:
- OLED 正常顯示
當程式運行後,OLED 顯示器成功點亮,並在設定的位置顯示「溫度」與「濕度」的標籤,接著數據開始更新,確保 DHT11 正常運作。 - DHT11 數據回應穩定
室溫條件下,DHT11 感測器測得的溫度約為 25°C ~ 28°C,濕度約為 50% ~ 60% RH,數值變化符合環境變動。
感測間隔約為 1 秒更新一次,與官方規格相符。 - 數據更新流暢
OLED 顯示的溫濕度數據每秒更新一次,畫面穩定無閃爍,說明 U8glib 函式庫與 DHT11 讀取機制相容良好,數據能即時刷新。
結論
透過本篇教學,我們成功使用 Arduino UNO 搭配 DHT11 溫濕度感測器 和 128×64 OLED 顯示器,實現了一個能即時顯示環境數據的簡易氣象站。從硬體接線、函式庫安裝、程式撰寫到實際測試,每個步驟都確保數據能穩定讀取並準確顯示在 OLED 上。
本專案不僅幫助初學者熟悉 Arduino 感測器應用,也提供了一個良好的基礎,讓進階使用者能進一步擴充功能。例如,可以加入 數據記錄與歷史曲線顯示,或搭配 Wi-Fi 模組(如 ESP8266)將數據傳送到雲端,打造更完整的物聯網應用。
此外,若想提升專案的實用性,可以考慮使用 DHT22 感測器 來獲取更精確的溫濕度數據,或改用 更大尺寸的 OLED 顯示器 來呈現更多資訊。這些改進都能讓專案更加多元,適用於智慧家庭、農業環境監測或教學應用。
希望這篇文章能幫助你順利完成專案,並激發你更多創意!如果你有任何問題或改進想法,歡迎在留言區討論,共同交流學習!
參考資料:
Arduino UNO官網I2C資料:https://docs.arduino.cc/learn/communication/wire/
BLOCK 網誌:https://www.block.tw/blog/oled/