MSP課の平(@mana_cat)です。
今回は、夏休み企画としてお手持ちのRaspberry Pi Zero活用術を紹介します。
たった30分で温湿度をセンサーを使えるようになり、Slackに投稿できるお手軽IoTをご紹介します。
準備するもの
まずは、必要なセンサーとパーツを準備ができている状態からスタートします。
なお、 Raspberry pi Zero (W)をお持ちでない方は、Raspberry pi 2または3でも可能です。
名称 | 型番 | 価格 | 販売元 |
---|---|---|---|
Raspberry pi Zero (Zero W,2,3でも可能) | RPI-ZERO | 648円~ | スイッチサイエンス |
温湿度センサー | AM2302 (DHT22) | 950円 | 秋月電子通商 |
ブレッドボード | EIC-801 | 270円 | 秋月電子通商 |
抵抗10kΩ 1本 (4.7kΩでも可) |
RD16S 10K | 100円 (100個入) |
秋月電子通商 |
ジャンパーケーブル (オスxメス 3本) |
- | 549円 | Amazon |
事前作業
前提条件として以下のセットアップが完了しているところから作業を開始しますので、必要に応じて事前準備を行います。
- 必要パーツが揃っている
- インターネット環境がある
- Raspbian Jessie のインストール、セットアップが完了している
- Raspberry Piをターミナルから実行できる環境が整っている
- Slack のサインアップが済んでいる
配線する
それでは、実際の作業に入ります。
Raspberry Pi Zero の電源を切り、microUSB を外し以下のように配線をします。注意点としては、GPIOピン23番を使用しますので、挿し間違いに注意しながら作業しましょう。
問題無く配線ができたら microUSBの電源を接続して Raspberry Pi の電源を入れます。
I2Cの有効化
以下のコマンドでI2Cの有効化をします(既に有効になっている場合はこの手順は不要です)。
$ sudo raspi-config
設定を有効化するために、Raspberry Pi を再起動します。
$ sudo reboot
IncomingWebHook の有効化
Slackの以下ページより、IncomingWebHooksを有効化します。
投稿するチャンネルを選択し、Webhook URLを取得します。
取得したWebhook URL
をコピー&ペーストします。この Webhook URL
をPythonのプログラムで使用します。
Slackへ投稿するIncomingWebHookの表示名とアイコンはカスタマイズ可能です。こちらは必要に応じて変更します。
Slackwebのセットアップ
Slackwebのインストール
slackwebをインストールし、Raspberry Pi からSlackへ投稿するための準備をします。
$ sudo pip install slackweb
Downloading/unpacking slackweb
Downloading slackweb-1.0.5.tar.gz
Running setup.py (path:/tmp/pip-build-sacoIx/slackweb/setup.py) egg_info for package slackweb
Installing collected packages: slackweb
Running setup.py install for slackweb
Successfully installed slackweb
Cleaning up...
Slack投稿テスト
Slackへ投稿するためのサンプルのプログラムを作成します。slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxx")
に先ほど取得したWebhook URL
を使用します。
$ nano test.py
import slackweb
slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxx")
slack.notify(text="Hello World!")
以下のようにテストプログラムを実行します。
$ python ./test.py
上記のようにSlackに投稿できていれば成功です。
温湿度センサーの測定値を取得する
次は、温湿度センサーDHT22を使ってお部屋の温湿度を測定します。その値をSlackへ投稿してみましょう。
まずは、OSのパッケージアップデートと、Python 開発ツールをインストールします。
$ sudo apt-get update
$ sudo apt-get install build-essential python-dev
次に、温湿度センサーDHT22のライブラリをインストールします。
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT/
$ sudo python setup.py install
温湿度センサーのサンプルプログラムを実行する
GPIOピン23番を使っているため、サンプルプログラムを以下のように変更します。
$ cd examples/
$ nano simpletest.py
pin = 'P8_11'
#pin = 23
↓
#pin = 'P8_11'
pin = 23
サンプルプログラムを実行し、温湿度が出力されているか確認します。
$ python simpletest.py
Temp=25.8*C Humidity=57.8%
温湿度をSlackへ投稿する
Slackへ投稿するためのPythonプログラムを作成する
Slackへ以下のようにプログラムを作って、日本語で投稿してみましょう。
$ nano notify_to_slack.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import slackweb
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 23
slack = slackweb.Slack(url="https://hooks.slack.com/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxxx")
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
msg = u"現在の温度は{0:0.1f}度、湿度は{1:0.1f}% です".format(temperature, humidity)
else:
msg = u"温湿度を測定できませんでした"
slack.notify(text=msg)
print msg
プログラムを実行し、温湿度の値をSlackへ投稿する
プログラムを実行します。結果はターミナル上にも出力されて、Slackにも投稿されます。
$ python ./notify_to_slack.py
現在の温度は25.6度、湿度は56.3% です
Slackへ定期的に投稿する方法
cronに登録して定期的にSlackへ投稿したり、個人ブログで紹介した timer を使ってみたり、いろいろ試してみてください。
なお、cronで毎時5分に投稿する方法は以下の通りとなります。
$ crontab -e
5 * * * * /home/pi/notify_to_slack.py
まとめ:すぐにIoTをはじめたい人へ
いかがでしたでしょうか。たった30分でお手軽IoT環境を手に入れることができます。今回紹介したRaspberry Piと必要なパーツ、インターネット環境さえあれば誰だってIoTを始められます。この夏休みにチャレンジしてみてはいかがでしょうか。
各種パーツの入手についてはインターネット購入の他に、秋葉原の電子パーツ店に足を運んでみることもオススメします。秋月電子通商の実店舗がありますし、 千石電商 にも立ち寄ってみてください。ぜひ、最初の一歩を踏み出してみましょう!