IoT(Internet of Things)のシンプルなテスト環境、実装環境としてRaspberry Piなどの小型のコンピュータが使用されています。
BME280は手ごろな値段で購入できる高精度の気温、湿度、気圧センサーです。この記事では、RaspberryとBME280を使用して温度、湿度、気圧を計測します。
必要なもの
- OSがインストール済みのRaspberry Pi (今回は4Bを使用します)
- BME280センサー (必要に応じてはんだ付けする)
- ジャンプワイヤ
- もしあれば、ブレッドボード
接続
以下の図に従って、GPIOにセンサーを接続します。
出典: Humidity, temperature and pressure
Raspberry Pi上でI2Cを有効化する
BME280からセンサーの値を読み取るために、I2Cという通信方法を利用します。
そのために、Raspberry Pi側でI2Cインターフェースを有効にします。再起動を要求された場合は、再起動を行ってください。
1 |
sudo raspi-config |
Pythonコードを作成し、センサー値を読み取る
今回はオープンソースのPythonライブラリであるdafruit/Adafruit_CircuitPython_BME280を使用します。
なお、Pythonのvenv仮想環境内で実施しますが、venvの使用は任意です。venvのセットアップはこちらを参照してください。
1.作業用ディレクトリとvenvの作成
1 2 3 |
mkdir bme280-py python -m venv .venv source .venv/bin/activate |
2.adafruit-circuitpython-bme280のインストール
1 |
pip3 install adafruit-circuitpython-bme280 |
3.サンプルコードの実行
以下のコードをtest-bme280.pyとして保存します。
bme280.sea_level_pressure
の値は、実際にいる場所の海面気圧を入力します。
リアルタイムの海面気圧の値はtenki.jpなどのサイトで表示されていますので、気になる方は調べて値を更新してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import board import time from adafruit_bme280 import basic as adafruit_bme280 # Create sensor object, using the board's default I2C bus. i2c = board.I2C() # uses board.SCL and board.SDA bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c) # change this to match the location's pressure (hPa) at sea level bme280.sea_level_pressure = 1011.6 while True: print("\nTemperature: %0.1f C" % bme280.temperature) print("Humidity: %0.1f %%" % bme280.relative_humidity) print("Pressure: %0.1f hPa" % bme280.pressure) print("Altitude = %0.2f meters" % bme280.altitude) time.sleep(2) |
4.コードの実行
1 2 3 4 5 6 |
$ python test-bme280.py Temperature: 25.4 C Humidity: 33.1 % Pressure: 1011 hPa Altitude = 9.55 meters |
トラブルシューティング
下記のようなエラーが現れた場合は、I2Cのアドレスを調べる必要があります。
1 |
ValueError: No I2C device at address: 0x77 |
まず、i2c-tools
をインストールします。
1 |
sudo apt install i2c-tools |
それからi2cdetect -y 1
コマンドを実行して、正しいI2Cアドレスを確認します。
1 2 3 4 5 6 7 8 9 10 |
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- |
この場合は、76が使用されているので、Pythonコードを以下のように修正します。
1 |
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, 0x76) |
まとめ
Raspberry PiとBME280センサーを使用して温度、湿度、気圧の計測ができることを確認しました。
Raspberry Piなどの小型のデバイスとセンサーを組み合わせて、環境のモニタリングやデータの蓄積、分析、自動化などに活用できます。
例えば、センサーの温度に応じて冷房の温度を調節したり、湿度が低くなった場合にアラーム音を出すなどの自動化ができたらとても楽しそうですね。