**概要 [#w49afe61]
&ref(BTN1.jpg,zoom,320x240);

Raspberry Pi の GPIO からの出力で、別の PC の電源ボタンを擬似的に押して ON/OFF します。
Raspberry Pi の電源は PC のマザーボード(M/B)の +5VSB (常時5V出力)から取ります。写真では PC の拡張スロットに取り付けられるように金具を付けていますが、普通の Raspberry Pi Zero です。

**回路図 [#m832f26d]
&ref(RasPiPwrBtnSch.png,zoom,320x240);

-Raspberry Pi の他に、トランジスタと抵抗3本が必要
-M/B +5VSB は PC の電源ユニットの +5VSB(紫色のケーブル) に接続(ここから Raspberry Pi に電源を供給できる)
--常時電源が供給されている USB 端子または PS/2 端子から電源を取る方法も試したが、M/B によっては PC の起動/シャットダウン時に一瞬電源供給が止まってしまうので、電源ユニットの +5SB に直結するのが安全
-M/B GND は PC の電源ユニットの GND に接続
-M/B PWR-SW は M/B の電源スイッチ端子に接続(M/B 上に、電源スイッチ+, 電源スイッチ- の二つのコネクタがあるので、電源スイッチ+ の方に接続する)。本来の電源スイッチも並列に接続して問題ない
-トランジスタの B-E 間にプルダウン抵抗を追加した方がよいかも → 10kΩを追加した

**Raspberry Pi で電源ボタンを押すシェルスクリプト [#oe5c18b2]
-実行すると電源ボタンが 0.5 秒間押される
--GPIO17 を 出力モードにして 0.5 秒間 H を出力する。その間だけ M/B PWR-SW が GND に接続され、電源ボタンが押された状態になる
--スクリプトが途中で強制終了すると、その後電源ボタンを押しっぱなしにしたのと同じ状態になってしまうため、このスクリプトを push.sh というファイル名で保存し、"nohup sh push.sh" として実行するのが安全。
--スクリプトが途中で強制終了すると、その後電源ボタンを押しっぱなしにしたのと同じ状態になってしまうため、このスクリプトを push.sh というファイル名で保存し、"COLOR(RED){nohup sh push.sh}" として実行するのが安全。

 # push.sh
 gpio -g mode 17 out
 gpio -g write 17 0
 gpio -g write 17 1
 sleep 0.5
 gpio -g write 17 0

**備考 [#y95fc5e6]
-M/B PWR-SW(PC の電源スイッチ端子)を GND に接続すると、電源スイッチを押したことになります。
-GPIO17 の出力を NPN トランジスタで反転して、PC の電源スイッチ端子に接続しています。上記のように GPIO17 に H を出力すると M/B PWR-SW が GND に接続され、電源ボタンが押された状態になります。
-トランジスタを使わずに GPIO を直接 PC の電源スイッチ端子に接続すると、Raspberry Pi が再起動したタイミングなどで電源スイッチが押されてしまう可能性があるため、このような回路になっています。この回路では GPIO17 が H にならない限り電源スイッチは押されませんので、Raspberry Pi を再起動しても影響はありません。
-測定したところ GPIO17 は(GPIO18も) Raspberry Pi の基板上ではプルアップもプルダウンもされていませんでした。また OS 起動後には内蔵プルダウンが有効になるという[[記事:http://d.hatena.ne.jp/hnw/20150607]]がありました。Raspberry Pi の電源が OFF の時にも常時プルダウンされるように 10kΩ の抵抗を入れました。
-PC の電源ユニットのスイッチを ON にした時点で(PC の ON/OFF 状態にかかわらず) Raspberry Pi が起動します。
-PC と M/B +5VSB を接続する部分は、+5VSB が基板上に出ていない M/B では少々難しいです。今回は紫色のケーブルのビニール被覆を削って強引に分岐させています。

----
#counter

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS