皆さんこんにちは、D2-PLANの宗一郎です。
今回ご紹介するのRaspberry Pi Zero WHを用いた温湿度をLINE通知です。
これからIoTをかじろう、ラズパイ買ってみようと考えている方、
また既にラズパイを買ってみたという方には為になれば幸いと思います。
『使いこなせラズパイ企画!』
この企画は誰だって買えるRaspberry Piを使用したIoT化を目指し初歩的な電子工作から高度なIoTにもチャレンジしていく企画です。特に田舎、地方に特化したIoT活用方法を考えながら進め少しでも現場で使えるIoT化ができればと思っています。私自身ラズパイは初心者なのでブログを通して成長して行ければと思います。
本題
『Raspberry Pi Zero WHで温湿度をLINE通知』
ラズパイ購入から温湿度の測定まで
前回までの記事です。必要な方はチェックしてみてください。
LINEアクセストークン発行
LINEに通知を入れるためには、ラズパイからLINEにメッセージを送るという動作をさせます。その為には、まずラズパイからネットワーク上のLINE通知サービスに連絡を入れ、そこから自分に通知を入れるという仕組みを作ります。難しいようですがやる事は簡単でした。
まずは、LINEアクセストークンを発行します。
LINEアカウントで下記にログインします。
マイページに行きます。
アクセストークンの発行をします。
トークン名はメッセージの送信者の名前です。
メッセージを受信する部屋を選択しトークンを発行します。
※私は1:1を選択しましたので、直接メッセージがきます。
下記が発行したトークンです。このトークン宛にメッセージを送信することで、私に連絡をくれるような仕組みを作れます。
ラズパイからLINE宛にメッセージ送信
それでは、ラズパイからLINE宛にメッセージを送信する為にプログラムを準備していきます。プログラムはお馴染みのPythonを使用していきます。
お得意のSSHを使用してMacから接続します。
そしてnanoを起動します。
nano
Pythonには「requests」というライブラリがあります。その名の通り、リクエストを出すというような作業に特化したライブラリです。requestsはHTTP通信ライブラリなので、これを使うとWebサイトにアクセスすることができます。そして先程から言っています通り、「https://notify-api.line.me/api/notify」を経由して、LINEあてにメッセージを送信できます。プログラムは以下の通りです。
import requests
url = "https://notify-api.line.me/api/notify"
token = "(取得したトークン)"
headers = {"Authorization" : "Bearer "+ token}
message = "hello!!!"
payload = {"message" : message}
r = requests.post(url, headers = headers, params=payload)
(取得したトークン)の場所に、先程発行したトークンを入れます。
line_me.pyで保存しました。
実行します。
python line_me.py
少し待っていると…
きました!
楽勝ですね。
次に温湿度を送ります。
ラズパイからLINE宛に温湿度を送信
それでは、ラズパイからLINE宛に温湿度を送信する為にプログラムを準備していきます。
前回の記事で温湿度の測定を行いました。
この時に使ったサンプルのプログラムと先程のLINE通知メッセージプログラムを応用して作ってみました。
#!/usr/bin/python
# -*- coding: utf-8 -*
import requests
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 23
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
temperature = "{:.1f}" . format(temperature) #気温(小数点第一位まで)
humidity = "{:.1f}" . format(humidity) #湿度(小数点第一位まで)
url = "https://notify-api.line.me/api/notify"
token = "( トークン )"
headers = {"Authorization" : "Bearer "+ token}
main_mes = "今の温度は{}度で湿度は{}%です。"
message = main_mes.format(temperature,humidity)
payload = {"message" : message}
r = requests.post(url, headers = headers, params=payload)
実行すると…
できました!
これで簡単なIoT完成ですね。
あとは通信モジュールを取り付け野外からネットーワークに接続さえできればどこからでも数値の取得が可能になりますね。面白い。 次回は定期的な取得をやってみたいと思います。
例えば1時間おきのデータを取得とか。。。 それではまた。
※走り書きで文章を書いておりますので、間違った内容や不備がある場合があります。お気づきになられましたら是非ご連絡下さいますと幸いです。
instagram 宗一郎 → @soichiro_koyanagi
instagram D2-PLAN → @d2_plan
Comments