안녕하세요! 오늘은 PC 원격 부팅에 대한 이야기와 함께, 일반적인 방법으로는 해결하기 힘든 ‘무선 랜(Wi-Fi) 환경에서의 PC 원격 부팅’을 하드웨어 Hack 방식으로 스마트하게 해결한 DIY 프로젝트를 소개해 드려고 합니다.
1. 왜 이런 장치가 필요했을까? (기획 배경)
유선 랜의 치트키, WOL (Wake on LAN)
집이나 사무실에서 외부의 PC를 원격으로 켜야 할 때, 가장 먼저 떠올리는 기술은 WOL(Wake on LAN)입니다. 메인보드와 공유기 설정을 조금만 만져주면 외부에서 매직 패킷(Magic Packet)을 보내 PC를 아주 쉽게 켤 수 있죠.
- 잠깐, 원격으로 끌 수도 있나요?네, 가능합니다. 다만 WOL은 ‘켜는’ 기술이고, 원격으로 끌 때는 별도의 소프트웨어(예: Chrome 원격 데스크톱, TeamViewer, 또는 Windows의
shutdown명령어를 활용한 배치 파일 등)를 이용해 OS 내부에서 정상 종료 신호를 보내야 합니다.
무선 랜(Wi-Fi) 환경의 절망, WoWLAN의 한계
문제는 PC를 무선 랜(Wi-Fi)으로 연결해 사용하는 경우입니다. 무선 랜에도 WOL과 같은 WoWLAN(Wake on Wireless LAN) 기능이 존재하긴 합니다.
하지만 설정이 무척 까다롭고, 공유기나 무선 랜카드의 칩셋 궁합을 심하게 타며, PC가 깊은 대기 상태(S3/S4)로 들어가면 무선 연결이 툭 끊겨버려 정작 필요할 때 작동하지 않는 경우가 허다합니다. 사실상 실무에서 쓰기엔 안정성이 많이 떨어지죠.
“그럼 PC가 켜지는 다른 조건을 이용하면 어떨까?”
여기서 아이디어가 출발했습니다. PC는 꺼져 있거나 대기 상태일 때도 유선 USB 키보드나 마우스를 딸깍 누르면 잠에서 깨어나는 기능(Wake on USB)이 기본적으로 활성화되어 있는 경우가 많습니다.
“그렇다면 저렴한 Wi-Fi MCU(ESP32-C3)를 키보드 내부에 심어서, 웹 서버로 신호를 받으면 키보드가 눌린 것처럼 신호를 주면 되잖아?”
2. 개발 과정과 뜻밖의 난관: ESP32-C3의 하드웨어 제약
처음 구상은 아주 단순했습니다. ESP32-C3를 PC와 USB로 연결하고, 아두이노의 USB HID 라이브러리(USBHIDKeyboard)를 써서 웹 요청이 들어오면 가상의 스페이스바를 쾅 쳐주는 ‘소프트웨어 방식’이었습니다.
🚨 뜻밖의 난관: C3에는 Native HID 기능이 없다!
하지만 개발을 진행하면서 중요한 하드웨어 제약을 알게 되었습니다. ESP32-C3는 내장된 USB 인터페이스가 시리얼 콘솔(CDC) 및 디버깅용으로만 제한되어 있어, 스스로 마우스나 키보드 같은 ‘내이티브 USB HID 장치’로 변신할 수 없다는 사실이었습니다. (이 기능은 상위 모델인 ESP32-S2나 S3에서만 지원됩니다.)
3. 신의 한 수: “선 3개만 따자!” 물리적 우회 전략
소프트웨어적인 USB 신호 전송이 불가능하다면, 방법은 하나. 물리적으로 키보드 스위치를 누른 것처럼 속이는 하드웨어 해킹이었습니다.
처음에는 안 쓰는 키보드 기판(멤버레인 시트 포함)을 통째로 뜯어서 매트릭스 단자를 분석하려고 했습니다. 하지만 굳이 그럴 필요 없이, 지금 실제 사용 중인 유선 키보드 안에서 선 3개만 ESP32-C3로 연결하면 기존 키보드 기능도 완벽히 유지하면서 원격 스위치를 심을 수 있다는 엄청난 효율적 결론에 도달했습니다.
🛠️ 하드웨어 준비물
- ESP32-C3 개발 보드 (Mini 타입 등 소형일수록 매립하기 좋습니다.)
- 소형 NPN 트랜지스터 (예: C1815, 2N2222) 또는 포토커플러(PC817)
- 1k$,\Omega$ 저항 1개
- 약간의 전선과 인두기
🔌 핵심 연결 메커니즘 (3선 연결법)
키보드가 대기 상태에서도 PC로부터 5V 전원을 공급받는다는 점을 100% 활용합니다.
- 전원선 (5V): 키보드 USB 입력단의 5V 라인 ➡️ ESP32-C3의
5V(또는VIN) - 그라운드 (0V/GND): 키보드의 GND 라인 ➡️ ESP32-C3의
GND및 트랜지스터의Emitter - 제어선 (신호 1선): 키보드 컨트롤러 단자 중 핀셋 테스트로 찾아낸 ‘누르면 키가 입력되는 신호선’ ➡️ 트랜지스터의
Collector
💡 꿀팁 (스위치 단자 찾는 법): 키보드를 PC에 연결하고 메모장을 켠 뒤, 핀셋으로 기판의 금속 단자들을 툭툭 쇼트시켜 봅니다. 이때 메모장에 일반 글자나 스페이스바가 입력되는 단자 조합을 찾습니다. 그중 하나가 GND라면 NPN 트랜지스터로 대치 가능하므로, 선 3개만으로 회로가 끝납니다! (만약 두 단자 모두 GND가 아니라면 포토커플러 PC817을 사용해 4선으로 연결하면 안전합니다.)

4. 소프트웨어 구현 (아두이노 소스코드)
ESP32-C3에 업로드할 코드입니다. 웹 브라우저에서 http://[ESP32_IP]/wake로 접속하면 지정된 GPIO 핀을 아주 잠시 동안 HIGH로 만들어서 트랜지스터 스위치를 붙였다가 떼어줍니다. (실제 손으로 키를 탁 누르고 떼는 동작과 같습니다.)
마이크로파이썬 소스 코드 (main.py)
5. 프로젝트를 마치며
이번 DIY의 가장 큰 수확은 하드웨어의 제약(ESP32-C3의 HID 미지원)을 만났을 때, 발상을 전환하여 더 직관적이고 효율적인 물리적 우회로를 찾아낸 점입니다.
키보드를 통째로 새로 만드는 대신 기존 키보드의 5V, GND, 신호선 단 3개만 링크함으로써 부품 부피도 최소화했고, 평소에는 평범한 키보드로 쓰다가 필요할 때는 세계 어디서든 웹 접속 한 번으로 PC를 깨울 수 있는 완벽한 가성비 스마트 스위치가 완성되었습니다.
무선 랜 환경이라 WOL 설정을 포기하셨던 분들, 혹은 메인보드의 파워 스위치에서 선을 길게 따오기 번거로우셨던 분들은 책상 위에 늘 놓여있는 ‘유선 키보드’를 활용한 이 방식을 꼭 한 번 도전해 보시기 바랍니다!
“3선식 아니고 4선식으로 연결해야 할 경우”
기존 키보드 회로를 분석했을 때 핀셋으로 쇼트시켜서 글자가 나오는 단자 2개를 조합했는데, 이 두 단자 중 그 어느 것도 키보드의 원래 0V(GND)와 연결되어 있지 않은 경우가 있을 수 있습니다.
이를 매트릭스 회로 구조에서 “4점식(또는 4선식) 연결 방식”이라고 부를 수 있습니다. 가로축 신호선과 세로축 신호선이 공중에 떠 있는 상태에서 서로 만나야만 하기 때문에, 앞서 설명한 3선식(트랜지스터) 방식을 쓰면 오작동하거나 쇼트가 나지 않습니다.
이때는 처음에 언급했던 포토커플러(PC817)가 구원투수가 됩니다. 왜 이 방식이 필요하고 어떻게 연결하는지 명확하게 정리해 드릴게요.
1. 왜 4점식일 때는 트랜지스터를 쓰면 안 될까?
일반적인 NPN 트랜지스터나 MOSFET은 전류를 한 방향으로 흘려보내며, 반드시 기준점이 되는 GND가 서로 묶여 있어야만 스위치가 열립니다.
만약 키보드 기판의 두 단자가 모두 GND가 아니라 각각 미세한 전압이 흐르고 있는 신호선들이라면, 트랜지스터를 연결하는 순간 키보드 회로의 전압이 ESP32의 GND로 강제로 끌려 내려가면서 키보드 컨트롤러 칩이 먹통이 되거나 PC가 키보드 오류를 뱉게 됩니다.
2. 해결책: 포토커플러(PC817)를 이용한 4선식 회로
포토커플러는 내부가 빛(LED)으로 신호를 전달하기 때문에, ESP32의 전원/GND와 키보드의 전원/GND를 전기적으로 완전히 차단(Insulation)해 줍니다. 쉽게 말해, 공중에 떠 있는 키보드 선 2개를 아무런 간섭 없이 순수하게 ‘뚝딱’ 붙여줄 수 있는 마법의 부품입니다.
이때는 키보드에서 총 4개의 선이 나와야 합니다.
- 전원 공급용 2선: 키보드 5V, 키보드 GND (ESP32-C3 구동용)
- 스위치 제어용 2선: 키보드 단자 A, 키보드 단자 B (PC817 스위치 연결용)
3. 4점식 하드웨어 연결 방법
PC817의 핀 번호(점 표시가 1번)를 확인하고 다음과 같이 연결합니다.
1) ESP32-C3 쪽 연결 (전원 및 제어)
- 키보드 5V ➡️ ESP32-C3
5V(VIN) - 키보드 GND ➡️ ESP32-C3
GND - ESP32-C3 GPIO 4 ➡️
220옴 저항➡️ PC8171번 핀(Anode) - ESP32-C3 GND ➡️ PC817
2번 핀(Cathode)
2) 키보드 신호 단자 쪽 연결 (순수 스위치)
- 키보드 단자 A (전압이 조금 더 높은 쪽) ➡️ PC817
4번 핀(Collector) - 키보드 단자 B (전압이 낮은 쪽) ➡️ PC817
3번 핀(Emitter)
💡 단자 A, B 전압 확인 팁: 멀티미터(직류 전압 모드)로 키보드 단자 2개를 찍어봤을 때, 빨간색 리드봉을 댄 곳이
+전압으로 나온다면 그 단자를 4번 핀에, 검은색 리드봉이 닿은 단자를 3번 핀에 연결하시면 됩니다.
4. 소프트웨어(마이크로파이썬) 코드는 그대로!
하드웨어 제어 방식이 트랜지스터에서 포토커플러로 바뀌었을 뿐, ESP32-C3 입장에서는 GPIO 4번 핀을 HIGH로 켰다가 LOW로 끄는 논리가 완전히 똑같습니다. 따라서 앞서 작성해 드린 마이크로파이썬(또는 아두이노) 소스코드를 수정 없이 그대로 사용하시면 됩니다.
📝 요약 한 줄
“만약 키보드 기판을 테스트했을 때 쇼트 단자 중 GND(0V)가 없는 독립된 신호선 조합(4점식) 구조라면, 트랜지스터 대신 **포토커플러(PC817)**를 사용해 회로를 완전히 절연시켜 선 4개로 연결하면 안전하게 성공할 수 있습니다!”
” 실제 사용중인 로지텍 키보드 뜯어서 확인해 보니”
1. 일반 TR이나 MOSFET을 쓸 수 없었던 이유 (키보드 실측 결과)
처음에는 일반적인 디지털 회로처럼 스위치가 0V와 5V 사이를 오가는 단순한 구조일 것으로 예상했습니다. 그 구조라면 N-Channel MOSFET이나 트랜지스터(TR) 하나로 쉽게 쇼트 신호를 만들 수 있기 때문입니다.
하지만 멀티미터로 실제 키보드 매트릭스 핀을 정밀하게 찍어본 결과는 완전히 달랐습니다.
- 실측 결과: 여러 단자 모두 똑같이 4.6V 근방을 유지하고 있었습니다.
- 신호 감지 방식: 키가 눌리는 순간을 감지하는 메커니즘이 0V-5V의 확실한 논리 레벨이 아니라, 두 핀 사이의 고작 0.03V 내외의 미세한 전압 차이를 가로채는 방식이었습니다.
여기에 일반 TR을 잘못 물렸다간 메인보드의 그라운드(GND) 노이즈나 미세한 누설 전류 때문에 키보드 컨트롤러가 오작동할 위험이 큽니다. 제어 측(ESP32)과 피제어 측(키보드)의 회로를 전기적으로 완벽하게 분리(절연)하면서 스위칭만 해줄 수 있는 ‘포토커플러’가 강제되는 상황이었습니다.
2. 자작 포토커플러(IR 소자) 테스트와 기성품 적출
처음에는 부품 통에 기성품 포토커플러가 보이지 않아, 적외선(IR) 송신 LED와 수신 포토트랜지스터를 일대일로 마주 보게 정렬한 뒤 검은색 절연테이프로 암막 처리를 하여 ‘수제 포토커플러’를 직접 제작해 테스트했습니다.
이 수제 소자를 테스트해 보니 예상외의 재밌는 결과가 나왔습니다. ESP32로 신호를 주고 멀티미터의 다이오드 모드로 개방 상태를 측정했을 때, 내부 광축이 정밀하게 맞았는지 순방향 전압 강하가 0.1V대로 떨어졌고 저항 모드에서는 90옴 근처가 찍혔습니다.
나중에 고장 난 스마트폰 충전기(아답터)의 고압-저압 경계선 회로에서 적출한 기성품 PC817과 비교했을 때, 수제 소자가 오히려 테스터기 상에서 더 낮은 저항 특성을 보여주며 준수한 성능을 증명했습니다. (기성품은 반도체 고유의 문턱 전압 때문에 저항 모드에서 187옴 수준의 수치를 띄우며 테스터기를 오해하게 만드는 특성이 있습니다.)
결과적으로 두 소자 모두 키보드 칩이 인식하기에는 차고 넘치는 최상급 스위치 상태(0.1V대 전압 강하)를 달성했습니다. 다만 장기적인 물리적 내구성과 키보드 내부 매립을 위한 부피를 고려해, 최종 마감은 고장 난 어댑터에서 적출한 기성품 PC817을 사용하기로 결정했습니다.
3. 최종 회로 구성 (단 3줄의 배선)
최종 완성된 회로는 군더더기 없이 심플합니다. 복잡한 주변 소자 없이 저항 하나와 포토커플러 하나로 끝납니다.
- 입력 제어부: ESP32-C3의
GPIO 4번핀 ➡️ 220옴 저항 ➡️ 포토커플러 1번 핀(Anode)으로 연결하고, 포토커플러 2번 핀(Cathode)은 ESP32의GND로 묶어줍니다. - 출력 스위치부: 포토커플러의 4번 핀(Collector)과 3번 핀(Emitter)을 키보드 우측 화살표(
→) 단자의 높은 전압(+) 쪽과 낮은 전압(-) 쪽에 각각 연결합니다.
테스트 대상으로 최종 낙점한 우측 화살표(→) 키는 탁월한 선택이었습니다. 메모장 등의 편집기를 켜둔 상태에서 ESP32 웹 버튼을 누르면 커서가 오른쪽으로 툭 한 칸 이동하는 것으로 오작동 없이 확실한 시각적 피드백을 줍니다. 나중에 PC가 켜진 실사용 환경에서도 화면에 불필요한 문자가 무한 입력되거나 시스템 창이 강제로 열리는 리스크가 없어 가장 안전합니다.

알류미늄 테이프 가늘게 자른 것이나 랩핑선을 이용해서 멘브레인 핀 2개 따오기.
키보드안에 포토 커플링과 저항 넣어서 배선하기.
ESP32-C3 전원선은 랩핑선보다 굵은 선 사용하기.
키보드 외부로 꼽을 핀 소켓와 ESP32-C3 장착.
4. 복병의 등장: 전원 부족으로 인한 무한 리부팅 현상
회로 배선을 마치고 실전 테스트를 진행하던 중, 예상치 못한 하드웨어 복병을 만났습니다. 웹 버튼을 누르거나 ESP32-C3가 와이파이(Wi-Fi) 통신을 시작할 때마다 칩이 자꾸 죽으면서 무한 리부팅(Brownout)되는 현상이 발생한 것입니다.
- 원인 분석: 원인은 키보드 순정 내부 배선에 있었습니다. 일반적인 순수 키보드는 구동할 때 전력을 0.1W 이하로 극도로 적게 소비합니다. 그렇다 보니 기성품 키보드 내부에 들어가는 순정 USB 케이블은 데이터 송수신과 이 미세한 전류만을 감당하기 위해 선 두께(AWG)가 매우 얇게 설계되어 있습니다. 반면, ESP32-C3가 와이파이(Wi-Fi) 통신을 시작하면 순간적으로 0.5W 이상, 피크치에는 그보다 훨씬 높은 전력을 잡아먹습니다. 키보드 대비 최소 5배 이상의 전력이 급격하게 필요한 것입니다. 이 상태에서 얇은 케이블을 공유해 쓰다 보니, 전원선의 저항 때문에 순간적으로 전압이 급격하게 떨어지는 전압 강하(Brownout) 현상이 발생했고, 결국 칩이 버티지 못하고 무한 리부팅되는 결과로 이어졌던 것입니다.
- 임시방편 솔루션 (와이파이 출력 하향): 원래대로라면 두꺼운 USB 케이블로 전원선을 전면 교체하는 것이 정석이지만, 키보드 하우징의 가공 편의성을 위해 소프트웨어적으로 우회하는 방법을 선택했습니다. 마이크로파이썬 소스코드에서 ESP32-C3의 Wi-Fi 송신 신호 강도(TX Power)를 강제로 낮추는 옵션을 추가했습니다. 신호 출력을 깎아 전력 소모의 피크치를 낮추자, 다행히 전압 강하가 선을 넘지 않으면서 리부팅 현상을 깔끔하게 해결할 수 있었습니다. 만약 거실 공유기와 거리가 아주 멀지 않은 환경이라면 이 정도의 신호 제어만으로도 IoT 기능을 안정적으로 구동하기에 충분합니다.
“장치관리자에 HID 키보드 장치가 여러개 인데 어느게 내가 쓰고 있는 키보드인지 알 수있는 방법은?”
장치 관리자에 똑같은 이름의 ‘HID 키보드 장치’가 여러 개 떠 있으면 내가 지금 타이핑하고 있는 진짜 키보드가 무엇인지 찾기 참 난감하죠. (이유는 마우스나 메인보드, 심지어 그래픽 카드 제어 프로그램까지도 매크로 기능을 위해 가짜 키보드 드라이버를 심어두기 때문입니다.)
지금 손으로 누르고 있는 진짜 유선 키보드를 단 10초 만에 확실하게 찾아내는 3가지 방법을 알려드릴게요. 뒤로 갈수록 확실한 방법입니다.
방법 1: “연결별 보기”로 변경하기 (가장 직관적)
기본 장치 관리자 화면은 종류별로 묶여 있어서 찾기 어렵습니다. 메인보드의 USB 포트에 꽂힌 경로를 추적하면 쉽게 찾을 수 있습니다.
- 장치 관리자 상단 메뉴에서 [보기(V)] ➡️ [디바이스 연결별(V)]을 클릭합니다.
- 목록이 트리 구조로 바뀝니다. 여기서
ACPI x64 기반 PC➡️Microsoft ACPI-Compliant System순으로 하위 메뉴를 계속 엽니다. - 중간쯤 내려가다 보면
PCI Express 루트 복합체아래에Intel(R) USB 3.10 확장 가능한 호스트 컨트롤러(또는 AMD USB…)가 보입니다. - 그 하위 트리를 열면
USB 루트 허브가 나오고, 거기에 현재 메인보드 USB 포트에 물리적으로 꽂혀 있는 진짜 유선 키보드 이름이 트리 구조로 명확하게 나타납니다.
방법 2: 드라이버 “속성”에서 위치 확인하기
여러 개의 HID 키보드 장치 중에서 진짜 전압과 신호를 주고받는 장치를 속성에서 걸러내는 방법입니다.
- ‘HID 키보드 장치’를 마우스 우클릭한 뒤 [속성]으로 들어갑니다.
- [일반] 탭 중간에 있는 ‘위치:’ 항목을 확인합니다.
- 가짜 프로그램 드라이버들은 위치가
알 수 없음이나 비어 있는 경우가 많습니다. - 반면, 진짜 유선 키보드는
USB 입력 장치또는on USB Device라고 물리적인 포트 위치가 명확하게 적혀 있습니다.
방법 3: 하드웨어 ID(속성) 확인하기 (가장 확실함)
키보드 제조사에는 고유의 ID 코드가 있습니다. 이 코드를 확인하면 100% 구별할 수 있습니다.
- 아무 HID 키보드 장치나 우클릭 후 [속성]으로 들어갑니다.
- [자세히] 탭을 누른 뒤, 속성 드롭다운 메뉴에서 [하드웨어 ID]를 선택합니다.
- 아래 값(Value) 상자에 영어와 숫자가 섞인 문장이 뜹니다.
HID\VID_XXXX&PID_XXXX...모양을 띱니다.
- 여기서
VID_뒤에 붙은 네 자리 숫자가 제조사 코드(Vendor ID)입니다.- 이 네 자리 코드를 구글에
USB VID XXXX라고 검색하면 어느 회사 제품인지 바로 나옵니다. 지금 책상 위에 두고 쓰시는 키보드 브랜드(예: Logitech, Corsair, 앱코 등)의 ID가 적힌 녀석이 바로 진짜 유선 키보드 장치입니다!
- 이 네 자리 코드를 구글에
💡 보너스 팁 (키보드 개조 DIY용)
나중에 개조한 ESP32-C3 장치를 PC에 연결하게 되면, 드라이버 이름은 똑같이 ‘HID 키보드 장치’로 잡히더라도 방법 3을 통해 [하드웨어 ID]를 열어보면 고유 코드가 다르게 뜨기 때문에 내가 만든 스마트 스위치 장치만 귀신같이 골라내서 드라이버 관리를 하실 수 있습니다!
ex) USB VID 046d 로지텍


답글 남기기
댓글을 달기 위해서는 로그인해야합니다.