Table of Contents
Toggle前言
想要在家裡打造一個迷你智慧溫室嗎?不用昂貴設備,只要 ESP32、光敏電阻與 DHT11,就能快速實現光照與溫濕度監測。本篇教學將一步步帶你完成硬體接線、程式撰寫到資料監控,輕鬆入門物聯網(IoT)園藝。
所需材料清單
ESP32 開發板
ESP32 是一款功能強大的微控制器,內建 Wi-Fi 與藍牙,非常適合 IoT 應用。
光敏電阻(LDR)
可測量光照強度,用於判斷植物是否得到足夠光線。
DHT11 溫濕度感測器
一顆經濟實惠、安裝簡單的感測器,用於偵測環境溫度與濕度。
其他元件與工具
麵包板、杜邦線、電阻(10kΩ)、USB 連接線與電腦。
優良店家推薦:
電路設計與連接
光敏電阻與 ESP32 接線圖
將光敏電阻一端連接至 3.3V,另一端經過 10kΩ 電阻後連到 GND,中間引腳接到 ESP32 的類比輸入腳(如 GPIO36)。
DHT11 與 ESP32 接線圖
- VCC → 3.3V
- GND → GND
- DATA → GPIO 16(可自行定義)
電源與安全注意事項
確保使用穩定電源,避免短路,可先在麵包板測試再焊接。
光阻電阻模組接線說明:
VCC:電源3.3V
GND:接地
A0(類比接腳):接到程式設定腳位(我的Pin腳是#36)
D0(數位接腳):選用A0接腳,就不用接


Arduino IDE 環境設定
光敏電阻程式碼撰寫與解析
const int Light = 36; //光敏電阻腳位36,變數為"Light"
const int LED = 2; //LED燈內建腳位2,變數為"LED"
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT); //設定LED作為輸出
pinMode(Light, INPUT); //Light作為輸入
}
void loop() {
int LightValue; //宣告整數變數"LightValue"
LightValue = analogRead(Light); //讀取Light的數值放在LightValue
Serial.println(LightValue); //LightValue顯示在序列視窗
if (LightValue < 600) { //如果LightValue值小於600時,LED就開啟,否則LED是關閉的
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
delay(100); //每0.1秒感測一次
}
程式說明
- LED:接燈光或繼電器控制腳位,例如 GPIO 2。
- LightValue:設定光照值,低於此值600即自動開燈。
光敏電阻+DHT11+OLED程式碼與解析
DHT11 + OLED段程式,可以參考之前教學"從零開始學 ESP-NOW(第二章):用 DHT11 傳輸溫濕度資料到接收端"
const int Light = 36; //光敏電阻腳位36,變數為"Light"
const int LED = 2; //LED燈內建腳位2,變數為"LED"
#include
#include "Wire.h"
#include "U8g2lib.h" //OLED 螢幕解析度為128*64
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
const int pinDHT11 = 16;
SimpleDHT11 dht11(pinDHT11);
void setup() {
Serial.begin(115200);
pinMode(LED, OUTPUT); //設定LED作為輸出
pinMode(Light, INPUT); //Light作為輸入
u8g2.begin(); //初始化
u8g2.enableUTF8Print(); //啟用 UTF8字集
u8g2.setFont(u8g2_font_unifont_t_chinese1); //設定使用中文字形
u8g2.setDrawColor(1); //設定顏色,我們是單色只有1
u8g2.setFontPosTop(); //座標從上開始
u8g2.setFontDirection(0); //0不旋轉、1->90、2->180、3->270
pinMode(32, OUTPUT);
}
void loop() {
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err=");
Serial.print(SimpleDHTErrCode(err));
Serial.print(",");
Serial.println(SimpleDHTErrDuration(err));
delay(1000);
return;
}
int LightValue; //宣告整數變數"LightValue"
LightValue = analogRead(Light); //讀取Light的數值放在LightValue
Serial.println(LightValue); //LightValue顯示在序列視窗
if (LightValue < 600) { //如果LightValue值小於600時,LED就開啟,否則LED是關閉的
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
u8g2.clearBuffer(); //顯示前清除螢幕
u8g2.setCursor(0, 5); //移動游標
u8g2.print("溫度:");
u8g2.print((int)temperature + String("*C"));
u8g2.setCursor(0, 25); //移動游標
u8g2.print("濕度:");
u8g2.print((int)humidity + String("%")); //寫入文字
u8g2.setCursor(0, 45); //移動游標
u8g2.print("亮度:"); //寫入文字
u8g2.print(LightValue); //寫入文字
u8g2.sendBuffer(); //送到螢幕顯示
delay(100); //每0.1秒感測一次
}
測試與調校
光照敏感度調整
可透過更換電阻或在程式中設閾值,讓感測更準確。
溫濕度校正方法
與一般溫濕度計比對,多次取樣平均值,校正誤差。
測試影片
在OLED中顯示亮度光敏電阻感測值,當它小於600時,ESP32內建的LED燈就亮啟
實際應用範例
自動控制溫室風扇或燈光
設定臨界值,光照不足時自動開燈;溫度過高時開啟風扇。
整合自動灑水系統
搭配土壤濕度感測器與繼電器,就能實現全自動灑水。
常見問題與排除
- ESP32 無法上傳程式:檢查驅動與開發板設定。
- 感測器數值不穩定:確認接線牢固、使用穩定電源。
- 溫濕度顯示錯誤:重新安裝函式庫或更換感測器測試。
結論
透過 ESP32、光敏電阻與 DHT11,就能打造一個簡單卻實用的智慧溫室監測系統。不僅能即時了解植物環境,更能擴充自動化控制,讓園藝升級為 IoT 智慧農業。
常見問答(FAQs)
Q1:ESP32 可以用 5V 供電嗎?
A1:可以用 USB 5V 供電,但感測器多為 3.3V,注意電壓匹配。
Q2:DHT11 與 DHT22 有何差別?
A2:DHT22 量測範圍與精度更高,但價格稍貴。
Q3:光敏電阻能直接讀取 Lux 值嗎?
A3:不行,需要經過換算或校正才能近似 Lux。
Q4:資料能否儲存在雲端?
A4:可以使用 Google Sheets、Blynk 或自建伺服器。
Q5:系統能否離線使用?
A5:當然可以,數據仍會顯示在序列埠或本地網頁。
