ITmedia NEWS > STUDIO >
連載
» 2020年09月21日 07時00分 公開

名刺サイズの超小型PC「ラズパイ」で遊ぶ(第28回):ラズパイで気温と湿度を測定、LINEで通知を受け取る 〜番外編〜

以前の回で使った温湿度・気圧センサーモジュール「BME280」とラズパイを組み合わせ、LINEと連携させる方法を紹介します。

[岩泉茂,ITmedia]

 前回までは温湿度センサーモジュール「SHT31」を使ってきましたが、以前使った温湿度・気圧センサーモジュール「BME280」でも簡単にプログラムが組めます。第2回ではスイッチサイエンスが配布しているプログラムを使いましたが、BME280のライブラリが公開されており、これを使えばもっと簡単にプログラムが組めます。順を追って紹介していきましょう。

ライブラリをインストールする

 ライブラリですが、配布サイトからダウンロードして、マニュアルでインストールすることになります。まずはファイルをダウンロードしましょう。

 サイトの左にある「Download files」をクリックし、表示されたメニューから「RPi.bme280-0.2.3.tar.gz (1.7 MB)」をクリックしてダウンロードします。ダウンロードしたファイルをWinSCPなどでラズパイに転送します。転送する場所はどこでもいいですが、piのルートディレクトリ「/home/pi/」でよいでしょう。

BME280 左の「Download files」をクリック
BME280 「RPi.bme280-0.2.3.tar.gz (1.7 MB)」をクリックしてファイルをダウンロードする

 ダウンロードしたらラズパイに移り、コンソール画面から以下のコマンドを入力します。

$ tar -zxvf RPi.bme280-0.2.3.tar.gz

 するとホームディレクトリに「RPi.bme280-0.2.3」というフォルダができます。次に以下のコマンドを入力します。

$ cd RPi.bme280-0.2.3

 ディレクトリを移動したら、以下のコマンドでライブラリをインストールします。

$ sudo python setup.py install

 これでBME280のライブラリはインストールできました。

BME280を使った暑さ指数の測定

 続いて第1回で紹介した手順でラズパイとBME280をつなぎ合わせましょう。つないだあと、配布サイトにあったサンプルプログラムを入力して、BME280のライブラリがちゃんとインストールできているかを調べます。以下のプログラムをテキストエディタで記述して、ファイルを「bme280_test.py」などのように名前を付けて保存し、ラズパイに転送してください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smbus2
import bme280
port = 1
address = 0x76
bus = smbus2.SMBus(port)
calibration_params = bme280.load_calibration_params(bus, address)
# the sample method will take a single reading and return a
# compensated_reading object
data = bme280.sample(bus, address, calibration_params)
# the compensated_reading class has the following attributes
print(data.id)
print(data.timestamp)
print(data.temperature)
print(data.pressure)
print(data.humidity)
# there is a handy string representation too
print(data)

 ラズパイに転送したら以下のコマンドを入力します。

$ python bme280_test.py

 入力して、以下の情報が表示されたらOKです。

1f224924-955a-4d86-ae8e-158c59b4b961
2020-09-08 15:18:27.252815
26.1037427081
1012.60678869
55.2717538726
compensated_reading(id=1f224924-955a-4d86-ae8e-158c59b4b961, timestamp=2020-09-08 15:18:27.252815, temp=26.104 °C, pressure=1012.61 hPa, humidity=55.27 % rH)

 これは上からデータID、時刻、気温、気圧、湿度のほか、最後にこれらの情報を1行でまとめて表示しています。つまり以下のことが分かります。

項目 コマンド
データID data.id
時刻 data.timestamp
気温 data.temperature
気圧 data.pressure
湿度 data.humidity

 これらの値をそれぞれ取得すれば、SHT31で作った仕組みを改造するだけで表示できそうです。データについては、ひとかたまりで取得する方法は

calibration_params = bme280.load_calibration_params(smb, addr)
data = bme280.sample(smb, addr, calibration_params)

 のようにすればよさそうです。つまり気温のデータ「roomtemp」は「data.temperature」を、湿度「roomhum」は「data.humidity」を指定すれば取得できます。これらを踏まえて改編したプログラムが以下になります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import datetime
import requests
import bme280 #←追加
smb = smbus.SMBus(1)
t = datetime.datetime.today()
# BME280のI2Cアドレス
addr = 0x76
# データの読み出し
calibration_params = bme280.load_calibration_params(smb, addr) #←追加
data = bme280.sample(smb, addr, calibration_params) #←追加
# 気温
roomtemp = data.temperature
# 湿度
roomhum = data.humidity
# WBGTを求める
wbgt = 0.735 * roomtemp + 0.0374 * roomhum + 0.00292 * roomtemp * roomhum - 3.4516
# 温度と湿度をLINEで送る
url = "https://notify-api.line.me/api/notify" 
token = "(トークン)"
headers = {"Authorization" : "Bearer "+ token} 
message = ["気温" + str(format(roomtemp,'.1f')) + "C", "湿度" + str(format(roomhum,'.1f')) + "%"] 
payload = {"message" :  message} 
r = requests.post(url, headers = headers, params=payload)
if wbgt >= 31:
    message = ["暑さ指数 危険!"]
elif 28 <= wbgt < 31:
    message = ["暑さ指数 厳重警戒!"] 
elif 25 <= wbgt < 28:
    message = ["暑さ指数 警戒!"]
elif 21 <= wbgt <25:
    message = ["暑さ指数 注意!"]
else:
    message = ["ほぼ安全"]
    
# 念のためコンソールにデータを表示
print ('wbgt : %.1f' %wbgt )
print ('Temp : %.1f C' %roomtemp)
print ('Humi : %.1f %%'%roomhum)
# ここまで
# WBGT警報をLINEで送る
url = "https://notify-api.line.me/api/notify" 
token = "(取得したトークン)"
headers = {"Authorization" : "Bearer "+ token} 
payload = {"message" :  message} 
r = requests.post(url, headers = headers, params=payload)

 これを「bme280_wbgt.py」などのファイル名で保存して実行すると、前回SHT31で作り上げたのと同じく、LINEでメッセージを送ることができます。

 以上で3回にわたって紹介してきた、暑さ指数による警告をLINEで送る方法については以上となります。BME280の場合は気圧も測定できるので、ほかにも応用方法があるかもしれません。いろいろとプログラムを改編して探ってみてはいかがでしょうか。

Copyright © ITmedia, Inc. All Rights Reserved.

Better site: ProxyBot webproxy https://proxybot.cc/b?q=2a8dknuik8iu8PTf993Squ716FaShO-3h5MhD3hO-3h53h5LhO-3h53hp8-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993SMNtyNtt0MN35Mp
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSV-XouiBX6ikYXn7OFuaCsnX6i
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-5h58-h5LhO-0hDthLNhO-0hLth53hO-yhLV-hpN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-3h5MhDLhO-3h53hL8-hO-3h5MhL9hO-3h5MhLR-hO-3h53h5D
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSFXsdkFaOFk1SHCFYwdnnTBh3LhM8-hM8-11138idq86F8PThM8-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-0hL5hLLhO-0hp0hLV-hO-0hLV-hLphO-ph5thp3
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXSG-uoTYknufG-WVsdCBdXq6qC
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2a8dknuik8iu8PTf993Squ716FaShO-yhpMh5R-hO-ghp9hDN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-yhD5hD5hO-yh5MhpphO-5h5phL0hO-phpLh5L
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSuinF7SBSki6ia8dknuYkj68PTSMNMNtNt9tttgty
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS8-Y6FuisuOf-XUdnXiUkYu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2UCuFiBu78dknuikaXkF786FUS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-3h53hLV-hO-3h5MhDphO-0hpLhD9hO-yh5Dhpy
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-9hDLh5R-hO-ph5gh5V-hO-0hpyhLR-hO-5hLLhpO-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-yh58-h5V-hO-3h53hp5hO-3h5MhL9hO-3h53h55
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSA-XBnO6IO1FXnXiUOUuiFuB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=26BdXunu8U668iu8PTSrkS33pyN9N8dnoYHIF6owikWXOFkiqXiU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2n6UunnuF8s6oSXaSf-6XB7V-6Utt
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSnkXYnkouSs6iBXauFknX6iS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSTYCUXiBSYXquj6Q8TdTHdFuIwdnnTh3LhM8-hM8-1118Iksuj66q8s6ohM8-6BdXunu8U668iu8PTbkoTl1XandwM5NbkoTlduXUdnwgNbkoTls6Y6FBsduouwYXUdnbkoTlBd61OIksuBwIkYBubkoTlj6FauFOs6Y6FwjYCubkoTlBnFukowIkYBubkoTldukauFwIkYBu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSouBXnBC
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSLTksduOR-6oo6iB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2FukYB6Cia8PTSMNMNStNST6BnV03tyMg8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=qkiq6qCi6dkii6C86FUSjY6UVuinF7Vty05t8dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118iXs6WXau68PTSWXau6OsknkY6USMS535
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2nF6Wu8iYk8U6W8kCSBukFsdSkaWkisuaSsknuU6F7Siu1BTkTuFBHYVkFnG-7Tuwiu1BTkTuFBbqu716FawbkoTh3DkoTh3DkoTh3DkoTh3DkoTh3DkoTh3DYVnXnYuwt3pMbkoTh3DkoTh3DkoTh3DkoTh3DkoTh3DYVnXnYuwt3NtbkoTh3DkoTh3DkoTh3DkoTh3DYVnXnYuwpMNbkoTh3DkoTh3DkoTh3DYVnXnYuw0gtbkoTh3DkoTh3DYVnXnYuw3gybkoTh3DYVnXnYuwy5t
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2kaoXi8jY6U8IsM8s6oSasnkikY7EuF8TdT
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2d6iuBdkjFX8dknuikjY6U8s6oSuinF7SdXBn6F7O6IOOjY66ouFB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-3h5th5LhO-yhDphD9hO-gh5O-h5p
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-9hD5hLV-hO-yhDNhDO-hO-9hDV-hpNhO-yh5LhLp
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSTYCUXiBSYXquj6Q8TdTHdFuIwdnnTh3LhM8-hM8-1118Iksuj66q8s6ohM8-6BdXunu8U668iu8PTbkoTl1XandwM5NbkoTlduXUdnwgNbkoTls6Y6FBsduouwYXUdnbkoTlBd61OIksuBwIkYBubkoTlj6FauFOs6Y6FwjYCubkoTlBnFukowIkYBubkoTldukauFwIkYBu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2X1knunkjX8PTST6quo6iSuWuinSN58dnoY
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSuYVs6ia6FSLv-2-S
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS2-TusXkYfD66q2-6CFsuBSpg5VNVyMtV03gytVN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2a8dknuik8iu8PTf993Squ716FaShO-3h5MhD8-hO-3h53hpO-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaS8-XU
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-ph5ghpthO-5hDNhDghO-0hLV-hL0hO-0hD9h5D
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSA-uooXiUBOZWXau6OUkouA
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21uj8kFsdXWu86FUS1ujSMNtgNgN0M3tM35S1118qknFXikVFCiB8s6oSMNt9SttSMN
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTSqu716FaShu9hjIhkthuyh5Ihjghugh59hkthu5hk0hp0
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2a8dknuik8iu8PTf993Squ716FaShO-gh5phDphO-yhpthDV-hO-yh5yhL5hO-0hL5hLphO-yhL9hLghO-9hDV-hD8-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSTYCUXiBSYXquj6Q8TdTHdFuIwdnnTh3LhM8-hM8-1118Iksuj66q8s6ohM8-6BdXunu8U668iu8PTbkoTl1XandwM5NbkoTlduXUdnwgNbkoTls6Y6FBsduouwYXUdnbkoTlBd61OIksuBwIkYBubkoTlj6FauFOs6Y6FwjYCubkoTlBnFukowIkYBubkoTldukauFwIkYBu
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSBdkFuF8TdTHCwdnnTBh3LhM8-hM8-ki6ia8dknuYkj68PThM8-MNtgttMptgMp9M
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS8-XFul-6iqu7
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-3h5th5LhO-3h5thL5hO-3h5th5V-hO-3h5thp8-hO-phLghD8-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaSR-FuuT7hMNf-CnB
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSBdkFuF8TdTHCwdnnTBh3LhM8-hM8-ki6ia8dknuYkj68PThM8-MNMNNpMyMMy03g
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSuinF7SBSki6ia8dknuYkj68PTSMNN5NgMyt993y3
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-3h53hp3hO-3h53h53hO-3h5MhDNhO-3h53h5ghO-3h53hDR-hO-3h5MhD8-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-3h53h5NhO-3h53h53hO-3h5MhD5
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSR-knuU6F7fc-ia6VO-CF6Tuki
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118Iksuj66q8s6oSBdkFuF8TdTHCwdnnTBh3LhM8-hM8-ki6ia8dknuYkj68PThM8-MNMNNpM0M3399g
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2a8dknuik8iu8PTf993Squ716FaSyhO-0hpR-h550hO-0hpghLy
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2j8dknuik8iu8PTSs7kq6FXiS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-yhDNh5thO-3h5thp5hO-0h5ph5D
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118jCEEIuua8s6oSPTS7Cn6sdXjkSUkqCPCnCqkXUXVIksnVsdusqV3
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2Pk81XqXTuaXk86FUS1XqXShO-9hDLh5R-hO-0hpV-hLthO-yhp8-hDLhO-0hpyhLR-
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSl-kFs6okiiX
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2BCTT6Fn87kd66Viun8PTSb-ssR-dXujCqCF6SBS
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS2-XYWuFOsdY6FXau
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSJ-CUj7Ov-6FYa
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXS4-CYIO6IOD66ndXk
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ki6ia8dknuYkj68PTf993Squ716FaShO-0hpV-hDthO-yhDthDthO-yh5R-hDL
Better site: ProxyBot webproxy https://proxybot.cc/b?q=2ui81XqXTuaXk86FUS1XqXSDFXYYXkisuOZUFkTdXsBOuaXn6FA
Better site: ProxyBot webproxy https://proxybot.cc/b?q=21118XnouaXk8s68PTSiu1BSkFnXsYuBSMNNpSMtSiu1BNN38dnoY