wiki:BME280

Version 6 (modified by soumura, 3 years ago) (diff)

--

BME280搭載 温湿度・気圧センサモジュールの使い方

特徴

BME280の主な特徴は以下の通りです。

  • 1チップで温度・湿度・気圧の3種類の環境情報を取得可能
  • I2CとSPI 2種類の通信方法に対応
  • 動作電圧が1.8V~3.3V Edisonなどの1.8V系のI/Oに接続可能

初期設定

次のレジスタマップを見ながらBME280の設定をします。

・configレジスタ(0xF5)は次の項目を設定するためのレジスタです。

  • t_sb[2:0] スタンバイ時間
  • filter[2:0] IIRフィルタの有効/無効
  • spi3w_en[0] 3 wire SPIの有効/無効

スタンバイ時間は次の中から選択します。

スタンバイ時間とはセンサが計測をしないで待機している時間のことです。
今回は例として1000msを選択しました。

IIRフィルタの値は次の中から選択します。

温度と気圧は計測結果を20bitで取得しますが、下位の4bit分(xlsb)は無効です。
IIRフィルタを有効にすると下位4bitも有効になります。しかし、フィルタを有効にすると正しい値を取得するために複数回のサンプリングが必要になります。
フィルタの値が大きいほど必要なサンプリング回数が増えます。
今回は例としてFilter offを選択しました。

BME280は3線式と4線式のSPIに対応しています。
spi3w_en[0]を0にすると4線式、1にすると3線式です。ここでは0にします。

よってconfigレジスタの値は 0b10100000 0xA0に決まりました。

・ctrl_measレジスタ(0xF4)は次の項目を設定するためのレジスタです。

  • osrs_t[2:0] 温度測定の有効(オーバーサンプリング値)/無効
  • osrs_p[2:0] 気圧測定の有効(オーバーサンプリング値)/無効
  • mode[1:0] BME280の測定モード設定

温度測定の有効/無効は次のように設定します。

無効にすると結果は0x80000に固定されます。
オーバーサンプリングをすることでノイズによる測定結果への影響を軽減することができますが、測定時間が増加します。
今回は例としてoversampling x 1を選択しました。

気圧測定の有効/無効は次のように設定します。

無効にすると結果は0x80000に固定されます。
オーバーサンプリングをすることでノイズによる測定結果への影響を軽減することができますが、測定時間が増加します。
今回は例としてoversampling x 1を選択しました。

BME280のモード設定は次の中から選びます。

モードは Sleep、Forced、Normalの三つです。
Sleepは計測をしないモード、電源を入れてすぐはSleepモードです。
Forcedモードは1度だけ測定を行うモードです。測定を行うと自動的にSleepモードに戻ります。
Normalモードは繰り返し測定を行うモードです。測定を繰り返す間隔は温度・湿度・気圧の測定時間とスタンバイ時間を合わせた時間です。
今回の例ではNormalモードを使用します。

よってctrl_measレジスタの値は 0b00100111 0x27に決まりました。

・ctrl_humレジスタ(0xF2)

  • osrs_h[2:0] 湿度測定の有効(オーバーサンプリング値)/無告

  湿度測定の有効/無効は次のように設定します。

無効にすると結果は0x80000に固定されます。
オーバーサンプリングをすることでノイズによる測定結果への影響を軽減することができますが、測定時間が増加します。
今回は例としてoversampling x 1を選択しました。

よってctrl_humレジスタの値は 0b00000001 0x01に決まりました。


サンプルスケッチ

レジスタの設定値が決定したので値をレジスタに書込み測定を開始します。
気圧の情報はレジスタのアドレス 0xF7 0xF8 0xF9に格納されます。
温度の情報はレジスタのアドレス 0xFA 0xFB 0xFCに格納されます。
湿度の情報はレジスタのアドレス 0xFD 0xFE に格納されます。 湿度だけ2byteです。

温度・湿度・気圧の補正をするための値がアドレス0x88~0xA1 0xE1~0xF0に格納されています。
以上の情報を元にサンプルスケッチを書いてみました。

I2Cの場合

Attachments (13)

Download all attachments as: .zip