《ESP32 入門》NodeMCU-32S 繼電器(Relay)控制直流馬達

用ESP32搭配繼電器模組,控制電池盒供電的直流馬達。教學涵蓋繼電器原理、接線方式、程式碼與 GPIO 選擇注意事項,適合初學者入門自動化控制。

《ESP32 入門》NodeMCU-32S 繼電器(Relay)控制直流馬達

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(選用)
NodeMCU-32S 相容版本 ESP32開發板 WiFi 藍牙 可用Arduino IDE
全腳位引出,還保持迷你的身型,插上麵包後還能插杜邦線,真的是太棒了! 和NodeMCU V2幾乎一樣尺寸! 有5V供電輸出,非常方便! 有了ESP32開發板,真的可以忘記原來的那些Arduino板子了! 可以用Arduino IDE開發,但效能更強大,還內建WiFi 傑森實測記錄,大家可以到 F 粉 絲 團 B 看貼文哦! ESP32-D0WDQ6 內置兩個低功耗 Xtensa® 32-bit LX6 MCU。片上存儲包括: • 448 KB 的 ROM,用於程序啟動和內核功能
1路繼電器模組 5V
產品介紹: 1、本模組符合國際安全標准,控制區域與負載區域有隔離槽; 2、采用松樂正品繼電器; 3、具有電源和繼電器動作指示,吸合亮,斷開不亮; 4、信號輸入端有信號時,公共端與常開端會導通; 5、可以用作單片機開發板模組,可以用作家電控制; 6、控制直流或者交流信號,可以控制220V交流負載; 7、有一個常開和一個常閉觸點; 8、藍色KF301端子接控制線更方便。 關於高電平與低電平觸發方式的說明,不明白的朋友請看一下: 高電平觸發指的是信號輸入端與地之間有電壓的觸發方式,可以理解為信號輸入
已焊杜邦線 公頭 減速馬達 3-7.2V TT 智慧小車 黃色馬達 Arduino
本賣場為已焊線款式,使用更方便! 3-7.2V綜合性TT馬達,大扭力抗干擾強磁電機,齒輪減速機構,適用于各種模型車改造,更加適用于機器人製作。 【尺寸】:70*22*18.5mm(不含出軸,單邊出軸:9mm) 【電壓】:3-7.2V寬電壓 【減速比】:1:48 【出軸類型】:扁軸(扁軸中心有個1.9mm的孔,可以插緊2mm的車軸,也可以擰入M2.3的螺絲) 【電流參數】: 3v電壓時,電流170ma,轉速約115轉/分鐘,扭力約0.7KGf.cm 6v電壓時,電流230ma,轉速約255轉/分
2節3號電池 電池盒 有蓋子 內建開關
本賣場為2節電池盒 透明電池盒 內建開關 電線已接好 可放入3號電池

接線方式

控制端接線(繼電器模組 ↔ 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 燈條等等,玩法非常多!