ESP32 MOSFET 모듈
이 튜토리얼에서는 ESP32로 MOSFET 모듈을 사용하여 12V DC 부하를 켜고 끄고, 전력 수준을 설정하고, 그 전력 수준을 시리얼 모니터에 출력하는 방법을 알려 드립니다. 이 튜토리얼은 AOD4184, LR7843, FR120N 모듈에 똑같이 적용되며, LED 스트립과 DC 모터 또는 팬을 모두 배선하는 방법을 보여 줍니다.
준비물
| 1 | × | 38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow | 쿠팡 | 아마존 | |
| 1 | × | (또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide | 쿠팡 | 아마존 | |
| 1 | × | (또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide | 아마존 | |
| 1 | × | (또는) ESP32 Uno-form board | 아마존 | |
| 1 | × | (또는) ESP32 S3 Uno-form board | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | (옵션) DC 커넥터 전원 연결 잭 플러그 소켓 | 쿠팡 | 아마존 | |
| 1 | × | MOSFET Module (AOD4184, LR7843 or FR120N) | 아마존 | |
| 1 | × | 12V LED 스트립 | 아마존 | |
| 1 | × | (또는) 12V DC 선풍기 | 아마존 | |
| 1 | × | 12V 전원 어댑터 | 아마존 | |
| 1 | × | DC Power Jack (for the 12V load) | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) ESP32용 스크루 터미널 확장 보드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Breakout Expansion Board for ESP32 | 쿠팡 | 아마존 | |
| 1 | × | (추천) ESP32용 전원 분배기 | 쿠팡 | 아마존 |
MOSFET 모듈에 대하여
ESP32의 GPIO 핀은 3.3V와 몇 밀리암페어만 출력합니다. 작은 LED에는 충분하지만, 12V LED 스트립, DC 모터, 팬, 펌프, 솔레노이드 밸브, 히터에는 턱없이 부족합니다. MOSFET 모듈은 둘 사이에서 전자 스위치 역할을 합니다. ESP32는 약한 신호를 보내고, 모듈은 부하에 흐르는 강한 전류를 통과시킵니다.
시중에는 이 모듈이 세 가지 버전으로 나와 있습니다. AOD4184(같은 칩이 D4184라는 이름으로도 팔립니다), LR7843, FR120N입니다. 보드는 세 가지 모두 같습니다. 크기, 핀, 배선, 코드가 바뀌지 않습니다. 달라지는 것은 가운데에 있는 MOSFET 칩뿐이며, 이 칩이 보드가 견딜 수 있는 전압과 전류를 정합니다.
| AOD4184 | LR7843 | FR120N | |
|---|---|---|---|
| MOSFET 칩 | AOD4184A (N채널) | IRLR7843 (N채널) | IRFR120N (N채널) |
| 최대 부하 전압(칩 정격) | 40V DC | 30V DC | 100V DC |
| 최대 전류(칩 정격) | 50A | 161A | 9.4A |
| 온 저항 RDS(on) | 약 7 mΩ | 약 3.3 mΩ | 약 210 mΩ |
| 방열판 없이 실제로 쓸 수 있는 전류 | 약 10–15A | 약 15A | 약 2A |
| 제어 신호 | 3.3V / 5V 로직, 액티브 HIGH | 3.3V / 5V 로직, 액티브 HIGH | 3.3V / 5V 로직, 액티브 HIGH |
| 절연 | PC817 포토커플러 | PC817 포토커플러 | PC817 포토커플러 |
| PWM 지원 | 예, ~1 kHz 이하로 유지 | 예, ~1 kHz 이하로 유지 | 예, ~1 kHz 이하로 유지 |
| 부하 종류 | DC 전용 | DC 전용 | DC 전용 |
하나를 고르려면 사용할 부하를 먼저 생각하세요. LR7843은 저항이 가장 낮아서 많은 전류가 흘러도 가장 시원하게 유지됩니다. 고출력 12V 또는 24V LED 스트립과 큰 모터에 쓰되, 30V를 넘기면 안 됩니다. AOD4184는 안전한 중간 선택입니다. 전류도 강하고 40V까지 견디므로 12V, 24V, 36V 부하를 모두 다룰 수 있습니다. FR120N은 100V까지 가장 높은 전압을 받아 주지만 저항이 훨씬 높습니다. 그래서 금방 뜨거워지므로 약 2A 정도의 작은 24V 또는 48V 부하에만 쓰세요.
50A나 161A라는 숫자를 너무 믿지 마세요. 이 숫자는 이 작은 보드가 아니라 칩 자체의 값입니다. 보드에서는 열이 실제 한계입니다. 부하를 몇 분 동안 동작시킨 뒤 MOSFET을 조심해서 만져 보세요. 너무 뜨거우면 방열판을 달거나 더 작은 부하를 사용하세요.
MOSFET 모듈 핀 배치

핀은 두 곳에 있습니다. 작은 2핀 헤더(2.54mm 피치)는 ESP32용이라 브레드보드에 쉽게 꽂을 수 있습니다. 나사 단자 세 개가 한 줄로 있는 곳은 부하와 그 전원 공급용입니다.
제어 헤더:
- PWM 핀: 이 핀을 ESP32의 GPIO 핀에 연결합니다(이 튜토리얼에서는 GPIO18)
- GND 핀: 이 핀을 ESP32의 GND에 연결합니다
나사 단자:
- + 핀: 이 핀을 부하 전원 공급 장치의 플러스 선(예: 12V)과 부하의 플러스 선에 연결합니다. 두 선이 이 단자 하나를 함께 씁니다
- LOAD 핀: 이 핀을 부하의 마이너스 선에 연결합니다. MOSFET이 스위칭하는 쪽입니다
- − 핀: 이 핀을 부하 전원 공급 장치의 마이너스 선(그라운드)에 연결합니다
인쇄된 표시는 제조 시기에 따라 조금씩 다를 수 있으니, 배선하기 전에 가지고 있는 보드에 적힌 글자를 확인하세요.
어떤 것을 사야 할지 모르겠다면 AOD4184 모듈을 강력히 추천합니다.
MOSFET 모듈 작동 원리
GPIO18의 신호는 MOSFET에 바로 가지 않습니다. 신호는 PWM 핀으로 들어가 작은 저항을 지나 PC817 포토커플러 안의 작은 LED를 켭니다. 그 빛이 같은 칩 안의 포토트랜지스터를 켜고, 포토트랜지스터가 MOSFET의 게이트에 전압을 줍니다. 게이트에 달린 저항은 포토커플러가 꺼질 때마다 게이트를 0V로 되돌립니다. MOSFET 자체는 LOAD 단자와 − 단자 사이에 있고, 부하는 + 와 LOAD 사이에 걸려 있습니다. 따라서 부하가 하는 일은 PWM 핀의 상태에만 달려 있으며, 가능한 상태는 세 가지입니다.
GPIO18이 0V(LOW)를 출력할 때
PWM 핀이 0V이면 포토커플러의 LED에 전류가 흐를 수 없으므로 어두운 채로 있습니다. 그래서 포토트랜지스터도 꺼진 상태를 유지하고, 게이트 저항이 MOSFET 게이트를 0V로 잡아 둡니다. MOSFET은 OFF가 되어 LOAD에서 − 로 가는 길이 열린, 마치 열린 스위치와 같은 상태가 됩니다. 부하의 마이너스 선이 어댑터로 돌아갈 길이 없으므로 전류가 흐르지 않고 부하는 0V에 머뭅니다. 이 상태는 analogWrite(MOSFET_PIN, 0) 또는 digitalWrite(MOSFET_PIN, LOW)로 만들 수 있습니다.
GPIO18이 3.3V(HIGH)를 출력할 때
ESP32는 3.3V만 주지만 그것으로 충분합니다. 포토커플러의 LED는 몇 밀리암페어만 필요하므로 GPIO 핀이 직접 구동할 수 있습니다(5V 보드도 같은 방식으로 동작합니다). LED는 눈에 보이지 않는 칩 안에서 켜지고, 포토트랜지스터가 켜집니다. 이제 MOSFET 게이트는 부하 전원의 약 절반, 12V 어댑터를 쓰면 대략 6V를 받습니다. MOSFET은 완전히 ON이 되어 아주 작은 저항을 가진 닫힌 스위치처럼 동작합니다. 저항은 AOD4184와 LR7843 보드에서는 몇 mΩ뿐이고 FR120N 보드에서는 약 0.2Ω입니다. 전류는 어댑터의 플러스에서 + 단자로 들어가 부하를 지나 LOAD 단자로 가고, MOSFET을 거쳐 − 단자로 나와 어댑터의 마이너스로 돌아갑니다. 부하는 거의 12V 전체를 받아 최대 출력으로 동작합니다. 코드에서는 analogWrite(MOSFET_PIN, 255) 또는 digitalWrite(MOSFET_PIN, HIGH)입니다.
GPIO18이 PWM 신호를 출력할 때
PWM 신호는 위의 두 상태를 아주 빠르게 반복하는 것일 뿐입니다. analogWrite()를 쓰면 GPIO18은 초당 약 1000번 LOW와 HIGH를 오가고, MOSFET은 그 변화를 그대로 따라 합니다. HIGH인 동안에는 ON, LOW인 동안에는 OFF가 됩니다. 그래서 부하는 짧은 12V 펄스를 받습니다. 핀이 HIGH로 있는 시간의 비율을 듀티 사이클이라고 하며, analogWrite()에 넘기는 값이 이를 정합니다(듀티 사이클 = 값 / 255). 부하가 받는 평균 전압과 전력은 듀티 사이클에 최대값을 곱한 것과 같습니다. 예를 들어 12V 전원에서는 다음과 같습니다.
- 10%(값 26): 시간의 10분의 1만 ON, 평균 약 1.2V, 아주 약한 빛이거나 느릿한 회전
- 50%(값 128): 시간의 절반만 ON, 평균 약 6V, 대략 절반의 전력
- 90%(값 230): 시간의 10분의 9가 ON, 평균 약 10.8V, 거의 최대 전력
LED 스트립은 이 속도에서 눈에 띄게 깜빡이지 않으므로 그저 더 어두워 보입니다. 모터, 팬, 펌프는 회전자의 질량이 펄스를 부드럽게 만들어 주기 때문에 더 느리게 돕니다. PC817은 느린 부품이므로 주파수는 500 Hz에서 1 kHz 정도로 낮게 유지하세요. 주파수가 훨씬 높으면 MOSFET이 완전히 스위칭할 시간이 없어서 부하가 깨끗한 펄스 대신 지저분한 펄스를 받고 MOSFET도 뜨거워집니다. ESP32의 analogWrite() 함수는 기본으로 이미 1 kHz를 사용하므로 바꿀 필요가 없습니다. 이 튜토리얼의 코드는 이 PWM 경우를 사용하여 전력을 10%에서 100%까지 단계적으로 올립니다.
보드에 대해 몇 가지를 더 알아 두면 문제를 피하는 데 도움이 됩니다.
- 포토커플러는 ESP32 쪽과 부하 쪽을 전기적으로 분리합니다. 신호 GND와 부하 GND는 보드에서 연결되어 있지 않으며, 서로 연결해서도 안 됩니다.
- MOSFET은 로우사이드의 N채널 타입이므로 부하의 플러스 선이 아니라 마이너스 선을 끊습니다.
- 게이트 전압은 분압기를 거쳐 부하 전원에서 얻기 때문에 그 전원의 절반 정도밖에 되지 않습니다. 따라서 부하 전원은 약 6V 이상이어야 합니다. 부하가 몇 암페어 이상 끌어 쓴다면 9V 이상을 고르세요. 5V 부하 전원은 잘 동작하지 않습니다.
- 보드에는 플라이백 다이오드가 없습니다. 모터, 펌프, 솔레노이드, 릴레이에는 보드 밖에 하나를 추가해야 합니다.
- DC 부하 전용입니다. AC 전원에는 절대 사용하지 마세요. AC 장치는 ESP32 - 릴레이을 참고하세요.
선연결
12V 전원은 모듈의 나사 단자에만 연결합니다. ESP32의 어떤 핀에도 닿지 않게 하세요.
ESP32와 MOSFET 모듈을 12V LED 스트립과 연결하는 방법

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.
| 출발 | 도착 |
|---|---|
| ESP32 GPIO18 | 모듈 PWM 핀 |
| ESP32 GND | 모듈 GND 핀 |
| 12V 어댑터 +(DC 전원 잭 경유) | 모듈 + 단자 |
| 12V 어댑터 −(DC 전원 잭 경유) | 모듈 − 단자 |
| LED 스트립 + | 모듈 + 단자(어댑터 +와 공유) |
| LED 스트립 − | 모듈 LOAD 단자 |
다른 12V 장치를 MOSFET 모듈에 연결하는 방법
LED 스트립 대신 많은 장치를 연결할 수 있습니다. ESP32의 GPIO18과 GND는 위 표와 똑같이 연결된 채로 두므로, 아래 그림은 전원 쪽만 보여 줍니다. 규칙은 늘 같습니다. 어댑터의 플러스는 +에, 어댑터의 마이너스는 −에, 장치의 플러스 선도 +에, 장치의 마이너스 선은 LOAD에 연결합니다.
장치와 전압이 같은 어댑터를 고르세요. 12V 장치에는 12V 어댑터를 씁니다. 어떤 장치든 전원은 6V보다 낮으면 안 됩니다. 장치가 끌어 쓰는 전류도 생각하세요. FR120N 보드는 방열판 없이는 약 2A 정도의 가벼운 장치만 다룰 수 있고, AOD4184와 LR7843 보드는 더 무거운 장치에 알맞습니다.
이 모든 장치에 ESP32 코드를 그대로 쓸 수 있습니다. 다만 솔레노이드 락이나 솔레노이드 밸브는 페이드 없이 최대 출력이나 0(HIGH 또는 LOW)만 보내세요.
12V DC 모터 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
모터의 플러스 선을 + 단자에, 모터의 마이너스 선을 LOAD에 연결합니다. 모터 안에는 코일이 있어서 MOSFET이 꺼질 때 이 코일이 전압 스파이크를 되돌려 보냅니다. 시간이 지나면 이 스파이크가 MOSFET을 망가뜨릴 수 있습니다. 이를 흡수하려면 1N5819나 1N4007 같은 플라이백 다이오드를 모터 선 사이에 달고, 줄무늬가 있는 쪽(캐소드)을 모터 플러스 선에, 다른 쪽(애노드)을 모터 마이너스 선에 연결하세요. 아래에 나오는 코일 장치들에도 같은 다이오드를 같은 방향으로 달아야 합니다.
PWM 듀티 사이클은 속도를 조절하지만 한 방향으로만 가능합니다. 모터를 양방향으로 돌려야 한다면 ESP32 - DC 모터에서 보듯이 L298N 같은 드라이버를 사용하세요.
12V 쿨링 팬 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
팬의 빨간 선이 플러스이며 + 단자에 연결하고, 검은 선은 LOAD에 연결합니다. 팬에 노란색 세 번째 선이 있다면 속도만 알려 주는 선이므로 연결하지 않고 두세요. 여기에도 플라이백 다이오드를 추가하세요. 값이 싸고 해가 되지 않습니다. 많은 팬은 듀티 사이클이 아주 낮으면 시작하지 않으니 30% 정도 또는 그 이상에서 시작하세요.
12V 워터 펌프 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
펌프의 플러스를 + 단자에, 펌프의 마이너스를 LOAD에 연결하고, 펌프 선 사이에 플라이백 다이오드를 달아 주세요. 듀티 사이클이 높을수록 물을 더 많이 밀어 냅니다. 펌프를 물 없이 돌리면 망가질 수 있으니 항상 물속에 잠겨 있도록 하세요.
12V 솔레노이드 밸브 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
밸브의 플러스는 + 단자에, 밸브의 마이너스는 LOAD에 연결하고, 그 사이에 플라이백 다이오드를 답니다. 상시 닫힘 밸브는 ESP32가 모듈을 완전히 ON으로 하면 열리고, OFF로 하면 다시 닫힙니다. PWM으로 조절하려고 하지 마세요. 밸브는 열리거나 닫히거나 둘 중 하나입니다.
12V 솔레노이드 락 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
락의 플러스를 + 단자에, 락의 마이너스를 LOAD에 연결하고 플라이백 다이오드를 추가합니다. 락은 완전히 ON이나 완전히 OFF로만 구동하세요. 코일이 빨리 뜨거워지므로 잠금쇠를 열 만큼 짧은 순간만 ON으로 했다가 다시 OFF로 하세요. 도어락의 전체 예제는 ESP32 - 솔레노이드 잠금장치에 있습니다.
단색 12V LED 스트립 사용하기

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
이것은 메인 배선도와 같은 회로를 전원 쪽에서 본 것입니다. 스트립의 플러스(보통 12V라고 인쇄되어 있습니다)는 + 단자에, 스트립의 마이너스는 LOAD에 연결합니다. LED 스트립에는 코일이 없으므로 다이오드가 필요하지 않습니다. 듀티 사이클이 밝기를 정합니다. 스트립이 길수록 더 많은 전류를 끌어 쓰니, 모듈을 고르기 전에 정격을 확인하세요. RGB 스트립과 주소 지정형 스트립은 다른 구성이 필요합니다.
MOSFET 모듈을 위한 프로그래밍 방법
라이브러리는 필요하지 않습니다. 코드는 ESP32 코어에 이미 들어 있는 함수를 사용합니다.
- 모듈을 구동하는 GPIO 핀에 이름을 붙입니다: const int MOSFET_PIN = 18;
- 핀을 출력으로 설정합니다: pinMode(MOSFET_PIN, OUTPUT);
- 부하를 완전히 켭니다: analogWrite(MOSFET_PIN, 255); (또는 digitalWrite(MOSFET_PIN, HIGH);)
- 부하를 완전히 끕니다: analogWrite(MOSFET_PIN, 0); (또는 digitalWrite(MOSFET_PIN, LOW);)
- 전력의 일부만 설정합니다. 예를 들어 50%: analogWrite(MOSFET_PIN, 128);
- 퍼센트를 0에서 255 사이의 PWM 값으로 바꿉니다: int duty = map(percent, 0, 100, 0, 255);
ESP32 코드 - MOSFET 모듈
아래 코드는 부하를 2초 동안 완전히 켜고 2초 동안 완전히 끕니다. 그런 다음 전력을 10%에서 100%까지 10% 단위로 0.5초마다 한 단계씩 올리고, 같은 방식으로 0%까지 내립니다. 1초 쉬고 나면 사이클이 다시 시작됩니다.
빠른 단계
ESP32를 처음 사용한다면 ESP32 - 소프트웨어 설치을 참고하세요.
- 위 배선도와 같이 ESP32, MOSFET 모듈, LED 스트립(또는 팬), 12V 전원을 연결합니다.
- USB 케이블을 ESP32와 PC에 연결합니다. 12V 어댑터는 아직 꽂지 마세요.
- Arduino IDE를 열고 ESP32 Dev Module 보드와 올바른 COM 포트를 선택합니다.
- 위 코드를 복사하여 Arduino IDE에 붙여넣습니다.
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 컴파일하고 ESP32에 업로드합니다.
- 12V 전원 어댑터를 꽂습니다.
- Serial Monitor 아이콘을 클릭한 다음 baud rate를 9600으로 입력하거나 선택합니다.
- LED 스트립을 지켜보세요. 2초 동안 최대 밝기, 2초 동안 꺼짐, 그다음 천천히 밝아졌다가 천천히 어두워집니다. 팬은 속도가 같은 식으로 변합니다.
- 시리얼 모니터의 메시지를 확인합니다.
부하가 전혀 켜지지 않으면 먼저 부하 전원 전압을 확인하세요. 약 6V 이상이어야 한다는 점을 기억하세요.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.