ESP8266 PC817 옵토커플러: 12V/24V DC 입력 신호 모니터링
PC817 옵토커플러 모듈을 사용하면 ESP8266이 12V 또는 24V 라인에 전기적으로 전혀 닿지 않고도 그 라인을 감시할 수 있습니다. 핀이 3.3V 전용인 보드에서는 이것이 매우 중요합니다. 이 튜토리얼에서는 ESP8266으로 PC817 기반의 절연 디지털 입력을 읽는 방법과, 그 입력을 장비에 병렬로 연결하여 정말 알고 싶은 질문, 즉 그 장치가 지금 작동 중인지 아닌지에 보드가 답하게 하는 방법을 알려드립니다. 자세히 말하면, 다음 내용을 배웁니다:
- PC817 옵토커플러 모듈이 무엇이며 각 단자가 어떤 역할을 하는지.
- 세 가지 모듈 버전(12V, 24V, 3-5V) 중 어떤 것이 감시하려는 라인에 맞는지, 그리고 다른 것을 사면 어떤 문제가 생기는지.
- PC817 옵토커플러 모듈을 ESP8266에 연결하는 방법과, 4핀 칩 단품으로 같은 입력을 만드는 방법.
- 기존 전선을 하나도 자르거나 다시 배선하지 않고, 감시하려는 장치에 모듈을 병렬로 배선하는 방법.
- 이 작업에 안전하게 쓸 수 있는 ESP8266 GPIO 핀은 무엇이며, 부트 스트래핑 핀은 왜 안 되는지.
- 모듈이 액티브 LOW인지 액티브 HIGH인지 알아내는 방법과, 상수 하나로 스케치를 반전하는 방법.

추천 튜토리얼:
필요한 하드웨어
| 1 | × | Micro USB Cable | 아마존 | |
| 1 | × | ESP8266 NodeMCU | 쿠팡 | 아마존 | |
| 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 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) ESP8266용 스크루 터미널 확장 보드 | 쿠팡 | 아마존 |
PC817 옵토커플러에 대하여
PC817은 전선 대신 빛을 사용하여 한 회로에서 다른 회로로 디지털 신호를 전달하는 4핀 칩입니다. 플라스틱 몸체 안에는 절연된 틈을 사이에 두고 적외선 LED와 포토트랜지스터가 마주 보고 있습니다. LED에 전류가 흐르면 그 빛이 트랜지스터를 켜므로, 신호는 전기 대신 빛으로 건너갑니다. 그 틈 덕분에 양쪽이 전기적으로 분리된 상태를 유지하며, 1분간 5000 Vrms의 정격을 가집니다.
ESP8266에게 이 분리는 사치가 아닙니다. ESP8266은 3.3V로 동작하고 GPIO 핀이 5V 톨러런트가 아니므로, 12V 또는 24V 전선이 핀에 직접 닿으면 칩이 망가집니다. 중간에 PC817이 있으면 24V 측과 3.3V 측은 도체 하나도 공유하지 않습니다.
이제 이 작업을 위해 칩 단품을 납땜하는 사람은 거의 없습니다. PC817 옵토커플러 절연 모듈은 같은 칩을 작은 보드에 올리고, 직렬 저항, 상태 LED, 위험한 쪽을 위한 스크류 터미널, ESP8266 쪽을 위한 헤더를 함께 달아 놓았으므로, 절연 입력 전체가 전선 세 개와 나사 두 개로 끝납니다. 이 튜토리얼은 그 모듈을 중심으로 구성되어 있으며, 칩 단품은 직접 만들고 싶은 분을 위해 아래쪽에 남겨 두었습니다.
모듈 안에 들어 있는 PC817의 사양:
| 항목 | 값 |
|---|---|
| 패키지 | 4핀 DIP, 1번 핀은 점이나 홈으로 표시 |
| 입력 LED 순방향 전압 (Vf) | 일반 약 1.2 V, 최대 1.4 V |
| 입력 LED 순방향 전류 (If) | 연속 최대 20 mA, 일반 5-20 mA, 10 mA가 좋은 목표값 |
| 출력 컬렉터-이미터 전압 (VCEO) | 최대 35 V |
| 출력 컬렉터 전류 (IC) | 최대 50 mA |
| 컬렉터 전력 손실 | 150 mW |
| 절연 전압 | 1분간 5000 Vrms |
| 전류 전달비 (CTR) | 등급에 따라 50% ~ 600% (A 80-160%, B 130-260%, C 200-400%, D 300-600%) |
| 스위칭 속도 | 상승 시간 약 4 us, 하강 시간 약 3 us |
| 동작 온도 | -30 C ~ +100 C |
PC817 옵토커플러 모듈 핀아웃
모듈에는 입력 측과 출력 측이 있으며, 둘 사이에는 전기적인 것이 아무것도 건너가지 않습니다.
- 단자 IN+ (또는 +) - 입력 측의 양극. 감시하려는 12V 또는 24V 라인의 스위칭된 양극을 이 스크류 터미널에 연결해야 합니다.
- 단자 IN- (또는 -) - 입력 측의 음극. 같은 외부 회로의 리턴에 연결해야 하며, ESP8266 GND에 연결하면 안 됩니다.
- 핀 VCC - 출력단 전원. ESP8266 3.3V 핀에 연결해야 합니다.
- 핀 GND - 출력 측 접지. ESP8266 GND 핀에 연결해야 합니다.
- 핀 OUT (다채널 보드에서는 DO 또는 OUT1..OUTn으로 표시) - 절연된 출력. 사용 가능한 내부 풀업이 있는 ESP8266 디지털 입력 핀에 연결해야 합니다.
※ 주의:
옵토커플러 절연 모듈의 핀 배열은 제조사마다 다릅니다. 어떤 보드는 VCC를 가운데에 두고, 어떤 보드는 GND와 OUT의 위치가 반대이며, 어떤 보드는 입력 단자를 +와 - 대신 IN과 GND로 인쇄합니다. 사진을 따라 하지 말고 항상 실제로 구매한 보드에 인쇄된 표시를 읽으세요. 보드가 설계된 입력 전압도 보통 스크류 터미널 옆이나 아래에 인쇄되어 있으며, 주문한 버전을 제대로 받았는지 확인하는 가장 빠른 방법입니다.
12V 또는 24V 라인에는 어떤 옵토커플러 모듈이 필요한가요?
이것이 중요한 유일한 구매 결정이므로, 주문하기 전에 정하세요. 직렬 저항은 모듈에 이미 장착되어 있고, 그 저항은 한 가지 입력 전압에 맞춰져 있습니다. 바로 그래서 이 보드들이 세 가지 별도 버전으로 판매되는 것입니다:
- 12V 모듈 - 12V DC 신호용. 이 페이지에서 계속 다루는 보일러 및 온수 히터 예제에 맞는 버전입니다.
- 24V 모듈 - 24V DC 신호용: 경보 패널의 사이렌 출력, 24V PLC 출력, 24V 솔레노이드 또는 컨택터 회로.
- 3-5V 모듈 - 3.3V 및 5V 로직 신호용. 두 회로가 별도 전원으로 동작하거나, 긴 케이블로 멀리 떨어져 있거나, 한쪽이 전기적으로 노이즈가 많을 때(스테퍼 드라이버, 모터 컨트롤러, 상용 전원 가전 내부의 저전압 제어 보드) 쓸 만합니다. 절연은 높은 전압을 견디는 것만이 아니라 접지 경로를 끊는 것이기도 합니다.
라인에 맞는 것 하나만 사세요. 버전끼리는 서로 바꿔 쓸 수 없습니다:
- 24V 라인에 연결된 12V 모듈은 설계된 LED 전류의 약 두 배를 받게 되고, 입력 LED가 손상됩니다.
- 12V 라인에 연결된 24V 모듈은 LED가 충분히 구동되지 않으므로, 출력이 늦게 전환되거나, 불안정하게 전환되거나, 전혀 전환되지 않을 수 있습니다. 벤치 테스트는 통과하고 나서 캐비닛 안에서 조용히 이벤트를 놓칠 수 있으므로, 둘 중 더 까다로운 고장입니다.
또한 PC817 입력은 전원이 공급할 수 있는 양이 아니라 전류에 반응한다는 점에 주의하세요. 수 암페어를 공급할 수 있는 12 V 레일도 밀리암페어만 공급하는 레일보다 LED에 더 부담을 주지 않습니다. 어느 경우든 보드의 저항이 LED 전류를 고정하기 때문입니다. 모듈을 사용하면 계산할 것이 없습니다. 버전을 고르는 것이 곧 저항 계산이며, 공장에서 이미 해 둔 것입니다.
작동 원리
모듈의 두 부분은 빛을 주고받는 것 외에는 아무것도 하지 않습니다:
- 외부 12V/24V 신호가 있음: 입력 LED에 전류가 흐르고, 보드의 상태 LED가 켜지며, 포토트랜지스터가 도통합니다.
- 외부 12V/24V 신호가 없음: 입력 LED가 꺼져 있고, 상태 LED도 꺼져 있으며, 포토트랜지스터는 꺼져 있습니다.
이것이 OUT 핀에, 그리고 결국 ESP8266이 읽는 값에 어떤 영향을 주는지는 다음 섹션에서 다룹니다.
옵토커플러 모듈은 액티브 HIGH인가요, 액티브 LOW인가요?
칩 단품에서는 이것이 확정된 물리입니다. 포토트랜지스터는 핀을 아래로 당길 수만 있으므로, ESP8266 풀업이 핀을 HIGH로 유지하는 상태에서 외부 라인에 전원이 있으면 LOW로, 없으면 HIGH로 읽힙니다. 즉, 읽은 값이 반전됩니다.
모듈에서는 확인해야 합니다. 모듈의 출력 극성은 제조사마다 다르기 때문입니다. 많은 보드는 포토트랜지스터의 컬렉터를 그대로 밖으로 내보내므로, OUT이 칩 단품처럼 동작하여 입력에 전원이 들어오면 LOW가 됩니다. 다른 보드는 보드에서 이를 반전하므로, OUT이 입력을 따라가서 입력에 전원이 들어오면 HIGH가 됩니다. 두 종류 모두 판매되며 때로는 같은 제품 사진으로 팔리기도 하므로, 믿을 수 있는 답은 여러분의 보드가 알려주는 답뿐입니다.
테스트는 1분도 걸리지 않습니다:
- 아래와 같이 모듈을 ESP8266에 배선하고 이 튜토리얼의 스케치를 업로드합니다.
- IN+와 IN-에 아무것도 연결하지 않은 상태에서 시리얼 모니터를 열고, 출력되는 내용을 기록합니다.
- 외부 라인에 전원을 넣고, 이제 출력되는 내용을 기록합니다.
- 신호가 있는 동안 나타나는 상태가 모듈의 액티브 레벨입니다.
- 보드의 상태 LED로 교차 확인하세요. 입력 측에 전원이 들어올 때마다 켜지므로, LED가 분명히 켜져 있는데 시리얼 모니터가 여전히 IDLE이라고 한다면 극성 가정이 반대로 된 것입니다.
수정은 다시 작성하는 것이 아니라 한 곳만 고치면 됩니다. 아래 스케치에는 상수가 하나 있습니다:
신호가 있는 동안 출력이 LOW가 되는 모듈은 true로 두고, 출력이 HIGH가 되는 모듈은 false로 설정하면 이후의 모든 것이 그에 따릅니다.
PC817 칩 단품으로 절연 입력 만들기 (선택 사항)
칩 단품으로 직접 만들고 싶다면, PC817은 4핀 DIP이며 1번 핀은 점이나 홈으로 표시된 모서리에 있고, 위에서 볼 때 반시계 방향으로 번호가 매겨집니다.
- 1번 핀 - 애노드 (A)와 2번 핀 - 캐소드 (K): 입력 LED. 외부 양극은 직렬 저항을 거쳐 1번 핀에 연결해야 하며, 2번 핀은 외부 회로의 접지에만 연결해야 합니다.
- 3번 핀 - 이미터 (E): ESP8266 GND 핀에 연결해야 합니다.
- 4번 핀 - 컬렉터 (C): 풀업을 제공하는 ESP8266 입력 핀에 연결해야 합니다.

여기서는 LED 전류를 직접 정해야 합니다. 10 mA를 목표로 R = (Vin - 1.2) / 0.01을 사용하면: 3.3 V에서 220 ohm, 5 V에서 390 ohm, 12 V에서 1 kohm, 24 V에서 2.2 kohm입니다. 마지막 것은 약 0.24 W를 소비하므로 1/2 W 부품을 사용하세요. 칩 단품은 항상 액티브 LOW이므로 MODULE_ACTIVE_LOW는 true로 두세요.
절연 규칙
12V/24V 회로의 접지를 ESP8266 GND 핀에 연결하지 마세요. 모듈의 GND 헤더 핀에도 연결하지 마세요. 두 접지는 분리된 상태를 유지해야 하며, 그 분리가 PC817이 거기 있는 유일한 이유입니다. 둘을 연결해도 옵토커플러는 계속 전환되고 모든 것이 동작하는 것처럼 보이지만, 절연은 사라지고 24V 측의 고장이 이제 3.3V 보드로 곧장 들어오는 경로를 갖게 됩니다.
배선도
이 튜토리얼의 스케치는 절연 입력에 D7 (GPIO13) 핀을 사용합니다. ESP8266에서 이 선택은 임의로 한 것이 아닙니다. D7은 부팅에 안전한 일반 GPIO 중 하나이고 사용 가능한 내부 풀업이 있어서, 액티브 LOW 옵토커플러 출력에 딱 필요한 조건을 갖추고 있습니다. D0 (GPIO16) 핀은 내부 풀업이 전혀 없는 유일한 핀이며, D3 (GPIO0), D4 (GPIO2), D8 (GPIO15) 핀은 전원을 켤 때의 레벨이 칩의 시작 방식을 결정하는 부트 스트래핑 핀입니다. 스케치에서는 GPIO 번호 대신 NodeMCU의 Dx 표시를 사용하세요. NodeMCU 보드에서 D7은 자동으로 GPIO13이 되지만, 13을 그대로 쓰면 GPIO13을 뜻하므로 보드에 인쇄된 표시와 일치하지 않습니다.
- ESP8266과 PC817 옵토커플러 절연 모듈 간의 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
ESP8266 핀배열 및 ESP8266 전원을 켜는 방법에 대해 더 많이 보십시오.
외부 라인을 IN+와 IN- 스크류 터미널에 연결한 다음, 모듈의 VCC를 ESP8266 3.3V 핀에, GND를 ESP8266 GND 핀에, OUT을 ESP8266 D7에 연결하세요. 모듈의 출력 측은 5V나 Vin이 아니라 3.3V로 전원을 공급하세요. 모듈 출력단에 공급되는 전압이 그대로 ESP8266 핀에 나타나는데, ESP8266은 5V 톨러런트가 아니기 때문입니다. 달아야 할 저항도, 계산할 전류도 없습니다. 12V, 24V, 3-5V 버전을 고를 때 이미 결정되었습니다. 배선이 끝나면 위의 1분 테스트를 실행하여 모듈의 출력이 어느 방향인지 알아보세요.
- ESP8266과 PC817 칩 단품 간의 배선도
칩 단품 방식에서는 12V 또는 24V 신호의 양극이 직렬 저항(12 V는 1 kohm, 24 V는 2.2 kohm)을 거쳐 1번 핀으로 들어가고, 2번 핀은 그 외부 회로의 접지로만 돌아갑니다. 출력 측에서는 4번 핀을 ESP8266 D7에, 3번 핀을 ESP8266 GND에 연결합니다. 풀업은 소프트웨어에서 켜므로 3.3V 측에 추가 저항이 필요 없습니다.
장치의 켜짐/꺼짐을 모니터링하기 위해 PC817을 병렬로 배선하기
위의 두 배선도는 단독 12V 또는 24V 신호를 보여 주지만, 실제 설비에서는 그 신호가 이미 무언가에 속해 있습니다. 이 페이지에서 계속 다루는 난방 예제에서는, 실내 온도 조절기가 보일러나 온수 히터를 시작하기 위해 닫는 난방 요청 라인입니다. 그 라인을 감시하려면 모듈의 입력을 장치와 병렬로 라인 양단에 걸어야 하며, 절대 직렬로 연결하면 안 됩니다. 옵토커플러를 직렬로 넣으면 전체 부하 전류(보일러의 컨택터 코일, 또는 직결 온수 히터 회로라면 히터 소자 자체)가 20 mA 정격의 적외선 LED를 통과하게 되고, 온도 조절기가 처음 난방을 요청하는 순간 PC817이 망가집니다.
탭은 나사 두 개이며, 아무것도 자르지 않습니다:
- 장치의 양극(스위칭) 단자를 모듈의 IN+ 단자에 연결합니다.
- 장치의 음극 또는 리턴 단자를 모듈의 IN- 단자에 연결합니다.
- 기존 전선은 모두 설치자가 둔 그대로 유지합니다.
중간에 아무것도 넣지 않습니다. 칩 단품이라면 필요했을 직렬 저항이 이미 보드에 있고, 구매한 버전에 맞게 정해져 있습니다. 이것이 모듈의 편리함의 전부입니다. 병렬 탭이 계산 없이 나사 연결 두 개로 끝납니다.
탭은 약 10 mA만 소비하며, 이는 컨택터 코일, 밸브, 램프, 펌프 모터에 비하면 아무것도 아니므로 장치는 감시되기 전과 똑같이 계속 동작합니다. 그래서 측정이 읽기 전용으로 유지되고, 정직하게도 유지됩니다. 옵토커플러가 장치 앞이 아니라 장치 양단에 걸려 있으므로, 누가 명령했든 읽은 값은 장치 자체의 상태를 따릅니다. 보일러 타이머, 동결 방지 온도 조절기, 온수 탱크 온도 조절기, 벽 스위치를 누른 손 모두 시리얼 모니터에 나타나며, 요청이 나갔는데 아무 반응이 없는 경우도 나타납니다. 가동 시간 카운터, 유휴 시간 기록, "정말 점화되었나?" 경고가 모두 이 병렬 탭 하나로 가능해집니다.
첫 시도에 동작할지를 결정하는 세 가지 세부 사항이 있습니다:
- 탭의 극성. 입력 측은 일반 LED이며 한 방향으로만 도통합니다. IN+와 IN-를 바꿔도 아무것도 손상되지 않지만, 옵토커플러가 전혀 켜지지 않고 상태 LED도 켜지지 않습니다. 그러니 피복을 벗기기 전에 탭의 어느 쪽이 양극인지 확인하세요.
- 누설 전류. 일부 PLC 트랜지스터 출력, 트라이액 출력, LED 램프 드라이버는 꺼져 있는 동안에도 작은 전류를 흘리며, 그것이 충분하면 PC817 LED가 부분적으로 켜집니다. 증상은 분명합니다. 읽은 값이 ENERGISED가 되고 IDLE로 절대 돌아오지 않습니다. 모듈의 IN+와 IN- 단자 양단에 약 4.7 kohm ~ 10 kohm의 블리더 저항을 달아서, 누설 전류가 LED 대신 저항으로 흐르게 하세요.
- DC 전용. PC817 입력은 LED 하나이므로 한쪽 극성에만 반응합니다. AC 라인을 감지하려면 입력단에 LED 두 개가 역방향으로 병렬 연결된 옵토커플러가 필요합니다.
※ 주의:
유도성 부하(릴레이 또는 컨택터 코일, 솔레노이드, 전동 밸브, 순환 펌프)는 꺼질 때 큰 역전압 스파이크를 만들어 내며, PC817 입력 LED는 역방향으로 6 V까지만 견딥니다. 모듈의 입력 단자 양단에 일반 다이오드를 역병렬로 직접 달아 주세요. 다이오드 캐소드는 IN+에, 다이오드 애노드는 IN-에 연결합니다. 장치가 동작하는 동안 그 다이오드는 역바이어스 상태이므로 아무 일도 하지 않고, 스파이크가 오면 도통하여 역전압을 1볼트보다 훨씬 낮게 클램프합니다. 작은 탭에는 1N4148, 더 큰 것에는 1N4007을 사용하세요.
전원 인가 읽기 값이 증명하는 것과 증명하지 않는 것
한 가지 한계는 분명히 말해 둘 가치가 있습니다. 탭은 장치에 전원이 들어와 있다는 것을 알려줄 뿐, 장치가 제 역할을 하고 있다는 것은 알려주지 않습니다. 히터 소자가 타 버린 온수 히터도 여전히 난방 요청 라인을 당기고 ON으로 읽히며, 고착된 펌프나 멈춘 팬도 마찬가지입니다. ESP8266이 이것으로 할 수 있는 일은 원인과 결과를 비교하는 것입니다. 두 시간 동안 전원이 들어와 있었는데 아무 결과가 없다면 그 자체로 유용한 경보가 됩니다. 다만 그것이 측정이 아니라 추론이라는 점을 기억하세요.
PC817 옵토커플러 프로그래밍 방법
첫 번째 단계는 선택한 ESP8266 핀을 내부 풀업이 켜진 입력으로 설정하는 것입니다. 이렇게 하면 액티브 LOW 옵토커플러 출력이 유휴 상태일 때 핀이 정해진 HIGH로 유지됩니다:
두 번째 단계는 digitalRead() 함수로 핀을 읽는 것입니다:
세 번째 단계는 모듈의 극성을 담고 있는 상수 하나를 사용하여 그 원시 레벨을 의미 있는 값으로 바꾸는 것입니다:
마지막 단계는 그 불리언 값에 따라 동작하는 것입니다. loop()가 돌 때마다 출력하는 대신 이전 읽기 값과 비교하면, 시리얼 모니터가 읽기 쉽게 유지되고 12V/24V 라인의 실제 변화마다 한 줄씩만 출력됩니다.
PC817 옵토커플러용 ESP8266 코드
빠른 단계
Arduino IDE에서 ESP8266을 시작하려면 다음 단계를 따르세요:
- ESP8266을 처음 사용한다면 ESP8266 - 소프트웨어 설치 튜토리얼을 확인하세요.
- 모듈 버전이 입력 전압과 맞는지 확인하세요: 12V 라인에는 12V 모듈, 24V 라인에는 24V 모듈, 로직 레벨 신호에는 3-5V 모듈.
- 배선도와 같이 부품을 배선하되, 12V/24V 접지는 ESP8266 GND에서 떨어뜨려 두세요.
- USB 케이블로 ESP8266 보드를 컴퓨터에 연결하세요.
- 컴퓨터에서 Arduino IDE를 여세요.
- 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택하세요.
- 위의 코드를 복사하여 Arduino IDE에서 여세요.
- Arduino IDE의 Upload 버튼을 클릭하여 코드를 컴파일하고 ESP8266에 업로드하세요.
- 시리얼 모니터를 여세요.
- 외부 12V/24V 라인을 몇 번 켰다 껐다 하세요.
- 시리얼 모니터에서 결과를 확인하세요.
시리얼 모니터가 모듈의 상태 LED와 반대로 보고한다면, 액티브 HIGH 모듈입니다. MODULE_ACTIVE_LOW를 false로 설정하고 다시 업로드하세요.
ESP8266은 트랜지스터가 열렸는지 닫혔는지만 보기 때문에, 같은 스케치와 같은 배선이 12 V 소스와 24 V 소스 모두에서 동작합니다. 둘 사이에서 달라지는 것은 어떤 모듈 버전을 샀느냐 하나뿐입니다.
이 회로가 잘 맞는 프로젝트:
- 저렴한 상시 난방 모니터: 12V 모듈이 실내 온도 조절기와 보일러 또는 온수 히터 사이의 12 V 난방 요청 라인을 감시하고, ESP8266은 난방 배선 자체를 전혀 수정하지 않고 하루에 몇 분 동안 실제로 난방이 요청되었는지 기록합니다.
- 24 V 경보 사이렌 감시기: 24V 모듈을 경보 패널의 24 V 사이렌 출력 양단에 걸어 두면, ESP8266은 패널이 작동하는 순간을 알 수 있고 패널은 자체의 절연된 접지를 유지합니다.
- 범용 장치 켜짐/꺼짐 모니터: DC로 동작하는 펌프, 밸브, 컨택터, 램프에 병렬로 연결하면, 같은 회로가 가동 시간 카운터, 기계 유휴 시간 기록, "컨트롤러가 요청했는데 아무것도 시작되지 않음" 경고가 됩니다.
코드 설명
소스 코드의 주석에 포함된 한 줄씩 설명을 확인하세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.
추가 지식
핀 선택은 이 프로젝트에서 ESP8266에만 해당하는 부분이며, 무언가를 나사로 고정하기 전에 제대로 정해 둘 가치가 있습니다.
ESP8266은 사용 가능한 GPIO 핀이 약 11개이며, 서로 바꿔 쓸 수 없습니다. 그중 다섯 개는 내부 풀업이 동작하는 일반 디지털 입력처럼 동작합니다: D1 (GPIO5), D2 (GPIO4), D5 (GPIO14), D6 (GPIO12), D7 (GPIO13). 이 중 어느 것이든 옵토커플러 출력을 연결하기에 좋습니다.
다른 세 개는 부트 스트래핑 핀입니다. GPIO0 (D3)과 GPIO2 (D4)는 보드에 전원이 들어올 때 HIGH여야 하고, GPIO15 (D8)는 LOW여야 합니다. 전원을 넣는 순간 외부 라인에 마침 전원이 들어와 있는 옵토커플러는 출력을 LOW로 유지하므로, D3이나 D4에 연결하면 보드가 스케치를 실행하는 대신 플래시 모드로 들어갈 수 있습니다. 전원을 켤 때 12V/24V 라인에 전원이 있었는지에 따라 달라지므로 고장이 무작위처럼 보이고, 추적하기 매우 괴로운 버그가 됩니다.
GPIO16 (D0)은 다른 이유로 안 됩니다. 칩에서 별도의 핀이며, 다른 핀과 달리 내부 풀업이 없습니다. INPUT_PULLUP을 사용할 수 없고 INPUT_PULLDOWN_16만 가능합니다. 포토트랜지스터 단품은 핀을 아래로 당길 수만 있으므로, 위로 당겨질 수 없는 핀은 아래로 당겨질 기준이 없어 읽은 값이 플로팅됩니다. 칩 단품으로 꼭 D0을 사용해야 한다면, 핀에서 3.3V로 외부 10 kohm 저항을 달고 핀을 일반 INPUT으로 설정하세요.
칩 단품 대신 모듈을 사용하면 이 두 문제가 반대 방향으로 바뀝니다. 출력단에 자체 풀업이 이미 있는 모듈은 핀을 양쪽에서 구동하며 ESP8266의 내부 풀업에 전혀 의존하지 않으므로, D0에 대한 반대 이유가 약해집니다. 하지만 많은 모듈이 컬렉터를 그대로 헤더로 내보내므로, 보드 자체를 보고 여러분의 모듈이 그렇게 만들어졌는지 확인한 후에만 해당됩니다. 부트 스트래핑 핀은 그런 완화가 없습니다. GPIO0 (D3)과 GPIO2 (D4)는 칩이 시작될 때 HIGH여야 하므로 그 순간 모듈 출력이 LOW이면 보드가 정상적으로 부팅되지 않을 수 있고, GPIO15 (D8)는 LOW여야 하므로 모듈 출력이 HIGH이면 같은 문제가 생길 수 있습니다. 전원을 켤 때 출력이 LOW인지 HIGH인지는 모듈의 극성과 외부 라인에 전원이 있었는지에 달려 있으며, 둘 다 소프트웨어로 조정할 수 없습니다. 어떤 종류의 모듈을 가지고 있든 D3, D4, D8은 이 회로에 사용하지 마세요.
풀업 값 자체는 여유가 있습니다. ESP8266 내부 풀업은 수십 킬로옴 수준이므로 포토트랜지스터에 수십 마이크로암페어만 요구합니다. 이는 포토트랜지스터가 싱크할 수 있는 50 mA보다 훨씬 낮고, LED 측을 10 mA로 구동하는 낮은 CTR의 PC817도 쉽게 도달할 수 있습니다. 3.3V로 연결한 외부 10 kohm 저항도 똑같이 잘 동작하며, 긴 케이블에서 전기 노이즈에 조금 더 강하므로 모듈이 제어 캐비닛 안에 몇 미터 떨어져 있을 때 고려할 만합니다.
이 보드에서 가장 안전한 구성은 D 번호가 붙은 일반 핀 중 하나에 소프트웨어로 INPUT_PULLUP을 켜고, 스케치가 보드 인쇄 표시와 일치하도록 Dx 표시로 부르는 것임이 분명합니다. PC817에 관한 나머지 내용은 어떤 마이크로컨트롤러에서든 같습니다. 핀 선택이 ESP8266이 여러분 대신 정해 주는 유일한 결정입니다.