名刺サイズの超小型PC「ラズパイ」で遊ぶ(第28回)
ラズパイで気温と湿度を測定、LINEで通知を受け取る ~番外編~
前回までは温湿度センサーモジュール「SHT31」を使ってきましたが、以前使った温湿度・気圧センサーモジュール「BME280」でも簡単にプログラムが組めます。第2回ではスイッチサイエンスが配布しているプログラムを使いましたが、BME280のライブラリが公開されており、これを使えばもっと簡単にプログラムが組めます。順を追って紹介していきましょう。
ライブラリをインストールする
ライブラリですが、配布サイトからダウンロードして、マニュアルでインストールすることになります。まずはファイルをダウンロードしましょう。
サイトの左にある「Download files」をクリックし、表示されたメニューから「RPi.bme280-0.2.3.tar.gz (1.7 MB)」をクリックしてダウンロードします。ダウンロードしたファイルをWinSCPなどでラズパイに転送します。転送する場所はどこでもいいですが、piのルートディレクトリ「/home/pi/」でよいでしょう。
ダウンロードしたらラズパイに移り、コンソール画面から以下のコマンドを入力します。
$ 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.
名刺サイズの超小型PC「ラズパイ」で遊ぶ
今やスマートフォンアプリで何でも完結できてしまう時代。しかし、一から自分の手でデバイスを作り上げ、試行錯誤しながらアイデアを具現化する楽しさは格別です。この連載では、テーマや用途にあわせてマイクロコンピュータ(マイコン)と呼ばれる名刺サイズの超小型PC「Raspberry Pi」(通称ラズパイ)の活用方法から具体的な工作手順までを紹介します。
この記事の著者
関連記事
こんなメディアも見られています
ITmedia NEWSに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
SpecialPR
本日の新着記事
アクセスランキング
-
1
「Xが情報収集に役立たない……」熊本地震で不満の声続出 「Twitterを返して」
-
2
メルカリ、梨の転売疑惑に「盗品の出品は確認されず」 誹謗中傷には利用制限も
-
3
はてな、11億円流出の調査報告書を公開 偽警察、口外禁止、残業・休出200時間超、孤立……ほころびが連鎖
-
4
「こんなのに追われたら……」急斜面もやすやす爆走、中国製の車輪付き四足ロボのデモ動画が話題 最高時速20km超
-
5
検索結果に「詐欺ではありません」と表示させる詐欺手口、警視庁が注意喚起 AI要約も餌食に
-
6
農水省の“クソダサ”ポスター話題 「AIよりよっぽど良い」の声も 担当者に狙いを聞いた
-
7
Z世代に聞く次の流行、「AIイラスト」が1位に 「Claude Code」も上位
-
8
東野圭吾さん死去、Xなどで追悼相次ぐ 「ガリレオ」など数々の人気作、エンジニアから転身
-
9
NVIDIAやMicrosoftなど30社超、オープンAIの防御ツール共同開発の「Open Secure AI Alliance」設立
-
10
「痺れるほどにミスを繰り返す」Gemini 3.6 Flashは変わった? 公開から1週間、当初のおバカ回答を今検証する
ITmedia NEWS SNS
インフォメーション
注目情報をチェック
ITmediaNEWSをフォロー
あなたにおすすめの記事PR