2014年1月4日 星期六

[Arduino] Serial Port 遠端電腦開關

寫程式或者網管有時候會需要將電腦重新開機. 大部分server支援serial port管理, 能夠遠端重新開機, 或者利用中介的 serial server 控制被操作電腦的AC power重新開機. 另外最近開始出現可以遠端控制的電源排插, 能夠拿來控制電腦的AC power, 但是用雲端排插的方法需要被控制的電腦BIOS支援復電開機功能.

最近有遠端遙控開發機的需求, 所以用 Arduino 簡單製作了可以透過 Serial Port 開關電腦的device, 搭配一台空閒的 netbook 作為 serial server 進行遠端重開機.

用麵包板拉線如下:
從 Teensy 的 B1 pin 拉電源控制到光偶合IC, 藉由光偶合IC控制電腦機殼的電源線. 原理相當簡單.
機殼內部, 也是很簡單, 將原本的兩pin電源開關線拉出來, 我這裡用洞洞板作了一個小外接板, 可以將原本的電源線開關接上去, 然後分接成為兩條電源, 一條接上原本機殼上的電源開關. 另一條接上我製作的電源開關外接檔板. 無論哪一條線路ON, 則電腦開關都是ON.
下圖可以更近距離看到小洞洞板的結構, 非常簡單, 就是焊上一組2 pin的座, 和兩條2 pin的杜邦線和杜邦接頭.



下圖為檔板的部分, 用原本的 serial port 檔板加上洞洞板改裝, 把一個立體插座鎖上去:



把檔板接上麵包板的立體插座, 這樣就可以用光偶合器控制主機板上的開關了:




Teensy的程式如下: github-PowerSwitch

如果沒有不想用的 netbook, 使用 Raspberry Pi 來作 serial server 也會是個便宜的好選擇.
使用的時候, 只要ssh登入 netbook 上的 Linux, 用echo 寫入要 ON, 也就等同於要按住電源開關的秒數, 這樣就可以模擬人類按下電源開關去開關機或者重開機了.

以我這支程式, echo 輸入數字之後等於按住機殼 power button 的秒數:
echo -n 2 > /dev/ttyACM0        # 代表按住 power 兩秒, 等於開機
echo -n 6 > /dev/ttyACM0; sleep 6; echo -n 2 > /dev/ttyACM0        # 代表按住power六秒(等於關機), 等六秒後, 再按下power兩秒開機

這對於寫程式的人很方便, 能夠遠端控制server或開發機進行重開機.


2014-12-12補充:

簡易架構圖:


剛好分別買到兩種光偶合 IC, 分別將腳位紀錄在這裡. 記得買的時候一定要搞清楚IC型號, 然後上網查腳位定義, 否則接錯是沒辦法動的:

P521/TLP521:

SHARP PC817

2019-4-26補充:
用 echo 下達秒數前, 應當先設定 baud rate:

# stty -F /dev/ttyUSB0 9600
# echo -e "9" > /dev/ttyUSB0


more: [Arduino] 用 IRrepeater 抓取 kbro 凱擘遙控器的 IR raw code