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

先日、メカトラックス株式会社が提供するRaspberry Pi専用の電源管理・死活監視モジュール「slee-Pi2」をお借りする機会があったので、試してみた内容を紹介したいと思います。

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度カメラになっています…)

IMG_09901

slee-PiをRaspberry Piにちょうど全てのピンが重なるように取り付け、付属のDCジャックにACアダプタを繋げて電力を供給します。バッテリーからの給電を試したいところですが、さしあたりこちらのACアダプタを使用しました。

IMG_09971

次にソフトウェアのセットアップです。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が必要になります。

import requests
import shlex
from subprocess import call

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')

下から2番目の行、sleepi2alarm --set "+10min"を実行することで10分後にデバイスが起動します。

アプリケーションを自動起動させるために、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に写真が送られてきました!(テストのために起動までの時間を短くしております)

images-upload

いかがでしたでしょうか?XSHELLでは、定期的にIoT開発に役立つ記事を公開しておりますので、ぜひ@xshell_incをフォローしてください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中