みかんのゆるふわ技術ブログ

Raspberry PiやIoT関係のことを書き残していきます

Raspberry Piに2ドルの温湿度・気圧センサーBME280をつなぐ

中国のお店が中国国外に売る通販モールAliExpressで、安いセンサーをいくつか購入しました。 今回はその中の1つ、温度・湿度・気圧が測れるBME280が搭載されたセンサーモジュールをRaspberry Piにつないでみました。

www.aliexpress.com

見た目的には、Amazon.co.jpで売られているこちらのセンサーと同一のものと思われます。

AliExpressでの私が購入時の値段は、なんと$2.03でした!250円しないのでお買い得ですね1

しかもこのセンサーはPythonから簡単にアクセスできるライブラリを公開されている方がいて、繋ぐだけで簡単にセンサーの値が読めます! とても便利ですね🥰早速Raspberry Piにつないでみましょう。

BME280モジュールとは?

BME280とは、ドイツのボッシュが出している湿度・気圧センサーです。湿度を正確に測定するために温度センサーも内蔵しています。必ずしも気温を測るための温度センサーではないので若干ずれることもありますが、まあほぼ同じでしょう。

I2CまたはSPIで通信することで、温度・湿度・気圧のデータが取れます。

センサーには個体差がつきものですが、工場で個体差を吸収する調整が行われて出荷されているため、誤差の少ないデータが取れるようになっていて便利です。

Raspberry Piにつないでみよう

BME280モジュールの準備

私が買ったBME280モジュールはこちらです。

f:id:kimura_khs:20200922113115j:plain

購入した状態では、袋にBME280センサーモジュールピンヘッダが入っていました。

このモジュールはI2C通信専用のモジュールになっています。マイコンに簡単に繋げられるように、標準ピッチ(2.54mm)のピンヘッダが付属しています。

f:id:kimura_khs:20200922113125j:plain:w320

ピンヘッダをはんだ付けしました。

はんだごてがない方は、こちらのICテストクリップケーブルを使って、端子同士を引っかけてつかうこともできます。ピンヘッダにもスルーホールの穴にもクリップできるので便利です。ただし、ショート⚡️させないよう注意してくださいね。

テイシン ICテストリード小 TLA101

テイシン ICテストリード小 TLA101

  • メディア: Tools & Hardware

Raspberry Piへの接続

f:id:kimura_khs:20200922113215p:plain
画像出典: raspberrypi.org

Raspberry Piのピンヘッダは上図のように機能が割り当てられています。このモジュールはI2Cで通信するので、次のピンに接続します。

RasPiピン番号 RasPi 機能 BME280モジュール 説明
1 3V3 power VIN 電源(3.3V)
6 Ground GND グランド (0V基準電圧)
3 GPIO 2 (SDA) SDA I2Cデータ
5 GPIO 3 (SCL) SCL I2Cクロック

これらをジャンプワイヤーで接続すると、次のようになりました。

f:id:kimura_khs:20200922113135j:plain

PythonからBME280にアクセス

とりあえず最速で

細かいことはいいから動かしたい人はこちらでどうぞ。 BME280を繋いだ状態で実行してくださいね。

$ sudo raspi-config nonint do_i2c 0
$ sudo apt install python3-pip
$ sudo pip3 install smbus2 pimoroni-bme280
$ python3
>>> from smbus2 import SMBus
>>> from bme280 import BME280
>>> bme280 = BME280(i2c_dev=SMBus(1))
>>> print(bme280.get_temperature())
21.239322265941883
>>> print(bme280.get_humidity())
50.69910585087109
>>> print(bme280.get_pressure())
1003.5124021075654
>>> exit()

中身を詳しく知りたい方は続きをどうぞ。

I2Cの有効化

Raspberry Pi OSのインストール直後はI2Cが無効になっています。 有効化するには、raspi-configのメニューから設定できます。

$ sudo raspi-config

で設定画面を起動し、"5 Interfacing Options" → "P5 I2C" → "Yes" を選択してください。

もしくは、同じことが次の1行でもできます。メニューをたどる必要はありません。

$ sudo raspi-config nonint do_i2c 0

Pythonライブラリのインストール

BME280のライブラリを作ってGitHubに上げている方がいますので、使わせていただきましょう😌

github.com

PyPIにも登録されているので、pipを使って簡単にインストールできます。まずはpipをインストールします。

$ sudo apt install python3-pip

続いて、先ほどのライブラリをインストールします。また、PythonからI2Cバスにアクセスするsmbus2というライブラリもインストールします。

$ sudo pip3 install smbus2 pimoroni-bme280

これで準備が完了です。

サンプルプログラム

準備ができたら、次のようなプログラムを適当な名前で作成しましょう。

$ nano bme280_test.py

中身は次のようになります。

#!/usr/bin/env python

import time
from smbus2 import SMBus
from bme280 import BME280

# Initialise the BME280
bme280 = BME280(i2c_dev=SMBus(1))

# Wait for BME280 becomes stable
time.sleep(1)

temperature = bme280.get_temperature()
pressure = bme280.get_pressure()
humidity = bme280.get_humidity()

print('{:05.2f}*C {:05.2f}hPa {:05.2f}%'.format(temperature, pressure, humidity))

これを実行すると、センサーの値が読めます。

$ python3 bme280_test.py
21.24*C 666.19hPa 75.37%

簡単に読めましたね。

定期的にセンサーの値を読むようにしてInfluxDBに投入→Grafanaで可視化のように、様々な応用が考えられますね😆 ぜひいろんな用途に使ってみてください!

www.mikan-tech.net

www.mikan-tech.net

www.mikan-tech.net


  1. もっとも、6営業日以内に発送のはずが、結局発送されたのは18日後で、かなりハラハラしましたが…。無事到着したのでよしとしましょう。お店によって当たり外れがあるので、届けばラッキーくらいに思った方が良いかもしれません。最悪トラブルの場合でもAliExpressが間に入ってくれるのですが、クレームを入れる手間もかかりますしね。