성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
[공진영] 안녕하세요 좋은글 감사합니다. 현재 제가 wpf로 관제 모...
[정성태] The Windows Registry Adventure #1: ...
[정성태] systemd for Developers I ; https:/...
[정성태] 엄밀히 object 타입의 인스턴스가 다른 타입으로 형변환 가능...
[정성태] 아래의 글에서 나오는 "Windows Application Pa...
[정성태] The history of calling conventions,...
[정성태] Secure and Deploy .NET Windows Form...
[정성태] Get Started with Milvus Vector DB i...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어</h1> <p> 개발자라면 다들 공감하시겠지만, 사실 업무와 공부의 경계가 많이 모호한 면이 있습니다. 이 때문에 회사 컴퓨터를 켜놓고 집에서 접속해야 할 경우가 종종 있는데요, 그렇다 해도 많지는 않아서 항상 켜놓기에는 전기 사용이 좀 아깝습니다. 하지만, 꺼놓고 퇴근하자니 또 집에서 필요해지면 아쉽기 때문에 그러는 것도 좀 망설여지는데요.<br /> <br /> 그래서 ^^ 만들었습니다. 회사 컴퓨터의 전원을 원격으로 제어가 가능하도록 하는 것입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 이를 구현하기 위해, 6년 전에 구매했던 - 먼지가 내려앉은 넷두이노를 꺼냈습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET Micro Framework - 넷두이노 플러스 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1392'>http://www.sysnet.pe.kr/2/0/1392</a> </pre> <br /> (새 버전의 넷두이노가 나와서 이제는 지원도 끊겨 버렸지만) 마지막 firmware 버전인 4.2.0.1로 <a target='tab' href='http://www.sysnet.pe.kr/2/0/1396'>업그레이드</a>까지 하고 네트워크 구현까지 완료했지만... 아쉽게도 이더넷 LAN 포트가 접촉 불량 문제가 발생했습니다. 납땜의 문제는 아닌 것 같고 랜 소켓 자체가 내부에 이더넷 케이블과 접촉되는 공간이 유격이 발생한 듯 케이블을 살짝 움직일 때마다 네트워크 접속이 끊어져 버리는 것입니다.<br /> <br /> 할 수 없이 ^^; 다시 먼지가 쌓이도록 창고에 두고 그다음 제가 가지고 있는 보드 중,<br /> <br /> <ul> <li><a target='tab' href='http://www.sysnet.pe.kr/2/0/11372'>라즈베리 파이 제로 W</a></li> <li><a target='tab' href='http://www.sysnet.pe.kr/2/0/11595'>ESP8266(LiLon NodeMCU V3)</a></li> <li><a target='tab' href='http://www.sysnet.pe.kr/2/0/11597'>Thinary Electronic - ATmega328PB 아두이노 호환 보드</a> </li><br /> </ul> <br /> 후보로 떠오른 것이 "라즈베리 파이 제로 W"입니다. WiFi를 기본 제공하고 RPi의 특성상 PC 환경에 준하는 개발 환경을 가지고 있기 때문에 프로그램 작성도 매우 용이합니다.<br /> <br /> 한 가지 아쉬운 것은 제가 가지고 있는 "라즈베리 파이 제로 W"가 Data Pin 쪽에 헤더가 납땜되어 있지 않은 모델이라는 점입니다. (혹시, 제로 W 모델을 구매하시려는 분이 있다면 "<a target='tab' href='https://www.adafruit.com/product/3708'>with Headers</a>" 모델을 추천합니다.)<br /> <br /> [그림 - 출처 <a target='tab' href='http://www.icbanq.com/P008219607'>http://www.icbanq.com/P008219607</a>]<br /> <img width='305px' alt='raspberry_pi_zero_w_with_no_pin_header_1.jpg' src='/SysWebRes/bbs/raspberry_pi_zero_w_with_no_pin_header_1.jpg' /><br /> <br /> 그래서 저걸로 Data Pin을 제어하려면 핀 헤더를 납땜해야 하는 불편함이 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How to solder header pins to the Raspberry Pi Zero (W) ; <a target='tab' href='https://www.youtube.com/watch?v=UDdbaMk39tM'>https://www.youtube.com/watch?v=UDdbaMk39tM</a> </pre> <br /> 그런데, 제가 인두기가 없습니다. ^^ <br /> <br /> <hr style='width: 50%' /><br /> <br /> 고민하던 차에, 생각난 것이 바로 제 책상에 있는 Synology NAS(DS216+II)입니다. 항상 켜져 있는 데다, 리눅스 운영체제가 올라가 있기 때문에 프로그램도 마음대로 올릴 수 있고 게다가 .NET Core 프로그램도 제작할 수 있습니다.<br /> <br /> 제어 환경이 결정되었으니, 이제 남은 문제는 어떻게 컴퓨터의 전원을 껐다 켰다 할 것이냐입니다. 사실 이것은 매우 간단한데, 컴퓨터 케이스의 전원 스위치 동작을 그대로 따라 해 주기만 하면 되기 때문입니다. 가령, 제가 가지고 있는 "<a target='tab' href='https://www.gigabyte.com/Motherboard/GA-Z87-HD3-rev-1x#ov'>GIGABYTE GA-Z87-HD3</a>" 메인 보드는 다음과 같은 PW+, PW- 핀 배열을 가지고 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='turn_on_the_device_1.png' src='/SysWebRes/bbs/turn_on_the_device_1.png' /><br /> <br /> PW+와 PW- 간의 전압을 측정해 보면 약 3.347V가 나오는데, 그렇다는 것은 곧 컴퓨터 케이스의 전원 스위치가 말 그대로 "전선을 연결하는" 정도의 역할만 한다는 것이고, 외부에서 이것을 제어하려면 마찬가지로 별도 전원을 인가할 필요 없이 그냥 "연결"만 하면 되는 식입니다. 오호... 그러고 보니 그 용도로 딱인 장치를 전에 살펴본 적이 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11606'>http://www.sysnet.pe.kr/2/0/11606</a> </pre> <br /> 위의 글에서 설명한 FTDI 장치의 DTR 라인은 아두이노의 데이터 핀처럼 별도의 전원을 제공하는 것이 아닌, 단순히 선을 연결해 주는 동작만 하는 것이기 때문에 컴퓨터 전원 스위치를 켜는 용도로 사용할 수 있습니다.<br /> <br /> 따라서, FTDI의 GND를 PW-에 연결하고 DTR 선을 PW+에 연결하면 됩니다.<br /> <br /> <img alt='turn_on_the_device_2.png' src='/SysWebRes/bbs/turn_on_the_device_2.png' /><br /> <br /> 이제 남은 작업은 NAS 장치에서 DTR 신호를 제어할 소프트웨어를 만드는 것인데 이 방법은 이미 아래의 글에서 모두 설명했습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11733'>http://www.sysnet.pe.kr/2/0/11733</a> Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11734'>http://www.sysnet.pe.kr/2/0/11734</a> </pre> <br /> 저는 docker를 이용해 C#으로 만든 .NET Core 프로그램을 제작해 올렸습니다. docker의 container 관리 덕분에 마치 NT 서비스처럼 재부팅 시에도 container를 자동 실행해 주므로 별도의 관리 절차는 필요하지 않았습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 자, 이제 ^^ 컴퓨터의 제어판에서 "Power Options"를 들어가 컴퓨터 전원 스위치가 눌렸을 때 "최대 절전 모드(Hibernation)"로 들어가도록 설정합니다. 그다음, 원하는 시기에 소프트웨어로 "FT_SetDtr/FT_ClrDtr" 신호를 전달하도록 하면 컴퓨터가 켜져 있는 경우 최대 절전 모드로 들어가고, 꺼져 있는 경우에는 컴퓨터가 켜지게 됩니다.<br /> <br /> 제 경우에는 전에도 다뤘던 Xamarin을 이용해,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Xamarin - 기존 리모컨 기능을 핸드폰의 적외선 송신으로 구현 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11674'>http://www.sysnet.pe.kr/2/0/11674</a> </pre> <br /> 다음과 같이 안드로이드 프로그램을 만들어서,<br /> <br /> <img alt='turn_on_the_device_3.png' src='/SysWebRes/bbs/turn_on_the_device_3.png' /><br /> <br /> 원격에서 제어할 수 있도록 했습니다. ^^<br /> <br /> <hr style='width: 50%' /><br /> <br /> 몇 가지 더 이야기를 해보면.<br /> <br /> 우선, 주의할 것이 하나 있습니다. FTDI 장치와 메인보드 간의 선을 연결 시, 반드시 DTR과 PW+를 연결하고 GND와 PW-를 연결해야 합니다. 컴퓨터 케이스의 Power Switch는 물리적으로 접점이 끊긴 것을 연결하는 것이기 때문에 +/- 극을 맞출 필요가 없지만 FTDI 장치는 극이 맞아야 합니다. 저도 내부적인 FTDI 장치의 배선을 몰라 자세하게 설명할 수는 없지만, 현상 자체는 DTR을 PW-, GND를 PW+에 연결하는 경우 그 순간 컴퓨터 전원이 들어오게 됩니다. 계측기로 + 단자를 DTR에 - 단자를 GND에 놓고 측정하면 저항이 무한대가 되지만, 그 반대로 하는 경우에는 약 250K 정도의 저항이 측정되는 걸로 봐서 선이 연결된 것과 유사한 역할을 하는 것 같습니다.<br /> <br /> 또 다른 이야기가 있다면 바로 "마감"입니다. 대충 해 놓으면 동작은 하겠지만 실 사용 환경에서라면 좀 더 완성도를 높이는 게 좋습니다. 일단 FTDI와 NAS를 연결하는 것은 USB 케이블로 깔끔하게 해결은 됩니다. 하지만 FTDI의 DTR, GND와 메인 보드 간의 연결을 하는 것은 그다지 매끄럽게 해결이 안 됩니다. 우선, 기존의 컴퓨터 케이스에 있는 Power Switch를 안 쓰는 걸로 가정하고 다음의 케이블을 사용할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PC 파워 전원 스위치 케이블/메인보드연결 ; <a target='tab' href='http://item.gmarket.co.kr/detailview/item.asp?goodscode=995567752'>http://item.gmarket.co.kr/detailview/item.asp?goodscode=995567752</a> </pre> <br /> <img alt='computer_power_cable_1.png' src='/SysWebRes/bbs/computer_power_cable_1.png' /><br /> <br /> Female Header 부분이 메인 보드의 Power Pin에 정확히 연결할 수 있기 때문에 편리하긴 한데 문제는 반대쪽 스위치를 잘라내고 FTDI의 DTR, GND에 연결하는 것이 불편합니다. 이 케이블의 선은 단선이 아닌 연선인데다 제가 가지고 있는 와이어 스트리퍼 기준으로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Vessel 3500E-2 ; <a target='tab' href='https://www.eleparts.co.kr/goods/view?no=5803'>https://www.eleparts.co.kr/goods/view?no=5803</a> </pre> <br /> 24AWG(0.5mm)로 피복이 벗겨지는데, 단선도 아닌 연선이어서 FTDI의 DTR, GND 소켓에 끼우기에는 너무 얇습니다. (악어 클립으로 집는 것도 그다지 권장할 수 없습니다.)<br /> <br /> 차라리 그보다는 22AWG 단선</a>으로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 테프론선 0.6T (빨강) 1M ; <a target='tab' href='http://devicemart.co.kr/goods/view?no=34217'>http://devicemart.co.kr/goods/view?no=34217</a> </pre> <br /> "<a target='tab' href='http://item.gmarket.co.kr/detailview/item.asp?goodscode=995567752'>PC 파워 전원 스위치 케이블</a>"과 납땜으로 연결하거나, 아니면 <a target='tab' href='https://www.eleparts.co.kr/goods/view?no=12162'>Female-Female 케이블</a>을 22AWG 단선으로 FTDI와 납땜 없이 연결하는 것이 좋습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 위에서 설명한 방법으로는, 아쉽게도 컴퓨터 케이스의 파워 스위치를 사용할 수 없습니다. (아니면 잘라서 납땜을 해야 합니다.) 물론, 그렇게 하면 불편할 것이기 때문에 방법을 좀 더 찾아봤고 그러다 알게 된 것이 바로 "무탈피 커넥터"입니다. <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 무탈피커넥터 (T-11) ; <a target='tab' href='https://www.eleparts.co.kr/goods/view?no=6508906'>https://www.eleparts.co.kr/goods/view?no=6508906</a> </pre> <br /> T 타입의 커넥터는 기존 선을 (자르지 않으면서) 새로운 선과 연결할 수 있으므로 다음과 같이 납땜 없이도 간편하게 연결할 수 있습니다.<br /> <br /> <img alt='turn_on_the_device_4.jpg' src='/SysWebRes/bbs/turn_on_the_device_4.jpg' /><br /> <br /> 그런데, 이것도 문제가 약간 있습니다. 위의 T 타입 커넥터가 연결할 수 있는 전선이 AWG24 ~ 20규격인데, FTDI 측의 <a target='tab' href='http://devicemart.co.kr/goods/view?no=34217'>22AWG 단선</a>과는 잘 연결할 수 있지만 컴퓨터 케이스와 메인보드에 연결하는 Power 핀의 전선이 (아마도) 26AWG로 매우 얇아서 커넥터가 잘 잇지 못할 것 같았습니다. 하지만 설령 통전이 안 된다 해도 기존 선을 자르거나 하는 것은 아니기 때문에 밑져야 본전이라는 심정으로 부품 구매를 해서 연결 시도를 해봤는데요.<br /> <br /> 우선, 집에 있는 컴퓨터부터 테스트를 해봤습니다. 그러니까,,,, 아주 꽉 ^^; 눌러주면 연결이 됩니다. 확인을 위해 멀티미터로 통전 테스트를 하면서 진행했는데 통전이 될 때까지 꽉꽉 눌러주면 ^^; 됩니다. 그리고 회사에 있는 컴퓨터 역시, 그렇게 해서 잘 연결을 했습니다. 참고로, 손으로 누를 수 있는 정도가 아니므로 반드시 펜치 같은 도구가 있어야만 합니다.<br /> <br /> 암튼, 이렇게 해서 ^^ 그나마 지저분하지 않게 잘 마감을 했습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 커넥터의 종류 전선-기판용 커넥터(Wire to Board) - 전선과 기판을 접속할 때 사용하는 커넥터 - 핀 수 : 1핀에서 수십 핀까지 다양 - Pitch: 2.00, 2.50, 3.50, 3.96mm 등 다양 - 구성: 하우징(Housing), 웨이퍼(Wafer) 핀 헤더(Pin Header) 및 헤더 소켓(Header Socket) - 종류: Single, Dual, Right angle 등 - Pitch: 1.27, 2.0, 2.54mm - 사용하고자 하는 핀 수에 맞게 잘라서 사용 IC 소켓 - 종류: 일반 DIP 타입, Round 타입 - IC를 반복하여 착탈 사용하는 경우에는 반드시 Round 타입의 소켓을 사용 - 일반 DIP 타입은 장착 후 탈거 시 핀이 손상되어 재사용이 불가능함 - 핀 수: 8, 14, 16, 18, 20, 24, 28, 32, 40핀 등 D-SUB 커넥터 - 컴퓨터와 주변기기를 접속할 때에 많이 쓰임 - 종류: 전선 납땜 타입, 기판 납땜 타입, IDC 타입 등 - 전선 납땜 타입의 경우 케이스를 사용하여 마감 처리 - 9핀은 RS232 직렬 통신용으로 쓰이고, 25핀은 PC의 병렬 포트에 사용 리본 케이블 커넥터 - IDC(Insulation Displacement Connector)라고도 불림 - PCB 간의 신호 전송을 위한 접속에 사용 Circular 커넥터 - 대형의 커넥터 - 용도: 기계나 군용 장비의 신호 전달용, 전원 접속용 - 구성: Plug, Receptacle 터미널 블록 - 전선의 접속점 - 용도: 전선의 인입, 인출되는 곳에 사용, 전류의 과부하를 방지하고 전선의 유지보수를 한층 쉽게 할 수 있음 - 단자 별로 허용 전류가 다른 만큼 적정 용량에 맞는 제품을 선정해 사용 - 종류: 원터치 타입(Screwless), 유럽식 PCB 타입(미니어처 타입), 착탈식(헤더, 플러그) 타입, 배리어 PCB 타입, 릴레이 타입 등 </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1311
(왼쪽의 숫자를 입력해야 합니다.)