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

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モジュールはこちらです。

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

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

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

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

Raspberry Piへの接続

画像出典: 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クロック

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

PythonからBME280にアクセス

2021/1/16 使用するPythonライブラリを変更しました

とりあえず最速で

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

$ sudo raspi-config nonint do_i2c 0
$ sudo apt install python3-pip
$ pip3 install adafruit-circuitpython-bme280
$ python3
>>> import adafruit_bme280
>>> import board,  busio
>>> import time
>>> i2c = busio.I2C(board.SCL, board.SDA)
>>> bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)
>>> print(bme280.temperature)
21.239322265941883
>>> print(bme280.relative_humidity)
50.69910585087109
>>> print(bme280.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ライブラリのインストール

アメリカでオープンソースハードウェアを展開しているAdafruit IndsustriesがBME280のPythonライブラリを公開しているので、使わせていただきましょう😌

github.com

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

$ sudo apt install python3-pip

続いて、先ほどのライブラリをインストールします。

$ pip3 install adafruit-circuitpython-bme280

これで準備が完了です。

サンプルプログラム

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

$ nano bme280_test.py

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

import adafruit_bme280
import board, busio
import time

i2c = busio.I2C(board.SCL, board.SDA)
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)

while True:
    print("\nTemperature: %0.1f C" % bme280.temperature)
    print("Humidity: %0.1f %%" % bme280.relative_humidity)
    print("Pressure: %0.1f hPa" % bme280.pressure)
    time.sleep(1)

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

$ python3 bme280_test.py
Temperature: 19.6 C
Humidity: 37.1 %
Pressure: 1012.5 hPa

(...1秒ごとに表示が続く)

簡単に読めましたね。

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

www.mikan-tech.net

www.mikan-tech.net

www.mikan-tech.net


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