ESP32 智能家居控制系統:從零開始的完整指南
簡介
在這篇教學中,我將帶領您使用 ESP32 開發板,建立一個簡單的智能家居控制系統。本專案允許您透過 Wi-Fi 連接,使用手機或電腦來控制 LED 燈(或其他家電設備),並透過按鈕進行手動切換。這是一個適合初學者的專案,讓您可以學習如何使用 ESP32 控制網路設備。
1. 準備材料
在開始前,請準備以下元件:
- ESP32 開發板
- 4 個 LED(或繼電器模組,用於控制家電)
- 4 個 220 歐姆電阻(保護 LED)
- 4 個按鈕開關
- 麵包板與杜邦線
如果要控制高壓設備,例如電燈或風扇,請使用 繼電器模組 來避免直接接觸高壓電源。
2. 電路連接
LED 與按鈕的連接
-
LED 燈:
- LED 的 正極(長腳) 連接至 ESP32 的 GPIO(16、17、18、19)。
- LED 的 負極(短腳) 透過 220 歐姆電阻 連接至 GND。
-
按鈕開關:
- 一端連接至 GND。
- 另一端連接至 ESP32 的 GPIO(12、14、26、27)。
如果您改用 繼電器模組,請將繼電器的 信號輸入 連接至上述 LED 所使用的 GPIO。
3. 軟體設置
安裝 Arduino IDE 與函式庫
請確保您的 Arduino IDE 已支援 ESP32 開發環境,並安裝以下函式庫:
WiFi.h
(ESP32 內建)ESPAsyncWebServer
(建立非同步網頁伺服器)AsyncTCP
(ESPAsyncWebServer 依賴函式庫)
您可以從 GitHub 下載 ESPAsyncWebServer
和 AsyncTCP
,並在 Arduino IDE 手動安裝 ZIP 函式庫。
4. 程式碼實作
連接 Wi-Fi
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "您的SSID";
const char* password = "您的密碼";
AsyncWebServer server(80);
定義 LED 與按鈕的 GPIO
const int ledPins[] = {16, 17, 18, 19};
const int buttonPins[] = {12, 14, 26, 27};
bool ledStates[] = {false, false, false, false};
設置 GPIO 與啟動伺服器
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("正在連接 Wi-Fi...");
}
Serial.println("Wi-Fi 連接成功");
Serial.println(WiFi.localIP());
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLUP);
}
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
String html = "<html><body><h1>ESP32 智能家居</h1>";
for (int i = 0; i < 4; i++) {
html += "<p>LED " + String(i+1) + ": ";
html += "<a href='/toggle?led=" + String(i) + "'>";
html += (ledStates[i] ? "關閉" : "開啟") + String("</a></p>");
}
html += "<p><a href='/off'>關閉所有設備</a></p></body></html>";
request->send(200, "text/html", html);
});
server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
if (request->hasParam("led")) {
int led = request->getParam("led")->value().toInt();
if (led >= 0 && led < 4) {
ledStates[led] = !ledStates[led];
digitalWrite(ledPins[led], ledStates[led] ? HIGH : LOW);
}
}
request->redirect("/");
});
server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){
for (int i = 0; i < 4; i++) {
ledStates[i] = false;
digitalWrite(ledPins[i], LOW);
}
request->redirect("/");
});
server.begin();
}
檢查按鈕輸入
void loop() {
for (int i = 0; i < 4; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
delay(50); // 消抖
ledStates[i] = !ledStates[i];
digitalWrite(ledPins[i], ledStates[i] ? HIGH : LOW);
while (digitalRead(buttonPins[i]) == LOW); // 等待按鈕鬆開
}
}
}
5. 上傳與測試
- 連接 ESP32 至電腦,並在 Arduino IDE 中選擇 NodeMCU-32S。
- 修改
ssid
和password
為您的 Wi-Fi 網路。 - 點擊 上傳 按鈕,將程式碼燒錄至 ESP32。
- 開啟 序列監視器(115200 波特率),找到 ESP32 IP 位址。
- 在瀏覽器輸入 IP,您將看到控制介面。
- 點擊按鈕測試 LED 控制功能。
- 按下實體按鈕,檢查 LED 是否正確切換。
6. 結論
恭喜!您已成功建立一個 ESP32 智能家居控制系統,可透過 Wi-Fi 或實體按鈕 操控設備。此專案可進一步擴展,例如:
- 使用繼電器模組 控制家電設備。
- 加入溫溼度感測器 來自動調節環境。
- 整合 MQTT,讓系統能透過雲端控制。
歡迎留言討論,讓我們一起打造更聰明的家!
沒有留言:
張貼留言