Mana Blog Next

仕事と家庭、自宅IoTへのチャレンジを綴るブログ

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

今回は、たった30分で温湿度をセンサーを使えるようになり、Slackに投稿できるお手軽IoTを紹介します。

準備するもの

まずは、必要なセンサーとパーツを準備ができている状態からスタートします。

名称 型番 価格 販売元
温湿度センサー AM2302 (DHT22) 950円 秋月電子通商
ブレッドボード EIC-801 270円 秋月電子通商
抵抗10kΩ 1本
(4.7kΩでも可)
RD16S 10K 100円
(100個入)
秋月電子通商
ジャンパーケーブル
(オスxメス 3本)
- 549円 Amazon

あとは、お手持ちのRaspberry pi Zero、2、3 をご準備下さい。

前提条件

  • 必要パーツが揃っている
  • インターネット環境がある
  • Raspbian Jessie のインストール、セットアップが完了している
  • Raspberry Piをターミナルから実行できる環境が整っている
  • Slackのサインアップが済んでいる

Slackのサインアップは簡単なので、以下のページで登録してください。

slack.com

配線する

Raspberry Pi の電源を切り、microUSBを外します。以下のように配線をします。

f:id:mana-cat:20170506111740p:plain

GPIOピン23番を使用しますので、挿し間違いに注意しながら作業しましょう。挿す場所を間違えてRaspberry Piの電源を入れると、パーツやRaspberry Pi 本体が故障するなどの影響が出ます。

配線ができたら microUSBの電源を接続して Raspberry Pi の電源を入れます。

I2Cの有効化

I2Cの有効化をします(既に有効になっている場合はこの手順は不要です)。

$ sudo raspi-config

f:id:mana-cat:20170506113015g:plain

一度、Raspberry Pi を再起動します。

$ sudo reboot

IncomingWebHook の有効化

Slackの以下ページより、IncomingWebHooksを有効化します。

https://my.slack.com/services/new/incoming-webhook/

投稿するチャンネルを選択し、Webhook URLを取得します。

f:id:mana-cat:20170506094220p:plain

取得したWebhook URLをコピペします。この Webhook URLをPythonのプログラムで使用します。

f:id:mana-cat:20170506094510p:plain

Slackへ投稿するIncomingWebHookの表示名とアイコンはカスタマイズ可能です。こちらは必要に応じて変更します。

f:id:mana-cat:20170506115224p:plain

Slackwebのセットアップ

Slackwebのインストール

slackwebをインストールし、ラズパイから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

f:id:mana-cat:20170506114317p:plain

Slackに投稿できていれば成功です。

温湿度センサーの測定値を取得する

次は、温湿度センサーDHT22を使ってお部屋の温湿度を測定します。その値をSlackへ投稿してみましょう。

まずは、OSのパッケージアップデートと、Python 開発ツールをインストールします。

$ sudo apt-get update
$ sudo apt-get install build-essential python-dev

次に、温湿度センサーDHT22のライブラリをインストールします。
2017年5月6日現在、pipでインストールしようとするとインストール途中でラズパイZeroである事を検出できないバグが発生しています。以下の代替手段でインストールを実行します。

$ 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% です

f:id:mana-cat:20170506095718p:plain

Slackへ定期的に投稿する方法

cronに登録して定期的にSlackへ投稿したり、以前紹介した timer を使ってみたり、いろいろ試してみてください。

cronで毎時5分に投稿する方法は以下の通りとなります。

$ crontab -e
5 * * * * /home/pi/notify_to_slack.py

まとめ:すぐにIoTをはじめたい人へ

いかがでしたでしょうか。たった30分でお手軽IoT環境を手に入れることができます。今回紹介したRaspberry Piと必要なパーツ、インターネット環境さえあれば誰だってIoTを始められます。ぜひ残り少ない大型連休中にチャレンジしてみてはいかがでしょうか。

秋葉原には秋月電子通商のリアル店舗があります。

akizukidenshi.com

千石電商もおすすめです。ぜひ、最初の一歩を踏み出してみましょう!

www.sengoku.co.jp

ちなみに、ブレッドボードや抵抗などを一通り揃えるのが大変だな・・・と感じる方は以前エントリーで紹介したEnviro pHAT 1枚を買うだけで色々できちゃうので、こちらもオススメです。

関連ページ

Ansible徹底入門 クラウド時代の新しい構成管理の実現

Ansible徹底入門 クラウド時代の新しい構成管理の実現

  • 作者: 廣川英寿,平初,橋本直哉,森田邦裕,渡辺一宏
  • 出版社/メーカー: 翔泳社
  • 発売日: 2017/02/17
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

© Manami Taira