DIY 智慧溫室教學:用 ESP32 + 光敏電阻 + DHT11 監測光照與溫濕度

想要在家裡打造一個迷你智慧溫室嗎?不用昂貴設備,只要 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接腳,就不用接

Light Sensor Picture
Light Sensor

Arduino IDE 環境設定

安裝 DHT11 函式庫

在「工具」→「管理程式庫」搜尋並安裝「SimpleDHT.h」。

可參考之前文章,介紹”下載安裝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程式碼與解析

				
					const int Light = 36;  //光敏電阻腳位36,變數為"Light"
const int LED = 2;     //LED燈內建腳位2,變數為"LED"

#include <SimpleDHT.h>
#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:當然可以,數據仍會顯示在序列埠或本地網頁。

參考資料

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端