Raspberry Piで計測したデータをLINEで定期的に確認する方法

Raspberry Piで計測したデータがLINEで定期的に送信されてきたら、家庭菜園などデータ管理に便利ですよね。

本記事では、Raspberry Piで計測したデータを「LINE Notify」というサービスを使ってスマホへ送信。更にcronというLinux機能で定期的に送信実行する方法について解説します。

私は温湿度センサDHT20と土壌湿度センサYL-69を使って、家庭菜園の気温・湿度・土壌水分計測に用いていますので、この例を基に解説していきます。

それでは始めましょう!

目次

準備したもの

  • Raspberry Pi 3 model B
  • 温湿度センサ DHT20
  • 土壌湿度センサ YL-69
  • A/Dコンバータ MCP3208
  • ブレッドボード
  • ジャンパワイヤ

システム構成

Raspberry Piで気温・湿度・土壌水分を計測。Wifi経由でRaspberry Piをインターネットに繋ぎ、LINE Notifyへデータ送信リクエスト。LINE Notifyがスマホへデータを送信する仕組みです。

回路図

Raspberry PiとDHT20、YL-69、MCP3208との接続方法は下図の通りです。

LINE Notifyとは

LINE社が提供しているLINE Notifyを使うとWebサービスからの通知をLINEで受信出来るようになります。

LINE Notifyについては、別記事で解説していますので、本記事ではPythonでのLINE Notifyの使い方を中心に解説します。

あわせて読みたい
M5Stackで計測した温度データをLINEに送信してみた 以前の記事でM5Stackで計測した温度データをWebブラウザ上で確認出来るシステムを作りました。これはこれで便利なのですが、毎日スマホで使っているLINEで送られてきた...

トークンを発行する

LINE Notifyを利用するにはまずトークン発行が必要です。

LINE Notifyのホームページからログインし、トークンを発行しましょう。

PythonでのPOSTメソッドを使ったリクエスト送信方法

POSTメソッドを使って計測データを送信するPythonスクリプトは以下の通りです。

messageに送信したい計測データを設定して下さい。

line_notify_token = '****************************'
line_notify_api = 'https://notify-api.line.me/api/notify'
message = '計測データ'

headers = {'Authorization': 'Bearer ' + line_notify_token}
data = {'message': message}
requests.post(line_notify_api, headers = headers, data = data)

Pythonスクリプト

気温・湿度はDHT20、土壌湿度センサはYL-69を使って計測しています。

import spidev
import smbus
import RPi.GPIO as GPIO
import requests
from time import sleep

#LINE Notify
line_notify_token = '******************************'
line_notify_api = 'https://notify-api.line.me/api/notify'

Vref = 3.3

# I2C設定
i2c = smbus.SMBus(1)
address = 0x38

set = [0xAC, 0x33, 0x00]
dat = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]

# LINEへメッセージを送信する関数
def send_line_message(notification_message):

    headers = {'Authorization': 'Bearer ' + line_notify_token}
    data = {'message': notification_message}
    requests.post(line_notify_api, headers = headers, data = data)

def readTemp():
    # 測定開始
    sleep(0.01)
    i2c.write_i2c_block_data(address, 0x00, set)
    
    # データの読み込み
    sleep(0.08)
    dat = i2c.read_i2c_block_data(address, 0x00, 0x07)
    
    # データ変換
    hum = dat[1] << 12 | dat[2] << 4 | ((dat[3] & 0xF0) >> 4)
    tmp = ((dat[3] & 0x0F) << 16) | dat[4] << 8 | dat[5]
    
    # 物理量変換
    hum = hum / 2**20 * 100
    tmp = tmp / 2**20 * 200 - 50

    return hum, tmp

sleep(0.1)
ret = i2c.read_byte_data(address, 0x71)

if ret != 0x18:
    exit

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.HIGH)

spi = spidev.SpiDev()
spi.open(0,0) #port 0,cs 0
spi.max_speed_hz = 1000000 # 1MHz

sleep(10)
aveVolt = 0
aveHum = 0
aveTmp = 0

for i in range(10):
    adc = spi.xfer2([0x06,0x00,0x00])
    data = ((adc[1] & 0x0f) << 8) | adc[2]
    volt = Vref*data/4096

    hum, tmp = readTemp()

    aveVolt = (aveVolt * i + volt)/(i+1)
    aveHum = (aveHum * i + hum)/(i+1)
    aveTmp = (aveTmp * i + tmp)/(i+1)
    voltStr = "Volt = " + str(aveVolt) + "V"
    humStr = "Humidity = " + str(aveHum) + "%"
    tmpStr = "Temperature = " + str(aveTmp) + "'C"
    print (voltStr)
    print (humStr)
    print (tmpStr)
    sleep(1)

messageStr = voltStr + "\n" + humStr + "\n" + tmpStr
send_line_message(messageStr)

spi.close()
GPIO.cleanup()

DHT20、YL-69の使い方については別記事で解説していますので、ここでは割愛させて頂きます。

あわせて読みたい
【Raspberry Pi】土壌湿度センサを使って植物の水やりタイミングを知ろう 家庭菜園などで土が乾きそうなのを知らせてくれて、水やりタイミングが分かったら便利ですよね。 今回、土壌湿度センサYL-69を購入して、土壌の水分量を検知するシステ...
あわせて読みたい
【Raspberry Pi】温湿度センサDHT20を使った気温・湿度計の作り方 家庭菜園などで毎日の気温・湿度データを管理出来たら便利ですよね? 今回はRaspberry Piと温湿度センサDHT20を使った気温・湿度計の作り方について解説します。 こんな...

cronで3時間おきにPythonスクリプト実行

cronとは、設定したスケジュールに従ってスクリプトを自動実行してくれるデーモン(常駐プログラム)です。「crontab」というコマンドでスケジュールを設定します。
cronの使い方は↓で詳しく解説しています。
あわせて読みたい
【Raspberry Pi】 cronを使って写真を定期的に撮影 前回の記事では、Raspberry Pi用Camera Module V2を使って写真を撮影することについて解説しました。今回はcronというデーモンを使って写真を定期的に撮ってみます。こ...

作成したPythonスクリプトを定期的に実行するため、crontabファイルに設定を追加していきます。

crontabファイルは以下のコマンドを打つことで開くことができます。

$ crontab -e

今回は3時間おきにPythonスクリプトを実行するようにしました。

0 */3 * * * /bin/python3 ***.py

これで時間になったらPythonスクリプトが実行されるはずです。

LINEで計測データ受信

スマホのLINE画面です。3時間おきに計測データが受信出来ていますね。

まとめ

Raspberry Piで計測したデータを「LINE Notify」を使ってスマホへ送信。更にcronで定期的に送信実行する方法について解説しました。

私は温湿度センサDHT20と土壌湿度センサYL-69の計測データをスマホで確認するのに活用しています。

興味を持たれた方は是非挑戦してみて下さい。

最後までお読み頂きありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

大学で機械工学を学んだ後、製造業で働く40代の会社員です。
IT系、電気系を学んでこなかった機械系人間が、ゲーム制作、電子工作に奮闘してます。
極力低コストでものづくりを楽しむのがモットー。

目次