皆さんこんにちは。yossyです。
ラズピコを使った電子工作をしていると、温度や湿度、気圧ってどうやって測るんだろう?と思ったことはありませんか?
それは、BME280というセンサーを使えば簡単に計測することができます。
この記事では、BME280を使って温湿度と気圧を簡単に測定する方法を解説します。
BME280とは?
BME280は、ボッシュ社が開発した高性能な環境センサーです。このセンサーは、温度、湿度、気圧の3つの環境情報を同時に測定できる複合センサーとして広く利用されています。
主な特徴
- 低消費電力: スリープ時0.1μA、測定時は340μA〜714μA程度
- 高精度: 温度±1℃、湿度±3%RH、気圧±1hPa程度の精度
- 広い測定範囲:
- 温度: -40℃〜85℃
- 湿度: 0%〜100%RH
- 気圧: 300hPa〜1100hPa
通信インターフェース
BME280は、I2CとSPIの両方の通信プロトコルをサポートしています。
I2CとSPIは、マイコンとセンサーの間でどのようにデータをやり取りするかの方法です。
この記事では、簡単に扱えるI2Cを使ってデータを取得していきます。
BME280の使い方
それでは、BME280をラズピコで使う方法について解説します。
まず、BME280を持っていない人は購入しましょう。
2025/02/17追記
掲載していたリンクがBMP280のものでした。ご迷惑をおかけし申し訳ありませんでした。
また、Amazonに出品されているBME280は信頼性に疑問があるというご指摘を受けましたため、Amazonリンクを削除し、信頼性のある秋月電子さんのBME280のリンクを掲載させていただきます。
秋月電子さんのBME280(https://akizukidenshi.com/catalog/g/g109421)
もし、どうしてもAmazonで購入したい方は、ご自身で検索して購入をお願いします。
気圧測定のみのBMP280と混同しやすくなっていたりと問題があるようなので、ご購入の際は十分ご注意ください。
ライブラリ
ラズピコでBME280を使うために、ライブラリをインストールします。
ライブラリは、センサーを使えるようにする説明書のようなものだと思ってください。
まず、ライブラリのページ(https://github.com/robert-hh/BME280)にアクセスします。
このような画面になるので、bme280_float.pyをクリックします。
ちなみに、名前にあるfloatは、浮動小数点(小数が使える数値)のことです!

そうしたら、右上のコピーボタンをクリックして、コードをコピーします。

Thonnyで新しいファイルを作成し、コピーしたコードをペーストします。

そしたら、ラズピコにbme280_float.pyという名前で保存しましょう。
保存するには右上のファイル→保存で、出てきたダイアログでRaspberry Pi Picoを選択します。
これで、ライブラリのインストールは完了です!
プログラム
次に、プログラムを解説します。
今回作成したプログラムはこちらです。
import utime
from machine import I2C, Pin
import bme280_float
# I2Cの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=100000)
# BME280オブジェクトの作成
bme = bme280_float.BME280(i2c=i2c)
while True:
# valuesは ("xx.xxC", "xxxx.xxhPa", "xx.xx%") のタプルを返します。
temp_str, pres_str, humi_str = bme.values
# read_compensated_dataは数値で(温度(℃), 気圧(Pa), 湿度(%))のarrayを返します。
#または、read_compensated_data(0)→温度のように一つづつ値を取り出せます。
temp, pres, humi = bme.read_compensated_data()
print("Temperature:", temp_str)
print("Pressure: ", pres_str)
print("Humidity: ", humi_str)
print("------------------------")
print(temp)
print(pres)
print(humi)
print("------------------------")
utime.sleep(2)
ポイントごとに解説していきます。
まずはこちら
import utime
from machine import I2C, Pin
import bme280_float
これは、ライブラリをインポートしている部分です。
特徴は、I2Cを使うのでI2Cのライブラリと、さっきインストールしたbme280用のライブラリをインポートしているところです。
次はこの部分
# I2Cの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=100000)
# BME280オブジェクトの作成
bme = bme280_float.BME280(i2c=i2c)
これは、I2Cを初期化して、bme280オブジェクトを作成しています。
オブジェクトの作成は、ライブラリの内容を実際のbme280で使えるようにする感じです。
# valuesは ("xx.xxC", "xxxx.xxhPa", "xx.xx%") のタプルを返します。
temp_str, pres_str, humi_str = bme.values
# read_compensated_data()は数値で(温度(℃), 気圧(Pa), 湿度(%))のarrayを返します。
#または、read_compensated_data(0)→温度のように一つづつ値を取り出せます。
temp, pres, humi = bme.read_compensated_data()
これは、bme280からデータを取得するプログラムです。
数値と文字列の2種類があるので、使いやすい方を選びましょう。
配線

配線は、次の表の通りに行ってください。
BME280のピン | ラズピコのピン |
---|---|
VCC | 3.3V |
GND | GND |
SDA | 16番ピン |
SCL | 17番ピン |
動作

実行すると、下のシェルに2秒ごとに情報が表示されます。
単位がついている方が文字列で、数字だけのほうが数値のデータです。
もしEIOエラーが出たら

これは、ラズピコとBME280がうまくつながっていないときに起こるエラーです。
以下のことを試すと改善するかもしれません。
- ラズピコをつなぎ直す
- パソコンを再起動する
- BME280とラズピコを繋いでいるケーブルを変えてみる
- ノートPCの場合は、電源アダプターを抜いてみる
まとめ
今回は、Raspberry Pi PicoでBME280を使って温湿度と気圧を測定する方法を解説しました!
温湿度と気圧がわかれば、室内の環境を表示するモニターを作ったり、気圧が低くなったら知らせる装置を作ることができます。
BME280を使えばそれらを簡単に計測することができるので、ぜひ試してみてください。
秋月電子さんのBME280(https://akizukidenshi.com/catalog/g/g109421/)
この記事で紹介したBME280を使用した「環境モニター」を制作した記事はこちら!
