《ESP32 入門》NodeMCU-32S 繼電器(Relay)控制直流馬達
用ESP32搭配繼電器模組,控制電池盒供電的直流馬達。教學涵蓋繼電器原理、接線方式、程式碼與 GPIO 選擇注意事項,適合初學者入門自動化控制。
ESP32 的 GPIO 只能輸出 3.3V或5V 的低電流訊號,沒辦法直接驅動馬達、電燈這類需要較大電流的設備。這時候就需要繼電器(Relay)來幫忙了。繼電器就像一個由程式控制的開關,我們可以用 ESP32 送出訊號來切換通電或斷電,如果你想做智慧家電或自動化控制,一定少不了它!
本篇會用 NodeMCU-32S 搭配常見的 1 路繼電器模組,控制一顆由電池盒供電的直流小馬達,讓它轉 3 秒、停 2 秒,不斷循環。
認識繼電器模組
本範例以常見的 1 路繼電器模組為主進行說明,市面上還有 2 路、4 路、8 路的繼電器模組,不過控制方式基本是一樣的。
繼電器上面會印有容許的電壓和電流,例如 10A 125V AC 或 10A 28V DC,使用前一定要確認你接的負載在規格範圍內。
繼電器模組通常分成兩邊,各有接腳:

控制端(PIN 腳那側)
跟 ESP32 溝通用的,通常有 3 個接腳:
- VCC(或 +):接 ESP32 的電源。注意! 大部分繼電器模組標示 VCC 為 5V,但 NodeMCU-32S 的 VIN 腳在 USB 供電時可以輸出 5V,所以我們把 VCC 接到 VIN。如果你的模組支援 3.3V,也可以接 3V3 腳,但請先確認模組規格。
- GND(或 -):接 ESP32 的 GND。
- IN(或 SIG):訊號線,透過這個腳位來控制繼電器的開或關。
負載端(螺絲端子那側)
用來接外部電源和設備:
- COM(Common):共用端,一般把外部電源的正極接到這裡。
- NO(Normal Open):常開,正常情況下不通電。當繼電器被觸發時,COM 和 NO 才會導通。
- NC(Normal Close):常閉,正常情況下是通電的。當繼電器被觸發時,COM 和 NC 反而斷開。
NO 和 NC 一次只會接一個,看你的需求決定接哪一個。
我們這次要控制的馬達,平常不需要轉動,只有程式觸發時才轉,所以接 NO 是最合適的。
高電平 vs 低電平觸發
繼電器模組的背面通常會標示「高電平觸發」或「低電平觸發」,有些模組可以用 Jumper 切換。高電平觸發就是訊號給 HIGH 時繼電器導通;低電平則是給 LOW 時導通。
本範例以高電平觸發的繼電器模組進行示範。
💡 小提醒:有些ESP32 的 GPIO 輸出為 3.3V,大部分 5V 繼電器模組的光耦合器仍然可以被 3.3V 觸發,但少數模組可能不行。如果你發現控制不了,可以將 VCC 接到 VIN(5V),或選購標示支援 3.3V 的繼電器模組。
準備材料
| 材料 | 數量 |
|---|---|
| NodeMCU-32S 開發板 | 1 |
| 1 路繼電器模組(5V,高電平觸發) | 1 |
| 直流小馬達(3V~6V) | 1 |
| 電池盒(2 顆 AA,共 3V) | 1 |
| AA 電池 | 2 |
| 杜邦線 / 麵包板跳線 | 若干 |
| 麵包板 | 1(選用) |




接線方式
控制端接線(繼電器模組 ↔ ESP32)
| 繼電器模組 | NodeMCU-32S |
|---|---|
| VCC(+) | VIN(5V) |
| GND(-) | GND |
| IN | GPIO 16 |
負載端接線(繼電器模組 ↔ 馬達 ↔ 電池盒)
| 接腳 | 接線說明 |
|---|---|
| COM | 接電池盒的 正極(紅線) |
| NO | 接馬達的 正極 |
| 馬達負極 | 接回電池盒的 負極(黑線) |
整個迴路的電流走向是:電池盒正極 → COM → NO → 馬達正極 → 馬達負極 → 電池盒負極。當繼電器未觸發時,COM 和 NO 之間是斷開的,馬達不會轉;觸發後 COM 和 NO 導通,電流通過,馬達就轉起來了。

⚠️ 注意:馬達的電源來自電池盒,不是 ESP32。ESP32 只負責送出訊號控制繼電器的開和關,馬達的驅動電流完全由電池盒提供。這也是繼電器的核心概念:用低功率的訊號去控制高功率的電路。
程式碼
我們透過 GPIO 16 來控制繼電器,程式非常簡單。digitalWrite(16, HIGH) 觸發繼電器讓馬達轉動,digitalWrite(16, LOW) 則讓馬達停下來。
const int relayPin = 16; // 繼電器訊號線接 GPIO 16
void setup() {
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // 預設不觸發
}
void loop() {
digitalWrite(relayPin, HIGH); // 觸發繼電器,馬達轉動
delay(3000); // 轉 3 秒
digitalWrite(relayPin, LOW); // 關閉繼電器,馬達停止
delay(2000); // 停 2 秒
}
上傳程式後,你應該會聽到繼電器「喀」一聲,馬達開始轉動 3 秒,接著繼電器再「喀」一聲斷開,馬達停止 2 秒,如此不斷循環。
ESP32 GPIO 使用注意事項
ESP32 不是每個 GPIO 都適合拿來當輸出使用,以下幾個腳位要避開:
- GPIO 0、2、12、15:這些是 Strapping Pins,開機時的電平會影響 ESP32 的啟動模式,拿來接繼電器可能導致上傳程式失敗或開機異常。
- GPIO 6~11:連接內部 SPI Flash,不能使用。
- GPIO 34、35、36、39:這四個腳位是純輸入(Input Only),不能輸出訊號。
本範例使用的 GPIO 16 是安全的通用腳位,可以放心使用。
常見問題
Q:繼電器沒反應? 先確認 VCC 是否接到 VIN(5V),有些繼電器模組在 3.3V 下電壓不夠,無法正常驅動。也要確認你的繼電器是高電平還是低電平觸發,如果是低電平觸發,程式要反過來,用 LOW 啟動、HIGH 關閉。
Q:馬達不轉但繼電器有喀喀聲? 繼電器有動作代表控制端沒問題,請檢查負載端的接線。確認電池有電、正負極沒接反、COM 和 NO 的線有接牢。
Q:可以直接用 ESP32 的 GPIO 驅動馬達嗎? 不建議。ESP32 的 GPIO 最大輸出電流約 40mA(建議不超過 20mA),而小馬達啟動時的電流通常遠超過這個值,直接接可能會損壞 ESP32。透過繼電器或馬達驅動模組來控制才是正確做法。
Q:可以用這個方式控制 110V 的家電嗎? 繼電器的規格如果有支援 AC 110V/220V 是可以的,但市電操作有觸電危險。如果你是初學者,強烈建議先從低壓直流電開始練習,等熟悉後再進階到交流電,而且操作交流電時請務必確保所有接線正確,並在斷電狀態下接線。
總結
這篇我們學會了用 ESP32 NodeMCU-32S 搭配繼電器模組來控制外部的直流馬達。核心觀念就是:ESP32 負責送出控制訊號,繼電器負責切換外部電路的通斷,馬達的電力來自獨立的電池盒。掌握了這個概念,你就可以延伸控制各種設備,像是水泵、電磁閥、LED 燈條等等,玩法非常多!



