中国のお店が中国国外に売る通販モールAliExpressで、安いセンサーをいくつか購入しました。 今回はその中の1つ、温度・湿度・気圧が測れるBME280が搭載されたセンサーモジュールをRaspberry Piにつないでみました。
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への接続
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ライブラリを公開しているので、使わせていただきましょう😌
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で可視化のように、様々な応用が考えられますね😆 ぜひいろんな用途に使ってみてください!
-
もっとも、6営業日以内に発送のはずが、結局発送されたのは18日後で、かなりハラハラしましたが…。無事到着したのでよしとしましょう。お店によって当たり外れがあるので、届けばラッキーくらいに思った方が良いかもしれません。最悪トラブルの場合でもAliExpressが間に入ってくれるのですが、クレームを入れる手間もかかりますしね。↩