【30分IoT】Raspberry PiとSlackを連携させて温湿度を記録しよう

記事タイトルとURLをコピーする

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を始められます。この夏休みにチャレンジしてみてはいかがでしょうか。


各種パーツの入手についてはインターネット購入の他に、秋葉原の電子パーツ店に足を運んでみることもオススメします。秋月電子通商の実店舗がありますし、 千石電商 にも立ち寄ってみてください。ぜひ、最初の一歩を踏み出してみましょう!