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

[RaspberryPi][python]温度センサー+IFTTTで室温をLINEに知らせる

More than 1 year has passed since last update.

環境

1.温度センサーの準備

1wireのセンサーを使うので、RaspberryPiの/etc/modulesに以下を追記する

w1-gpio
w1-therm

/boot/config.txtに以下を追記する

dtoverlay=w1-gpio-pullup

センサーの接続は、

  • センサーの1番ピン(GND)をRaspberryPiの6番ピン(GND)
  • センサーの2番ピン(DQ)をRaspberryPiの7番ピン(GPIO4)
  • センサーの3番ピン(VDD)をRaspberryPiの1番ピン(3.3V)

にします。
センサーの2番ピンと3番ピンをプルアップ抵抗でつなげています
参考:http://blog.livedoor.jp/victory7com/archives/33399310.html

20170820002519.png
20170819235926.jpg

接続の確認はlsmodコマンドで。うまく接続できていれば、以下のようになります。

cmd
pi@raspberrypi:~/Documents/work$ lsmod | grep w1
w1_therm                6401  0 
w1_gpio                 4818  0 
wire                   32619  2 w1_gpio,w1_therm

取得した温度は「/sys/bus/w1/devices/28-XXXXXXXX/w1_slave」に書き出されます。
(28-XXXXXXXXのXXXXは、お使いの端末ごとにかわります)

cmd
pi@raspberrypi:~/Documents/work$ cat /sys/bus/w1/devices/28-00000723fabd/w1_slave 
b1 01 4b 46 7f ff 0f 10 8d : crc=8d YES
b1 01 4b 46 7f ff 0f 10 8d t=27062

「t=」の値を1000で割った値が現在の温度です。

2.IFTTTの準備

IFTTTにアクセスしてMy Appletから、レシピを作っていきます。

「this」には「Webhooks」を設定、「that」には「line」を設定します

設定後、 https://ifttt.com/services/maker_webhooks/settings にアクセスして、記載されているURLにアクセスして、キーを有効にします。

  • eventは、Webhooks設定時に設定したイベント名
  • valueは、LINEに送りたい値

「You can also try it with curl from a command line.」に続くcurlのコマンドを実行することで、設定したLINEの宛先に送信します

3.pythonで結合する

RaspberryPiで、pythonで温度を取得して、IFTTTで設定したWebhooksのURLをリクエストして、LINEに室温を送信します。

温度を取得するライブラリをインストールします

cmd
pip install w1thermsensor

取得と送信は以下のようなコードで

python
from w1thermsensor import W1ThermSensor
import urllib.request, json

sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "(センサーのデバイス名)")
temperature_in_celsius = sensor.get_temperature()

url = "https://maker.ifttt.com/trigger/(Webhooksのイベント名)/with/key/(Webhooksのキー)"
method = "POST"
headers = {"Content-Type" : "application/json"}

obj = {"value1" : temperature_in_celsius}
json_data = json.dumps(obj).encode("utf-8")

request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
  response_body = response.read().decode("utf-8")

THERM_SENSOR_DS18B20は使用しているセンサーの型番に合わせてください。
センサーのデバイス名は28−XXXXXXXXのXXXX部分です。
あとはこれをクーロンなどに設定すれば、室温を定期的に取得できます。

jun1_0803
WEB系SE/PG。webサービスエンジニア。業務ではPHPを使ってますが、IoTと機械学習のためにpythonやrubyを勉強中
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
ユーザーは見つかりませんでした