Help us understand the problem. What is going on with this article?

Pythonで作る簡単植物通知システム Raspberry Pi + 水分センサ + Messaging API

More than 1 year has passed since last update.

はじめに

もうすぐ:cherry_blossom::cherry_blossom:ですね。
Raspberry Piと水分センサを使用して植物の水分を検知し、乾いている場合はMessaging APIで通知する仕組みを作りました。

本記事はRaspberry Piと水分センサを使用して、Messaging APIで通知する簡単レシピ:four_leaf_clover:です。

構成

仕組み

水分センサを植物に取り付けてアナログ電圧を取得します。取得したアナログデータをデジタルデータに変換させて、しきい値で条件分岐を行い水分が少なかったら、Messaging APIで通知します。

Raspberry PiのGPIO端子はアナログデータの入力ができないため、デジタルデータに変換させてあげる必要があります。

今回はI2CデバイスとしてTexas Instruments社製のA/Dコンバーター「ADS1015」を使用します。また、その他のA/Dコンバーターとしては、「MCP3800」とかがよくRaspberry Piとの組み合わせで使われています。

ADS1015は、12ビットのデータに変換するため4096の数値まで扱えます

概要図

LINEAPI.png

  • 部品一覧
部品 値段 備考
ブレッドボード   270 1個 
ジャンパー線(オス-メス)    330 4本 
ジャンパー線(オス)    350 7本 
抵抗1w10kΩ    200 1個 
ADS1015使用12ビット4チャンネルADコンバータ        1,280 1個 
GROVE - 水分センサ      580 1個 

合計3,010円

  • 使用ソフト
名前 備考
Python3   インストール済み
Adafruit_ADS1X15   GitHubより取得
Messaging API   Developer Trial(※)

(※)Messaging APIを検証用途で無料使用する場合は、「Developer Trial」または「フリー」プランより選択することができます。違いとしては「Developer Trial」の場合プッシュメッセージと応答メッセージが両方使えます。詳細については公式のプラン・料金をご確認ください。

はんだ付け

ADS1015を使用する場合はブレッドボードに取り付けるため、はんだ付けが必要です。
写真 2018-03-06 22 40 35.jpg

配線

Fritzingで作成した図になります。
※GROVE - 水分センサのパーツは見つからなかったので他のパーツを使用。

スクリーンショット 2018-03-06 01.15.11.png

Messaging API

Messaging APIはLINEが公開しているAPIです。

スクリーンショット 2018-03-07 01.30.23.png

Messaging APIはプッシュメッセージと応答メッセージがありますが、本記事のプログラムはプッシュメッセージを使ってRaspberry Piから通知します。

プッシュメッセージと応答メッセージ

プッシュメッセージとは、任意のタイミングでユーザーに送信するメッセージです。応答メッセージとは、ユーザーからのメッセージに対して応答するメッセージです。

前提条件

Messaging APIを使用するためにはLINEアカウントが必要です。
※また、PCでコンソールログインする場合は、LINEのアカウント設定で「ログイン許可」が有効になっている必要があります。

チャネルの作成

まずはじめに、コンソールにログインを行います。
クイックスタートを参考にしチャネルを作成します。なお、初回ログイン時のみ、LINE Developersコンソールで開発者アカウントを作成します。

スクリーンショット 2018-03-06 22.49.29.png

LINEプラットフォームを利用するには、アプリがチャネルにリンクされていなければなりません。チャネルを作成すると、固有のチャネルIDが識別用に発行されます。チャネルには、名前、説明文、およびアイコン画像が必要です。

実装

前提条件

ライブラリ準備

※Pythonの環境変数に注意
RaspbianのPython(デフォルト)は「/usr/bin/python」のシンボリックリンクで2.7のPythonになっているため、Python3を使用する場合はPython3を指定するなど考慮が必要です。

  • Pythonの環境変数確認(2.7系)
    $ which python
  • Pythonの環境変数確認(3系)
    $ which python3

ADS1015の導入

Adafruit社よりADS1015のライブラリがGitHubで公開されているので、クローンしてインストールします。

  • ADS1015をクローン
    $ git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
  • ディレクトリを移動
    $ cd Adafruit_Python_ADS1x15/
  • セットアップスクリプトを実行
    $ sudo python3 setup.py install

※ADS1015は「smbus」ライブラリを使用するが、最新のRaspbianを使用する場合は最初から含まれているので導入不要

line-bot-sdk-pythonの導入

Messaging API SDKとして各種ライブララリをpipでインストールします。

  • pip3でインストール
    $ pip3 install line-bot-sdk
  • インストール確認
    $ ls -l /home/pi/.local/lib/python3.5/site-packages/

プログラム(Python)

#! /usr/bin/env python3
# _*_ coding: utf-8 _*_

# ADS1015の関数を読み込む
import time, signal, sys
import Adafruit_ADS1x15

# Messaging APIのパスを通す
sys.path.append('/home/pi/.local/lib/python3.5/site-packages/')

# Messaging APIのモジュールをインポート
from linebot import LineBotApi
from linebot.models import TextSendMessage
from linebot.exceptions import LineBotApiError

# channel access tokenを指定
line_bot_api = LineBotApi('<channel access token>')

# user IDとプッシュメッセージを指定
def message1():
    try:
      line_bot_api.push_message('<to>', TextSendMessage(text='お水ください'))
    except LineBotApiError as e:
    # error handle
      print("Error occurred")

# 計測の範囲を指定(1を指定した場合は-4.096Vから4.96Vまで計測可能)
GAIN = 1

abc = Adafruit_ADS1x15.ADS1015()

while True:
    volts = abc.read_adc(0, gain=GAIN)
    if volts >= 100:
       print( "State with moistured : " + str(volts) + "V" )
    elif volts < 100 and volts >= 1:
       print( "Condition with reduced moisture : " + str(volts) + "V" )
    else:
       print( "No moisture condition : " + str(volts) + "V")
       message1()
       break
    time.sleep(1)

※実際に運用するときは「time.sleep(N)」でNの値を調整したり、cronで定期的に動かすのがよさそうです。

実験

簡単植物通知システムの完成です:musical_note:
写真 2018-03-07 0 33 18.jpg

本プログラムの実行例になります。

  • プログラムの実行
    # ./moisture.py
  • 植物の水分がある状態
    スクリーンショット 2018-03-07 00.14.42.png

  • 植物の水分がない状態(検証のため、わざと水分センサを抜く)
    スクリーンショット 2018-03-07 00.36.35.png

  • 水分センサで0を検知するとLINEにプッシュ通知が発信される
    写真 2018-03-07 0 15 14.png

応答メッセージ

自動応答メッセージを使えば、植物とあいさつしたりちょっとした会話ができます。

Channel基本設定ページより自動応答メッセージの「設定はこちら」をクリックします。
スクリーンショット 2018-03-07 00.48.02.png

自動応答メッセージのページが表示されるので、こちらで設定ができます。
スクリーンショット 2018-03-07 07.00.51.png

おはようと話しかけると、設定したメッセージを返してくれます。
写真 2018-03-07 6 36 28.png

さいごに

Raspberry Pi + 水分センサ + Messaging API = 面白い

電子工作は面白いです。はんだ付けから電子回路、Python、API、各種ライブラリ等色々学習できます。また、自分で作って想定した通りに動いたときはいいですね。

本プログラムもまだまだ改良の余地があるので、改善して色々やってみたいと思います。

  • 気になること
    Messaging APIのモジュールインポートが少し長い →timeコマンドで計測すると、プログラム実行時の読み込みで2秒弱ぐらいかかっています。単純にMessaging API使うだけだったら、サンプルにあるようなcurlコマンドでスクリプトにした方が早かったです。あとで調べてみよう。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした