先日、メカトラックス株式会社が提供する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度カメラになっています…)

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

次にソフトウェアのセットアップです。Raspberry Piのターミナルにログイン後、slee-Piの制御に必要なパッケージのインストールをおこないます。

1
2
3
4
$ 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 をロードします。

1
sudo shutdown -r now

システム時刻をリアルタイムクロックに反映します。

1
sudo hwclock -w

slee-Piの設定は以上です。次にカメラモジュールの動作確認をおこないます。まずは

1
raspi-config

からカメラモジュールを有効化します。次のコマンドを実行後、[5 Interfacing Options] -> [P1 Camera] -> [Yes]を選択します。

1
sudo raspi-config

セットアップが終了したら、試し撮りしてみましょう。

1
raspistill -o hello.jpg

コマンド終了後に

1
hello.jpg

という名前で画像ファイルが生成されます。

アプリケーション

最後に監視デバイスのアプリケーションとして、10分ごとに起動してSlackに撮影した写真を送るプログラムを作成します。SlackのOAuth Tokenが必要になります。

1
2
3
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番目の行、

1
sleepi2alarm --set "+10min"

を実行することで10分後にデバイスが起動します。

アプリケーションを自動起動させるために、Systemdに登録します。

1
/etc/systemd/system/demo.service

といった名前で次のファイルを作成します。


1
2
3
4
5
6
7
8
9
10
11
12
13
[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
1
ExecStart

が実行するアプリケーションを指定しています。

1
/opt/demo/main.py

にソースコードを作成するか、正しいパスを指定してください。

アプリケーションを起動しましょう。最後のコマンドを実行すると数秒後にRaspberry Piの電源がOFFになります。

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable demo.service    # 自動起動の設定
sudo systemctl start demo.service     # アプリケーションのスタート

無事Slackに写真が送られてきました!(テストのために起動までの時間を短くしております)

いかがでしたでしょうか?

XSHELLでは、定期的にIoT開発に役立つ記事を公開しております。

また、RaspberryPiやIoTをテーマとした勉強会も開催しております。情報はSNSでも告知して参りますので、ぜひ@xshell_incもフォローしてください。

コメント