ESP32 C3 Super Mini PC817 옵토커플러: 12V/24V DC 입력 신호 모니터링

ESP32 C3 Super Mini는 프로젝트 박스 안에 숨길 수 있을 만큼 작지만, 모든 GPIO 핀의 최대 전압은 3.3V DC입니다. 그래서 자동차, 초인종 또는 기계 패널에서 오는 12V DC나 24V DC 선을 핀에 대는 순간 보드가 망가집니다. PC817 옵토커플러 절연 모듈은 이 문제를 해결하는 저렴한 완제품 부품이며, 크기도 보드 자체보다 크게 크지 않습니다.

대부분의 경우 진짜 질문은 "신호가 있는가?"가 아니라 "그 장비가 지금 실제로 작동 중인가?"입니다 - 펌프가 돌고 있는지, 차임이 명령을 받았는지, 히터가 여전히 전력을 소비하는지 말입니다. 12V 또는 24V 장치 양단에 연결한 PC817 모듈이 바로 그 질문에 답하며, ESP32 C3 Super Mini는 장비 안에 계속 넣어 두고 답을 얻을 수 있을 만큼 작습니다.

이 튜토리얼에서 배울 내용:

ESP32 C3 Super Mini pc817 옵토커플러 절연 12v 및 24v 입력

ESP32 C3 Super Mini에 PC817이 필요한 이유

필요한 하드웨어

1×ESP32 C3 Super Mini 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×PC817 Optocoupler Module 12V 아마존
1×PC817 Optocoupler Module 3-5V 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

참고: 모듈은 하나만 구매하세요 - 감시할 선에 맞는 변형 모델입니다. 다음 섹션에서 어떤 것이 맞는지 알아내는 방법을 보여줍니다.

PC817 옵토커플러 모듈의 작동 원리

PC817 옵토커플러 절연 모듈은 4핀 PC817 칩을 중심으로 만든 작은 보드입니다. 이 칩 안에는 적외선 LED가 절연 간격을 사이에 두고 포토트랜지스터와 마주 보고 있습니다. LED에 전류가 흐르면 빛이 나고, 그 빛이 트랜지스터를 켭니다. 이것이 원리의 전부입니다. 신호가 전기 대신 빛으로 건너가기 때문에 12V/24V 쪽과 ESP32 C3 Super Mini 쪽은 전기적으로 분리된 상태를 유지합니다.

모듈이 칩 주변에 추가한 부분이 여러분의 수고를 덜어줍니다. 입력 LED용 직렬 저항이 이미 장착되어 있고, 입력은 현장 배선을 바로 연결할 수 있는 나사 단자로 들어오며, 입력 쪽 상태 LED가 선에 전원이 들어왔는지 한눈에 보여줍니다. 모듈은 1, 2, 4, 8 채널 버전이 있습니다.

모듈 안 PC817의 주요 특징:

  • 절연 전압: 입력 측과 출력 측 사이 1분간 5000 Vrms
  • 입력 LED: 순방향 전압 약 1.2 V, 연속 최대 20 mA, 일반 작동 범위는 5-20 mA
  • 출력 트랜지스터: 최대 컬렉터-이미터 전압 35 V, 최대 컬렉터 전류 50 mA, 소비 전력 150 mW
  • 전류 전달비(CTR): 부품에 찍힌 등급에 따라 50% ~ 600% (A 등급 80-160%, B 130-260%, C 200-400%, D 300-600%)
  • 속도: 상승 시간 약 4 us, 하강 시간 약 3 us로, 사람이나 기계 램프가 하는 모든 동작에 대해 즉각적입니다
  • 온도 범위: -30 C ~ +100 C

ESP32 C3 Super Mini 초보자에게 적합한 이유:

  • 계산할 것이 없습니다 - 모듈의 저항은 공장에서 입력 전압에 맞게 선정되었습니다
  • 보정하거나 설정할 것이 없습니다
  • 12V/24V 쪽의 배선 실수는 보드에 닿지 않고 모듈에서 멈춥니다
  • 나사 단자 덕분에 설치된 장비의 현장 배선을 브레드보드 없이 연결할 수 있습니다

어떤 옵토커플러 모듈이 필요할까요? 먼저 선을 측정하세요

이 페이지의 거의 모든 내용은 개조 작업입니다 - 다른 사람이 설치한 차임, 펌프 또는 패널 램프를 감시하는 것이므로, "어떤 모듈?"에 대한 솔직한 답은 "아직 모르니 측정해 보자"에서 시작합니다. 무엇이든 주문하기 전에 먼저 측정하세요.

선 측정 3단계:

  • 멀티미터를 DC 전압으로 설정하고, 검은색 프로브를 감시하려는 장치의 음극 또는 리턴 단자에 댑니다
  • 빨간색 프로브를 양극 또는 스위칭 단자에 대고 장치를 켭니다 - 초인종 버튼을 누르거나, 온도조절기가 펌프를 호출하게 하는 등 평소에 장치를 구동하는 방법을 사용합니다
  • 장치가 켜져 있는 동안 전압을 읽습니다. 전원 어댑터의 라벨이 아니라 이 숫자에 맞는 모듈을 구매해야 합니다
장치가 켜져 있을 때 측정값 구매할 모듈 일반적인 신호원
약 12 V DC 12V 모듈 초인종 차임, 차고 문 컨트롤러, 자동차 회로, 소형 펌프 및 팬
약 24 V DC 24V 모듈 기계 패널 램프, 접촉기 및 솔레노이드 코일, PLC 출력, HVAC 제어
3.3 V 또는 5 V DC 3-5V 모듈 로직 출력, 센서 보드, 가전제품 내부의 제어 보드

변형 모델이 그토록 중요한 이유: 모듈의 직렬 저항은 보드에 장착되어 있으며, 하나의 입력 전압에 맞춰 선정되어 있습니다. 변형 모델을 고르는 것이 모듈에서는 저항을 선정하는 것과 같습니다 - 이 페이지에서 잘못될 수 있는 유일한 구매 결정입니다.

WARNING

변형 모델을 혼동하지 마세요.

12V 모듈에 24V 선을 연결하면 의도한 전류의 약 두 배가 내부 LED에 흘러 손상됩니다.

24V 모듈에 12V 선을 연결하면 LED가 충분히 구동되지 않아 출력이 늦게 전환되거나, 불안정하게 전환되거나, 아예 전환되지 않을 수 있습니다.

나중에 완성된 ESP32 C3 Super Mini 프로젝트를 12V 기계에서 24V 기계로 옮긴다면 모듈만 바꾸면 됩니다 - 코드는 바뀌지 않습니다.

3.3V 또는 5V 신호도 절연할 가치가 있습니다:

  • 두 회로가 서로 다른 전원 공급 장치를 사용하거나, 몇 미터 떨어져 있거나, 한쪽이 전기적으로 노이즈가 많을 때 - 긴 케이블, 모터 드라이버, 또는 상용 전원 가전 안에 묻힌 저전압 제어 보드 등 - 3-5V 모듈을 사용하세요. 절연은 높은 전압을 견디는 것뿐 아니라 접지 경로를 끊는 것이기도 합니다
  • 입력은 전압이 아니라 전류에 반응합니다: 10암페어를 공급할 수 있는 5V 레일이라도 10밀리암페어만 공급할 수 있는 레일보다 모듈의 LED에 더 부담이 되지 않습니다. 어느 쪽이든 온보드 저항이 LED 전류를 정하기 때문입니다. 대용량 전원이 바꾸는 것은 다른 곳의 배선 실수가 얼마나 큰 피해를 주느냐이며, 이것이 절연해야 할 또 하나의 이유입니다
  • 3.3V가 실질적인 하한선입니다. 내부 LED만으로 약 1.2 V를 소비하므로 그 아래로는 여유가 거의 없습니다

배선 다이어그램

절연된 신호는 D5에서 읽습니다. 이 핀은 ESP32 C3 Super Mini의 일반 GPIO입니다. 내장 LED 핀(GPIO8)도, BOOT 핀(GPIO9)도, USB 데이터 핀도, 기본 UART와 I2C가 사용하는 핀도 아니므로, 업로드, 온보드 LED, 시리얼 모니터를 방해하지 않습니다.

WARNING

12V/24V 회로의 접지를 ESP32 C3 Super Mini GND에 연결하지 마세요. 그 분리가 PC817을 사용하는 핵심 이유입니다. 두 접지를 연결해도 옵토커플러는 여전히 전환되고 코드도 작동하지만, 절연은 사라지고 12V/24V 쪽의 고장 하나가 보드에까지 도달할 수 있게 됩니다.

ESP32 C3 Super Mini pc817 옵토커플러 절연 모듈 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

모듈 단자/핀 연결 대상
IN+ (나사 단자) 12V/24V 신호선
IN- (나사 단자) 12V/24V 회로의 접지
VCC (헤더 핀) ESP32 C3 Super Mini 3.3V
GND (헤더 핀) ESP32 C3 Super Mini GND
OUT (헤더 핀) D5
  • 출력 측 전원은 5V가 아닌 3.3V에서 공급하세요 - ESP32 C3 Super Mini는 5V를 견디지 못하며, 모듈의 OUT 핀은 VCC에 공급한 전압까지 올라갑니다
  • IN+ 근처에 별도의 저항을 달지 마세요. 모듈에 이미 하나가 있으며, 직렬로 하나 더 추가하면 LED에 전류가 부족해질 뿐입니다
  • 나사 단자 쪽과 헤더 쪽은 두 개의 별도 회로이며, PC817 내부의 절연 간격 외에는 아무것도 공유하지 않습니다
  • 입력 측은 LED이므로 한 방향으로만 전류가 흐릅니다: IN+에는 양극 또는 스위칭 선을, IN-에는 리턴 선을 연결합니다

선택 사항 - PC817 칩 단품으로 같은 입력 만들기

직접 납땜하는 것을 선호하시나요? PC817 칩 단품은 1번 핀 옆에 점이나 홈이 있는 4핀 DIP이며, 저항 하나만 있으면 같은 절연 입력이 됩니다.

ESP32 C3 Super Mini 절연 입력용 pc817 옵토커플러 핀아웃
  • 1번 핀 - 애노드(A): 입력 측 - 직렬 저항을 거친 12V/24V 신호
  • 2번 핀 - 캐소드(K): 입력 측 - 12V/24V 회로의 접지, 절대 보드 접지가 아님
  • 3번 핀 - 이미터(E): 출력 측 - ESP32 C3 Super Mini GND
  • 4번 핀 - 컬렉터(C): 출력 측 - D5

이 저항을 선정하는 것이 바로 모듈의 변형 모델이 대신 해준 일입니다. 내부 LED에 10 mA가 흐르도록 목표를 잡으세요: R = (Vin - 1.2) / 0.01.

입력 전압 장착할 저항 참고
3.3V 220 ohm 약 9.5 mA, 1/4 W
5V 390 ohm 약 9.7 mA, 1/4 W - 470 ohm도 대체용으로 괜찮음
12V 1 kohm 약 10.8 mA, 1/4 W
24V 2.2 kohm 약 10.4 mA - 여기서는 1/2 W 저항 사용

입력 전압이 바뀔 때마다 저항을 바꾸세요: 1 kohm을 그대로 두고 24볼트를 공급하면 약 22.8 mA가 흘러 LED의 20 mA 한계를 넘습니다.

이미 설치된 장치와 병렬로 모듈 배선하기

이렇게 저렴하고 작은 보드의 가장 좋은 용도는 개조 작업입니다: 이미 벽에 고정되고 배선된 12V DC 초인종 차임, 가전제품 또는 펌프를 분해하지 않고 감시하는 것입니다. 모듈의 입력이 장치 양단에 - 즉 장치와 병렬로 - 연결되기 때문에 가능합니다. 기존 회로에서 아무것도 자르거나, 뽑거나, 경로를 바꾸지 않습니다. 이미 있는 단자에 전선 두 개를 연결하고 나머지는 그대로 둡니다.

WARNING

모듈을 장치와 절대 직렬로 연결하지 마세요. 직렬로 연결하면 차임, 램프 또는 펌프의 전체 부하 전류가 20 mA 정격인 옵토커플러의 내부 LED를 통해 흐르며, 장치가 켜지는 순간 부품이 파손됩니다. 탭은 장치와 일렬이 아니라 장치 양단에 연결합니다.

기존 12V/24V 장치 모듈 단자
양극 / 스위칭 단자 IN+
음극 / 리턴 단자 IN-
  • 모듈 탭에는 직렬 저항이 필요 없습니다: 장치 자체의 단자에서 IN+와 IN-로 전선 두 개를 바로 연결합니다. LED 전류를 정하는 저항이 이미 모듈에 있기 때문이며, 이것이 변형 모델이 해당 장치에서 측정한 전압과 일치해야 하는 이유이기도 합니다
  • 탭은 약 10 mA를 소비합니다. 차임 코일, 램프, 밸브 또는 모터가 끌어가는 전류에 비하면 아무것도 아니므로, 장치는 이전과 똑같이 작동합니다. 읽기 전용 측정입니다
  • 극성이 중요합니다: 입력 측은 LED이므로 한 방향으로만 전류가 흐릅니다. IN+와 IN-를 바꾸면 절대 켜지지 않으므로, 단단히 조이기 전에 멀티미터로 탭의 어느 단자가 양극인지 확인하세요
  • 측정값은 장치의 실제 상태를 따릅니다: 탭이 여러분의 스위치가 아닌 장치 양단에 있으므로, 장비에 전원이 들어올 때마다 참이 됩니다 - 다른 사람의 푸시 버튼, 타이머 또는 온도조절기가 켤 때도 포함되며, 켜지지 않는 경우도 알 수 있습니다. 이것이 가동 시간 기록, 유휴 시간 계산, "실제로 시작되었나?" 알림을 가능하게 합니다
  • 솔직한 한계 하나: 이 방법은 장치에 전원이 들어왔다는 것을 알려줄 뿐, 제대로 작동한다는 것은 알려주지 않습니다 - 멈춰 버린 펌프나 코일이 타버린 차임도 여전히 전력을 소비하므로 ON으로 읽힙니다
  • DC 전용: PC817 입력은 LED 하나이므로 한 극성에만 반응합니다. 초인종이 12V DC 전원이 아닌 AC 변압기로 작동한다면 이 부품은 맞지 않습니다 - AC를 감지하려면 입력단에 LED 두 개가 역병렬로 연결된 옵토커플러가 필요합니다

WARNING

차임 코일, 릴레이, 솔레노이드, 접촉기 또는 모터는 꺼질 때 전선을 통해 큰 역전압 스파이크를 되돌려 보내는데, PC817의 입력 LED는 역방향 6 V까지만 견딜 수 있습니다. 모듈의 입력 단자 바로 양단에 일반 다이오드를 역병렬로 장착하세요 - 캐소드는 IN+에, 애노드는 IN-에 (칩 단품이라면 1번과 2번 핀 양단에 같은 방향으로). 정상 작동 시 이 다이오드는 역바이어스 상태로 아무 일도 하지 않으며, 스파이크가 발생하면 도통하여 역전압을 1볼트보다 훨씬 낮게 제한합니다. 작은 탭에는 1N4148, 더 큰 부하에는 1N4007을 사용하세요.

옵토커플러 모듈은 액티브 하이일까요, 액티브 로우일까요?

확정된 물리 현상인 칩 단품부터 시작하겠습니다. PC817의 출력 측은 전압을 내보내지 않습니다 - 포토트랜지스터가 켜지면 디지털 핀을 GND에 연결할 뿐이므로, 트랜지스터가 꺼져 있을 때 핀에 전압이 있으려면 풀업이 필요합니다. ESP32 C3 Super Mini에는 모든 GPIO에 내부 풀업이 내장되어 있으며, 여기서 바로 그것을 사용합니다.

외부 12V/24V 신호 PC817 LED 포토트랜지스터 ESP32 C3 Super Mini 핀 읽기값
있음 켜짐 도통 LOW
없음 꺼짐 차단 HIGH

따라서 칩 단품에서는 신호가 있으면 LOW로 읽힙니다 - 항상 그렇습니다. 모듈에서는 흥미로워집니다: 대부분의 제조사는 위 표와 똑같이 칩을 배선하므로 OUT 핀도 액티브 로우이지만, 일부는 보드에 반전 단을 추가하여 OUT이 입력을 따라가고 선에 전원이 들어오면 HIGH가 됩니다. 두 종류 모두 같은 "PC817 절연 모듈"이라는 이름으로 판매되므로, 추측하지 말고 직접 확인하세요.

1분 극성 테스트:

  • 위의 배선 표대로 모듈을 배선하고 이 페이지 아래쪽의 ESP32 C3 Super Mini 스케치를 업로드합니다
  • 115200으로 시리얼 모니터를 열고, IN+와 IN-를 연결하지 않은 상태에서 스케치가 보고하는 내용을 기록합니다 - 이것이 유휴 상태입니다
  • 이제 입력 측에 전원을 넣습니다. 모듈의 상태 LED가 켜져야 합니다. 이 LED가 믿을 수 있는 증인입니다. 절연된 입력 측에 있으므로 코드에서 일어나는 어떤 일에도 속지 않기 때문입니다
  • 상태 LED가 켜져 있는 동안 스케치가 보고하는 것이 액티브 상태입니다
  • 상태 LED가 켜져 있는데도 스케치가 선이 조용하다고 말한다면, 모듈은 액티브 하이 종류입니다

수정은 코드를 다시 쓰는 것이 아니라 한 곳만 고치면 됩니다: 스케치 상단에는 기본값이 true인 MODULE_ACTIVE_LOW 상수 하나가 있습니다. 이를 false로 바꾸고 다시 업로드하면 모든 메시지가 올바르게 출력됩니다. 코드의 다른 부분은 바꿀 필요가 없습니다.

※ 주의:

디지털 핀에서 3.3V로 연결한 외부 10 kohm 저항도 내부 풀업과 똑같이 작동하지만, ESP32 C3 Super Mini처럼 빈 핀과 공간이 적은 보드에서는 INPUT_PULLUP을 사용하면 부품 하나와 브레드보드 한 줄을 절약할 수 있습니다.

ESP32 C3 Super Mini에서 PC817 프로그래밍 방법

라이브러리는 필요 없습니다. 두 단계로 된 단순한 디지털 입력 읽기입니다.

1단계 - 핀을 내부 풀업이 있는 입력으로 설정합니다:

pinMode(D5, INPUT_PULLUP); // D5 as input, internal pull-up enabled

2단계 - 모듈의 극성을 사용하여 원시 읽기값을 참/거짓 답으로 변환합니다:

const bool MODULE_ACTIVE_LOW = true; // set to false if your module is the active-HIGH kind int raw = digitalRead(D5); bool signalActive = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH);

ESP32 C3 Super Mini 코드 - 24V 장치의 켜짐/꺼짐 모니터링

코드가 하는 일:

  • ESP32 C3 Super Mini의 내부 풀업을 켠 상태로 D5를 입력으로 설정합니다
  • 모듈의 OUT 핀을 읽고 MODULE_ACTIVE_LOW 상수를 통해 변환하므로, 한 곳만 수정하면 어느 극성이든 대응할 수 있습니다
  • 외부 선의 상태가 바뀔 때만 한 줄을 출력하여 시리얼 모니터를 읽기 쉽게 유지합니다
  • 외부 12V/24V 선이 활성화될 때마다 번호를 매깁니다
  • 선이 꺼질 때마다 몇 초 동안 전원이 들어와 있었는지 보고합니다
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ // The ESP32 C3 Super Mini pin D5 is connected to the OUT pin of a PC817 // optocoupler isolation module, or to the collector (pin 4) of a bare PC817 chip. // D5 is a plain GPIO on this board: it is not the built-in LED (GPIO8), not the // BOOT pin (GPIO9), not one of the USB data pins and not one of the pins the // default UART and I2C use, so it is safe to use. #define SIGNAL_PIN D5 // Which way round does YOUR module report the signal? // // A bare PC817 chip is always active-LOW: the internal pull-up holds D5 at 3.3V // while nothing happens, and when the external 12V/24V signal arrives the PC817's // LED lights, its phototransistor conducts and drags the pin down to GND. // // Optocoupler MODULES are not all built that way. Most of them behave like the bare // chip and pull OUT low when the input terminals are energised, but some makers add // an inverting stage on the board so OUT follows the input and goes HIGH instead. // Both kinds are sold under the same "PC817 isolation module" name, so you have to // check yours rather than assume. // // How to check, in under a minute: upload this sketch, leave IN+/IN- unconnected and // look at the Serial Monitor, then energise the input and look again. If the module's // own input LED lights while the sketch still reports "quiet", your module is the // active-HIGH kind - change the line below to false and re-upload. Nothing else in // this sketch has to change. const bool MODULE_ACTIVE_LOW = true; bool signalActive = false; // true while the external 12V/24V signal is present bool prevSignalActive = false; // the value of signalActive on the previous loop unsigned long activationCount = 0; // how many times the external signal has switched on unsigned long activationStart = 0; // millis() timestamp of the latest switch-on void setup() { // Start the Serial port so we can watch the isolated input on the Serial Monitor Serial.begin(115200); // Configure D5 as an input and switch ON the ESP32 C3's internal pull-up resistor. // The pull-up is what makes the pin sit at 3.3V while the optocoupler is idle. // Without it, the pin would float and the readings would be random. pinMode(SIGNAL_PIN, INPUT_PULLUP); Serial.println("ESP32 C3 Super Mini - PC817 isolated input (D5)"); Serial.println("-----------------------------------------------"); } void loop() { // Read the raw pin state, then turn it into a true/false answer using the // polarity constant above. This is the only place in the sketch that cares // whether the module is active-LOW or active-HIGH. int raw = digitalRead(SIGNAL_PIN); signalActive = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH); // Only report when something actually changes, so the Serial Monitor stays readable if (signalActive && !prevSignalActive) { // The external 12V/24V line has just come alive activationCount++; activationStart = millis(); Serial.print("24V line: LIVE | activation #"); Serial.println(activationCount); } else if (!signalActive && prevSignalActive) { // The external line has just gone away - report how long it stayed on. // millis() counts milliseconds, so divide by 1000.0 to print seconds. float heldSeconds = (millis() - activationStart) / 1000.0; Serial.print("24V line: quiet | it stayed live for "); Serial.print(heldSeconds, 2); Serial.println(" s"); } // Remember this reading so the next loop can spot the next change prevSignalActive = signalActive; // A short pause. The PC817 switches in a few microseconds, so 20 ms is plenty // and it also smooths out any bounce coming from a mechanical 12V/24V switch. delay(20); }

빠른 단계

  • 무엇보다 먼저 모듈 변형 모델을 확인하세요: 선에서 측정한 전압과 일치해야 합니다 - 이 단계를 건너뛰면 부품이 손상됩니다
  • 이 보드가 처음이신가요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기를 진행하세요
  • 출력 측 배선: 모듈 GND를 GND에, VCC를 3.3V에, OUT을 D5에 연결합니다
  • 입력 측은 따로 배선: IN+와 IN-를 장치에 연결하고, 12V/24V 접지는 보드와 완전히 떨어뜨려 둡니다
  • 보드 연결: USB Type-C 케이블로 ESP32 C3 Super Mini를 컴퓨터에 연결합니다
  • 보드 및 포트 선택: Tools > Board에서 ESP32C3 Dev Module을 선택한 다음 COM 포트를 선택합니다
  • 업로드: 위 코드를 Arduino IDE에 복사하고 Upload를 클릭합니다
  • 시리얼 모니터를 열고 보드레이트를 115200으로 설정합니다
  • 외부 선을 켰다 껐다 하면서 메시지가 나타나는 것을 확인합니다
  • 극성 테스트를 한 번 실행합니다: 메시지가 반대로 나오면 MODULE_ACTIVE_LOW를 false로 설정하고 다시 업로드합니다
  • 전문가 팁: 아무것도 켜기 전에 시리얼 모니터에 선이 활성으로 표시된다면, 두 접지가 연결되어 있거나 모듈이 액티브 하이 종류입니다

시리얼 모니터 출력

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
ESP32 C3 Super Mini - PC817 isolated input (D5) ----------------------------------------------- 24V line: LIVE | activation #1 24V line: quiet | it stayed live for 2.41 s 24V line: LIVE | activation #2 24V line: quiet | it stayed live for 0.36 s 24V line: LIVE | activation #3 24V line: quiet | it stayed live for 7.08 s 24V line: LIVE | activation #4
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

참고: MODULE_ACTIVE_LOW를 true로 둔 경우, LIVE라고 표시되는 모든 줄에서 핀 자체는 LOW로 읽힙니다. 코드가 이미 변환해 준 것입니다.

코드 라인별 설명

위의 ESP32 C3 Super Mini 코드의 주석에는 라인별 설명이 포함되어 있습니다. 코드의 주석을 읽어보세요!

응용 및 프로젝트 아이디어

ESP32 C3 Super Mini는 저렴하고 물리적으로 아주 작아서, 이미 12V 또는 24V로 작동하는 장비 안에 영구적으로 넣어 두기에 알맞은 보드입니다.

  • 12V 차고 문 컨트롤러 개조: 12V 모듈을 통해 컨트롤러의 12V 출력을 연결하고, 컨트롤러 자체를 수정하지 않고도 문이 작동할 때마다 보드가 WiFi 알림을 보내게 합니다
  • 12V 펌프나 팬의 가동 시간 계산: 장치 자체 양단에 연결하여 전원이 들어올 때마다 번호를 매기고 총 작동 시간을 합산하면, 오늘 작동을 시작했는지 한눈에 알 수 있습니다
  • 기존 초인종 차임이 실제로 울렸는지 확인: 12V DC 차임은 설치자가 배선한 그대로 두고, 병렬 탭이 벨이 울릴 때마다 보드에서 메시지를 보내게 합니다
  • 24V 기계 고장 램프 감시: 제어반의 고장 램프 선 양단에 24V 모듈을 연결하고, 코드가 이미 수집하는 타임스탬프로 기계가 고장 날 때마다 기록합니다
  • 밀폐형 인클로저에 절연 입력 넣기: 단일 채널 모듈과 이 보드는 풀사이즈 개발 보드가 들어가지 않는 작은 IP 등급 박스에 들어가므로, 실외 12V 게이트 및 펌프 설치에 적합합니다
  • 12V 차량 회로에 전원이 들어왔는지 확인: 보드를 차량 전기 시스템에 노출시키지 않고 자동차 안에서 시동, 전조등 또는 도어 스위치를 모니터링합니다
  • 24V 솔레노이드나 접촉기 코일에 전원이 들어왔는지 감지: 명령을 보냈다는 것뿐 아니라 코일이 실제로 명령을 받았는지 소프트웨어로 확인합니다
  • 이미 만든 것에 채널 추가: 절연 입력을 ESP32 C3 Super Mini - 릴레이와 함께 사용하여 24V 현장 신호로 별도의 부하를 전환합니다
  • 장거리 스위치 확장: 일반 ESP32 C3 Super Mini - 버튼 입력이 노이즈를 받을 만큼 긴 케이블에서는, 루프를 24V로 구동하고 대신 모듈을 통해 읽습니다

비디오 튜토리얼

이 프로젝트를 시각적으로 따라 할 수 있도록 아래 비디오를 시청하세요.

도전 과제

다음 과제로 ESP32 C3 Super Mini PC817 옵토커플러 프로젝트를 조금 더 발전시켜 보세요.

  • 쉬움: 일반적인 24V 문구 대신 여러분의 장비에 맞게 출력 라벨을 다시 써보세요 - "시동", "펌프 작동 중", "게이트 열림" 등
  • 쉬움: 절연 입력 상태를 GPIO8의 온보드 LED에 그대로 반영하여 시리얼 모니터 없이도 상태를 볼 수 있게 해보세요
  • 쉬움: 일부러 MODULE_ACTIVE_LOW를 false로 바꿔 모든 메시지가 반대로 나오는 것을 확인한 다음 되돌려 보세요 - 나중에 반대로 배선된 모듈을 만나면 증상을 즉시 알아볼 수 있습니다
  • 보통: 전원을 켠 이후 외부 선에 전원이 들어와 있던 총 시간을 누적하고, 1분에 한 번씩 출력해보세요
  • 보통: 24V 선이 설정한 한계보다 오래 활성 상태로 있으면 경고를 발생시켜 보세요 - 붙어버린 접촉기나 걸린 게이트가 바로 그런 모습입니다
  • 보통: 같은 스케치를 다른 장비에서 24V 모듈에서 12V 모듈로 옮겨보고, 코드를 전혀 바꿀 필요가 없는지 확인해보세요
  • 고급: 소프트웨어 디바운싱을 추가하여 떨리는 12V 릴레이 접점이 수십 번의 활성화로 기록되지 않게 해보세요
  • 고급: 4채널 모듈로 업그레이드하여 네 개의 개별 24V 기계 신호를 동시에 감시하고, 네 개 모두의 상태를 WiFi로 보고해보세요

문제 해결

모든 측정값이 정확히 반대로 나옵니다 (차임이 조용할 때 LIVE라고 하고, 차임이 울릴 때 quiet라고 합니다):

  • 모듈이 액티브 하이 종류입니다 - 일부 제조사는 보드에서 출력을 반전시킵니다. 위의 1분 극성 테스트를 실행하여 모듈의 상태 LED와 시리얼 모니터 출력을 비교하세요
  • 스케치 상단의 MODULE_ACTIVE_LOW를 false로 설정하고 다시 업로드하세요. 이 상수 하나로 모두 해결됩니다

핀이 항상 LOW로 읽힙니다 (코드가 항상 LIVE라고 합니다):

  • 두 접지가 어딘가에서 연결되어 있습니다 - 분리하세요
  • 칩 단품의 경우 PC817이 거꾸로 꽂혀 있습니다. 1번 핀을 표시하는 점이나 홈을 찾으세요

핀이 항상 HIGH로 읽힙니다 (아무것도 감지되지 않습니다):

  • 12V 선으로 24V 모듈을 구동하고 있어 LED가 충분히 구동되지 않습니다 - 측정한 전압에 맞는 변형 모델을 사용하세요
  • IN+와 IN-가 바뀌어 내부 LED가 역바이어스되어 절대 켜지지 않습니다
  • 외부 12V/24V 신호가 실제로 없습니다 - 먼저 멀티미터로 확인하세요

측정값이 비활성으로 돌아오지 않습니다 (장치를 꺼도 LIVE라고 합니다):

  • 신호원이 반도체 출력입니다 - PLC 트랜지스터 출력, 트라이액 출력 또는 LED 램프 드라이버 등 - 이들은 꺼져 있어도 작은 전류가 새어 나오며, 이것만으로도 모듈의 LED가 부분적으로 켜질 수 있습니다
  • 모듈의 입력 단자와 병렬로 약 4.7 kohm ~ 10 kohm의 블리더 저항을 장착하여, 누설 전류가 LED 대신 저항을 통해 흐르게 하세요
  • 신호원이 일반 기계식 접점이라면, 대신 두 접지가 연결되어 있는지 확인하세요

측정값이 불안정합니다:

  • pinMode()에 INPUT_PULLUP이 빠져 있어 핀이 플로팅 상태입니다
  • 외부 접점이 기계식이며 채터링이 발생합니다 - 디바운싱을 추가하세요

함수 레퍼런스

댓글

관련 튜토리얼