slee-Piによる監視デバイスのラピッドプロトタイピング

先日、メカトラックス株式会社が提供する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-monitor
Device 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もフォローしてください。]]>

上部へスクロール