市售智慧插座功能有限、又常常綁定特定App,自己動手做一顆的好處是完全客製化——想加什麼自動化邏輯都可以自己寫,材料成本也比買品牌智慧插座便宜。
整體架構
核心概念很單純:ESP32連上家裡WiFi,透過網頁介面或MQTT協定接收開關指令,指令觸發繼電器通斷家電的電源。繼電器負責的是「電氣隔離」跟「大電流開關」——ESP32的GPIO輸出電流很小,沒辦法直接開關家電這種大電流負載,一定要透過繼電器做中介。
安全性提醒(這段真的要看)
- 繼電器輸出那一側如果要接市電家電,配線施工建議參考前面AC-DC隔離電源那篇文章提到的安全原則,市電配線務必做好絕緣與固定
- 整個裝置的低壓控制部分(ESP32本身)建議用隔離式AC-DC電源模組單獨供電,不要土法煉鋼直接分接家電線路
- 第一次組裝完成,先用低功率的家電(檯燈之類)測試整套流程是否正常運作,確認邏輯無誤之後再考慮應用到其他大功率家電上
軟體端可以怎麼玩
如果想跟Home Assistant或類似的智慧家居平台整合,ESP32搭配ESPHome這套開源韌體是目前社群最推薦的做法,設定檔用YAML寫好腳位對應,幾乎不用自己刻通訊協定,韌體會自動把裝置以標準格式曝露給智慧家居平台辨識,對新手來說是目前最省力的整合路徑。
材料清單(BOM)
| 品項 | 數量 | 備註 |
|---|---|---|
| ESP32 開發板 | 1 | 本篇教學使用的開發板 |
| 一路5V繼電器模組 | 1 | |
| AC-DC隔離開關電源(5V) | 1 | 供電ESP32與繼電器的低壓控制部分 |
| 插座/電源線材 | 依需求 | 自備,務必注意市電安全 |
腳位接線對照表
| 開發板腳位 | 模組腳位 | 說明 |
|---|---|---|
| GPIO26 | 繼電器 IN | 繼電器觸發訊號 |
| 5V | 繼電器 VCC | 繼電器供電 |
| GND | 繼電器 GND | 共地 |
繼電器COM/NO/NC端子接家電電源迴路,務必先斷電再配線,不熟悉市電配線請找專業電工協助。
📷 〔照片預留位:請在這裡插入實際接線/組裝照片〕
完整程式碼
// ESP32 WiFi智慧插座(簡易網頁介面版本)
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "你的WiFi名稱";
const char* password = "你的WiFi密碼";
const int RELAY_PIN = 26;
WebServer server(80);
void handleRoot() {
String html = "<h1>智慧插座控制</h1>";
html += "<a href=\"/on\">開啟</a> | <a href=\"/off\">關閉</a>";
server.send(200, "text/html", html);
}
void handleOn() {
digitalWrite(RELAY_PIN, HIGH);
server.send(200, "text/plain", "已開啟");
}
void handleOff() {
digitalWrite(RELAY_PIN, LOW);
server.send(200, "text/plain", "已關閉");
}
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // 開機預設關閉,先確保安全狀態
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP()); // 記下這組IP,瀏覽器輸入就能控制
server.on("/", handleRoot);
server.on("/on", handleOn);
server.on("/off", handleOff);
server.begin();
}
void loop() {
server.handleClient();
// 想串接Home Assistant的話,建議改用文章提到的ESPHome韌體,
// 不用自己刻通訊協定,設定檔用YAML寫好腳位對應即可
}