先日、メカトラックス株式会社が提供するRaspberry Pi専用の電源管理・死活監視モジュール「slee-Pi2」をお借りする機会があったので、試してみた内容を紹介したいと思います。
slee-Piとは
slee-PiはRaspberry Piの電源のON/OFFなどを簡単なスクリプトで自動化してくれる拡張ボードです。Raspberry Piは資料も豊富でプロトタイピングにとても適したデバイスですが、一方で消費電力が高く、電源の供給が難しい環境での中・長期的な運用には不向きです。 しかし、slee-Piを使って間欠動作(ONとOFFを定期的に繰り返して動作させる方法)をさせることでこの問題を解決することができます。常時デバイスを稼動させる必要がないケースではこれがとても上手く機能します。6 – 24Vという広い電源電圧に対応しているのも魅力的ですね。 さて、今回作るデモアプリケーションですが、slee-Piにカメラモジュール、Slack APIを合わせて簡単な監視デバイスを作成したいと思います。セットアップ
まずはハードウェアの準備をしましょう。今回はOSとしてRASPBIAN JESSIE LITEを使用します。OSイメージをSDカードに書き込み、Raspberry Piに差し込みます。 カメラモジュールを下図のようにフラットケーブルを通して接続します。(諸事情で180度カメラになっています…) slee-PiをRaspberry Piにちょうど全てのピンが重なるように取り付け、付属のDCジャックにACアダプタを繋げて電力を供給します。バッテリーからの給電を試したいところですが、さしあたりこちらのACアダプタを使用しました。 次にソフトウェアのセットアップです。Raspberry Piのターミナルにログイン後、slee-Piの制御に必要なパッケージのインストールをおこないます。$ sudo bash -c 'echo "deb http://mechatrax.github.io/raspbian/ jessie main contrib non-free" > /etc/apt/sources.list.d/mechatrax.list' $ sudo apt-get update $ sudo apt-get install mechatrax-archive-keyring $ sudo apt-get install sleepi2-firmware sleepi2-utils sleepi2-monitorDevice Tree Overlay を有効にする必要があります。再起動等を行って Device Tree Blob をロードします。
sudo shutdown -r now
システム時刻をリアルタイムクロックに反映します。
sudo hwclock -w
slee-Piの設定は以上です。次にカメラモジュールの動作確認をおこないます。まずはraspi-config
からカメラモジュールを有効化します。次のコマンドを実行後、[5 Interfacing Options] -> [P1 Camera] -> [Yes]を選択します。
sudo raspi-config
セットアップが終了したら、試し撮りしてみましょう。
raspistill -o hello.jpg
コマンド終了後にhello.jpg
という名前で画像ファイルが生成されます。
アプリケーション
最後に監視デバイスのアプリケーションとして、10分ごとに起動してSlackに撮影した写真を送るプログラムを作成します。SlackのOAuth Tokenが必要になります。 下から2番目の行、sleepi2alarm --set "+10min"
を実行することで10分後にデバイスが起動します。
import shlex from subprocess import call import requests url = 'https://slack.com/api/files.upload' token = '' image_file = 'hello.jpg' def upload(): image = { 'file': open(image_file, 'rb') } payload = { 'filename': image_file, 'token': token, 'channels': ['random'], } requests.post(url, params=payload, files=image) def run(cmd): parsed = shlex.split(cmd) call(parsed) if __name__ == 'main': run('raspistill -o {}'.format(image_file)) upload() run('sleepi2alarm –set "+10min"') run('poweroff')アプリケーションを自動起動させるために、Systemdに登録します。
/etc/systemd/system/demo.service
といった名前で次のファイルを作成します。
[Unit]
Description=A surveillance device based on Raspberry Pi.
Requires=network.target
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python /opt/demo/main.py
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
ExecStart
が実行するアプリケーションを指定しています。/opt/demo/main.py
にソースコードを作成するか、正しいパスを指定してください。
アプリケーションを起動しましょう。最後のコマンドを実行すると数秒後にRaspberry Piの電源がOFFになります。
sudo systemctl daemon-reload sudo systemctl enable demo.service # 自動起動の設定 sudo systemctl start demo.service # アプリケーションのスタート無事Slackに写真が送られてきました!(テストのために起動までの時間を短くしております) いかがでしたでしょうか? XSHELLでは、定期的にIoT開発に役立つ記事を公開しております。 また、RaspberryPiやIoTをテーマとした勉強会も開催しております。情報はSNSでも告知して参りますので、ぜひ@xshell_incもフォローしてください。]]>