Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어

개발자라면 다들 공감하시겠지만, 사실 업무와 공부의 경계가 많이 모호한 면이 있습니다. 이 때문에 회사 컴퓨터를 켜놓고 집에서 접속해야 할 경우가 종종 있는데요, 그렇다 해도 많지는 않아서 항상 켜놓기에는 전기 사용이 좀 아깝습니다. 하지만, 꺼놓고 퇴근하자니 또 집에서 필요해지면 아쉽기 때문에 그러는 것도 좀 망설여지는데요.

그래서 ^^ 만들었습니다. 회사 컴퓨터의 전원을 원격으로 제어가 가능하도록 하는 것입니다.




이를 구현하기 위해, 6년 전에 구매했던 - 먼지가 내려앉은 넷두이노를 꺼냈습니다. ^^

.NET Micro Framework - 넷두이노 플러스
; https://www.sysnet.pe.kr/2/0/1392

(새 버전의 넷두이노가 나와서 이제는 지원도 끊겨 버렸지만) 마지막 firmware 버전인 4.2.0.1로 업그레이드까지 하고 네트워크 구현까지 완료했지만... 아쉽게도 이더넷 LAN 포트가 접촉 불량 문제가 발생했습니다. 납땜의 문제는 아닌 것 같고 랜 소켓 자체가 내부에 이더넷 케이블과 접촉되는 공간이 유격이 발생한 듯 케이블을 살짝 움직일 때마다 네트워크 접속이 끊어져 버리는 것입니다.

할 수 없이 ^^; 다시 먼지가 쌓이도록 창고에 두고 그다음 제가 가지고 있는 보드 중,


후보로 떠오른 것이 "라즈베리 파이 제로 W"입니다. WiFi를 기본 제공하고 RPi의 특성상 PC 환경에 준하는 개발 환경을 가지고 있기 때문에 프로그램 작성도 매우 용이합니다.

한 가지 아쉬운 것은 제가 가지고 있는 "라즈베리 파이 제로 W"가 Data Pin 쪽에 헤더가 납땜되어 있지 않은 모델이라는 점입니다. (혹시, 제로 W 모델을 구매하시려는 분이 있다면 "with Headers" 모델을 추천합니다.)

[그림 - 출처 http://www.icbanq.com/P008219607]
raspberry_pi_zero_w_with_no_pin_header_1.jpg

그래서 저걸로 Data Pin을 제어하려면 핀 헤더를 납땜해야 하는 불편함이 있습니다.

How to solder header pins to the Raspberry Pi Zero (W) 
; https://www.youtube.com/watch?v=UDdbaMk39tM

그런데, 제가 인두기가 없습니다. ^^




고민하던 차에, 생각난 것이 바로 제 책상에 있는 Synology NAS(DS216+II)입니다. 항상 켜져 있는 데다, 리눅스 운영체제가 올라가 있기 때문에 프로그램도 마음대로 올릴 수 있고 게다가 .NET Core 프로그램도 제작할 수 있습니다.

제어 환경이 결정되었으니, 이제 남은 문제는 어떻게 컴퓨터의 전원을 껐다 켰다 할 것이냐입니다. 사실 이것은 매우 간단한데, 컴퓨터 케이스의 전원 스위치 동작을 그대로 따라 해 주기만 하면 되기 때문입니다. 가령, 제가 가지고 있는 "GIGABYTE GA-Z87-HD3" 메인 보드는 다음과 같은 PW+, PW- 핀 배열을 가지고 있습니다.

turn_on_the_device_1.png

PW+와 PW- 간의 전압을 측정해 보면 약 3.347V가 나오는데, 그렇다는 것은 곧 컴퓨터 케이스의 전원 스위치가 말 그대로 "전선을 연결하는" 정도의 역할만 한다는 것이고, 외부에서 이것을 제어하려면 마찬가지로 별도 전원을 인가할 필요 없이 그냥 "연결"만 하면 되는 식입니다. 오호... 그러고 보니 그 용도로 딱인 장치를 전에 살펴본 적이 있습니다.

PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기
; https://www.sysnet.pe.kr/2/0/11606

위의 글에서 설명한 FTDI 장치의 DTR 라인은 아두이노의 데이터 핀처럼 별도의 전원을 제공하는 것이 아닌, 단순히 선을 연결해 주는 동작만 하는 것이기 때문에 컴퓨터 전원 스위치를 켜는 용도로 사용할 수 있습니다.

따라서, FTDI의 GND를 PW-에 연결하고 DTR 선을 PW+에 연결하면 됩니다.

turn_on_the_device_2.png

이제 남은 작업은 NAS 장치에서 DTR 신호를 제어할 소프트웨어를 만드는 것인데 이 방법은 이미 아래의 글에서 모두 설명했습니다. ^^

Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
; https://www.sysnet.pe.kr/2/0/11733

Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어
; https://www.sysnet.pe.kr/2/0/11734

저는 docker를 이용해 C#으로 만든 .NET Core 프로그램을 제작해 올렸습니다. docker의 container 관리 덕분에 마치 NT 서비스처럼 재부팅 시에도 container를 자동 실행해 주므로 별도의 관리 절차는 필요하지 않았습니다.




자, 이제 ^^ 컴퓨터의 제어판에서 "Power Options"를 들어가 컴퓨터 전원 스위치가 눌렸을 때 "최대 절전 모드(Hibernation)"로 들어가도록 설정합니다. 그다음, 원하는 시기에 소프트웨어로 "FT_SetDtr/FT_ClrDtr" 신호를 전달하도록 하면 컴퓨터가 켜져 있는 경우 최대 절전 모드로 들어가고, 꺼져 있는 경우에는 컴퓨터가 켜지게 됩니다.

제 경우에는 전에도 다뤘던 Xamarin을 이용해,

Xamarin - 기존 리모컨 기능을 핸드폰의 적외선 송신으로 구현
; https://www.sysnet.pe.kr/2/0/11674

다음과 같이 안드로이드 프로그램을 만들어서,

turn_on_the_device_3.png

원격에서 제어할 수 있도록 했습니다. ^^




몇 가지 더 이야기를 해보면.

우선, 주의할 것이 하나 있습니다. FTDI 장치와 메인보드 간의 선을 연결 시, 반드시 DTR과 PW+를 연결하고 GND와 PW-를 연결해야 합니다. 컴퓨터 케이스의 Power Switch는 물리적으로 접점이 끊긴 것을 연결하는 것이기 때문에 +/- 극을 맞출 필요가 없지만 FTDI 장치는 극이 맞아야 합니다. 저도 내부적인 FTDI 장치의 배선을 몰라 자세하게 설명할 수는 없지만, 현상 자체는 DTR을 PW-, GND를 PW+에 연결하는 경우 그 순간 컴퓨터 전원이 들어오게 됩니다. 계측기로 + 단자를 DTR에 - 단자를 GND에 놓고 측정하면 저항이 무한대가 되지만, 그 반대로 하는 경우에는 약 250K 정도의 저항이 측정되는 걸로 봐서 선이 연결된 것과 유사한 역할을 하는 것 같습니다.

또 다른 이야기가 있다면 바로 "마감"입니다. 대충 해 놓으면 동작은 하겠지만 실 사용 환경에서라면 좀 더 완성도를 높이는 게 좋습니다. 일단 FTDI와 NAS를 연결하는 것은 USB 케이블로 깔끔하게 해결은 됩니다. 하지만 FTDI의 DTR, GND와 메인 보드 간의 연결을 하는 것은 그다지 매끄럽게 해결이 안 됩니다. 우선, 기존의 컴퓨터 케이스에 있는 Power Switch를 안 쓰는 걸로 가정하고 다음의 케이블을 사용할 수 있습니다.

PC 파워 전원 스위치 케이블/메인보드연결
; http://item.gmarket.co.kr/detailview/item.asp?goodscode=995567752

computer_power_cable_1.png

Female Header 부분이 메인 보드의 Power Pin에 정확히 연결할 수 있기 때문에 편리하긴 한데 문제는 반대쪽 스위치를 잘라내고 FTDI의 DTR, GND에 연결하는 것이 불편합니다. 이 케이블의 선은 단선이 아닌 연선인데다 제가 가지고 있는 와이어 스트리퍼 기준으로,

Vessel 3500E-2
; https://www.eleparts.co.kr/goods/view?no=5803

24AWG(0.5mm)로 피복이 벗겨지는데, 단선도 아닌 연선이어서 FTDI의 DTR, GND 소켓에 끼우기에는 너무 얇습니다. (악어 클립으로 집는 것도 그다지 권장할 수 없습니다.)

차라리 그보다는 22AWG 단선으로,

테프론선 0.6T (빨강) 1M 
; http://devicemart.co.kr/goods/view?no=34217

"PC 파워 전원 스위치 케이블"과 납땜으로 연결하거나, 아니면 Female-Female 케이블을 22AWG 단선으로 FTDI와 납땜 없이 연결하는 것이 좋습니다.




위에서 설명한 방법으로는, 아쉽게도 컴퓨터 케이스의 파워 스위치를 사용할 수 없습니다. (아니면 잘라서 납땜을 해야 합니다.) 물론, 그렇게 하면 불편할 것이기 때문에 방법을 좀 더 찾아봤고 그러다 알게 된 것이 바로 "무탈피 커넥터"입니다.

무탈피커넥터 (T-11)
; https://www.eleparts.co.kr/goods/view?no=6508906

T 타입의 커넥터는 기존 선을 (자르지 않으면서) 새로운 선과 연결할 수 있으므로 다음과 같이 납땜 없이도 간편하게 연결할 수 있습니다.

turn_on_the_device_4.jpg

그런데, 이것도 문제가 약간 있습니다. 위의 T 타입 커넥터가 연결할 수 있는 전선이 AWG24 ~ 20규격인데, FTDI 측의 22AWG 단선과는 잘 연결할 수 있지만 컴퓨터 케이스와 메인보드에 연결하는 Power 핀의 전선이 (아마도) 26AWG로 매우 얇아서 커넥터가 잘 잇지 못할 것 같았습니다. 하지만 설령 통전이 안 된다 해도 기존 선을 자르거나 하는 것은 아니기 때문에 밑져야 본전이라는 심정으로 부품 구매를 해서 연결 시도를 해봤는데요.

우선, 집에 있는 컴퓨터부터 테스트를 해봤습니다. 그러니까,,,, 아주 꽉 ^^; 눌러주면 연결이 됩니다. 확인을 위해 멀티미터로 통전 테스트를 하면서 진행했는데 통전이 될 때까지 꽉꽉 눌러주면 ^^; 됩니다. 그리고 회사에 있는 컴퓨터 역시, 그렇게 해서 잘 연결을 했습니다. 참고로, 손으로 누를 수 있는 정도가 아니므로 반드시 펜치 같은 도구가 있어야만 합니다.

암튼, 이렇게 해서 ^^ 그나마 지저분하지 않게 잘 마감을 했습니다.

커넥터의 종류
  전선-기판용 커넥터(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 타입, 릴레이 타입 등




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/18/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...
NoWriterDateCnt.TitleFile(s)
12918정성태1/13/20226407Linux: 47. WSL - shell script에서 설정한 환경 변수가 스크립트 실행 후 반영되지 않는 문제
12917정성태1/12/20225653오류 유형: 785. C# - The type or namespace name '...' could not be found (are you missing a using directive or an assembly reference?)
12916정성태1/12/20225385오류 유형: 784. TFS - One or more source control bindings for this solution are not valid and are listed below.
12915정성태1/11/20225663오류 유형: 783. Visual Studio - We didn't find any interpreters
12914정성태1/11/20227557VS.NET IDE: 172. 비주얼 스튜디오 2022의 파이선 개발 환경 지원
12913정성태1/11/20228081.NET Framework: 1133. C# - byte * (바이트 포인터)를 FileStream으로 쓰는 방법 [1]
12912정성태1/11/20228718개발 환경 구성: 623. ffmpeg.exe를 사용해 비디오 파일의 이미지를 PGM(Portable Gray Map) 파일 포맷으로 출력하는 방법 [1]
12911정성태1/11/20226044VS.NET IDE: 171. 비주얼 스튜디오 - 더 이상 만들 수 없는 "ASP.NET Core 3.1 Web Application (.NET Framework)" 프로젝트
12910정성태1/10/20226527제니퍼 .NET: 30. 제니퍼 닷넷 적용 사례 (8) - CPU high와 DB 쿼리 성능에 문제가 함께 있는 사이트
12909정성태1/10/20227921오류 유형: 782. Visual Studio 2022 설치 시 "Couldn't install Microsoft.VisualCpp.Redist.14.Latest"
12908정성태1/10/20225749.NET Framework: 1132. C# - ref/out 매개변수의 IL 코드 처리
12907정성태1/9/20226219오류 유형: 781. (youtube-dl.exe) 실행 시 "This app can't run on your PC" / "Access is denied." 오류 발생
12906정성태1/9/20226814.NET Framework: 1131. C# - 네임스페이스까지 동일한 타입을 2개의 DLL에서 제공하는 경우 충돌을 우회하는 방법 [1]파일 다운로드1
12905정성태1/8/20226470오류 유형: 780. Could not load file or assembly 'Microsoft.VisualStudio.TextTemplating.VSHost.15.0, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
12904정성태1/8/20228519개발 환경 구성: 623. Visual Studio 2022 빌드 환경을 위한 github Actions 설정 [1]
12903정성태1/7/20227120.NET Framework: 1130. C# - ELEMENT_TYPE_INTERNAL 유형의 사용 예
12902정성태1/7/20227160오류 유형: 779. SQL 서버 로그인 에러 - provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.
12901정성태1/5/20227261오류 유형: 778. C# - .NET 5+에서 warning CA1416: This call site is reachable on all platforms. '...' is only supported on: 'windows' 경고 발생
12900정성태1/5/20228906개발 환경 구성: 622. vcpkg로 ffmpeg를 빌드하는 경우 생성될 구성 요소 제어하는 방법
12899정성태1/3/20228383개발 환경 구성: 621. windbg에서 python 스크립트 실행하는 방법 - pykd (2)
12898정성태1/2/20228932.NET Framework: 1129. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 비디오 인코딩 예제(encode_video.c) [1]파일 다운로드1
12897정성태1/2/20227809.NET Framework: 1128. C# - 화면 캡처한 이미지를 ffmpeg(FFmpeg.AutoGen)로 동영상 처리 [4]파일 다운로드1
12896정성태1/1/202210675.NET Framework: 1127. C# - FFmpeg.AutoGen 라이브러리를 이용한 기본 프로젝트 구성파일 다운로드1
12895정성태12/31/20219169.NET Framework: 1126. C# - snagit처럼 화면 캡처를 연속으로 수행해 동영상 제작 [1]파일 다운로드1
12894정성태12/30/20217158.NET Framework: 1125. C# - DefaultObjectPool<T>의 IDisposable 개체에 대한 풀링 문제 [3]파일 다운로드1
12893정성태12/27/20218692.NET Framework: 1124. C# - .NET Platform Extension의 ObjectPool<T> 사용법 소개파일 다운로드1
... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...