Raspberry Pi PicoでBME280を使う方法 | 温湿度・気圧を測定するには

  • URLをコピーしました!

皆さんこんにちは。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を使用する際は、I2Cを使用するためにJ3ピンをジャンパする必要があります。
その他、ピン配置などの詳細は付属のマニュアルをご確認ください。

BME280のピンラズピコのピン
VCC3.3V
GNDGND
SDA16番ピン
SCL17番ピン

動作

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

もしEIOエラーが出たら

実行したら、赤い文字でこのようなエラーが表示されるかもしれません。

これは、ラズピコとBME280がうまくつながっていないときに起こるエラーです。
以下のことを試すと改善するかもしれません。

  • ラズピコをつなぎ直す
  • パソコンを再起動する
  • BME280とラズピコを繋いでいるケーブルを変えてみる
  • ノートPCの場合は、電源アダプターを抜いてみる

まとめ

今回は、Raspberry Pi PicoでBME280を使って温湿度と気圧を測定する方法を解説しました!

温湿度と気圧がわかれば、室内の環境を表示するモニターを作ったり、気圧が低くなったら知らせる装置を作ることができます。
BME280を使えばそれらを簡単に計測することができるので、ぜひ試してみてください。

秋月電子さんのBME280(https://akizukidenshi.com/catalog/g/g109421/)

この記事で紹介したBME280を使用した「環境モニター」を制作した記事はこちら!

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次