部品実験 元に戻る

BME280 2024/11/01

本文目次

本文以外目次
1.簡単につかう
2.I2Cスレーブアドレス
3.レジスタ
4.出力補正計算
5.概要
1.BME280 Arduinoプログラム
2.BME280 Pythonプログラム(RaspberrPi)

本   文
1.簡単に使う
 手順は
1 設定 (1)設定 1-1~1-3  
2 補正値取得 (2)値の要求2-1~2-3   (3)値の返信3-1~3-3
3 データ取得 (2)値の要求2-4  (3)値の返信3-4
 です。

(1) 設定 1-1 温度測定条件設定 湿度のオーバーサンプリングの設定
 湿度のオーバーサンプリング ×1に設定
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
 ③温度測定条件設定レジスタの設定
->
ー>
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xF2(※温度測定条件設定レジスタ)
0x01


(1) 設定 1-2 温度測定条件設定 温度、気圧のオーバーサンプリングとモードの設定
 温度、気圧のオーバーサンプリング ×1、ノーマルモードに設定
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
 ③温度測定条件設定レジスタの設定
->
ー>
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xF4(※温度、気圧測定条件設定レジスタ)
0x27  b 0010 0111


(1) 設定 1-3 デバイスのレート、フィルタ、およびインターフェース オプションを設定
通常モードでの非アクティブ期間tstandby =1000ms に設定
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
 ③温度測定条件設定レジスタの設定
->
ー>
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xF5 (※温度測定条件設定レジスタ)
0xA0   b 1010 0000


補正値の取得
(2)値の要求2-1~2-3  (3)値の返信3-1~3-3
 3回に分けて補正パラメータを取得します。


(2)値の要求2-1
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0x88 (※補正データ calib00)
(3)値の返信3-1   レジスタ0x88から24個のデータを取得
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0x87 ~ 0x10 24個




(2)値の要求2-2
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xA1 (※)
(3)値の返信3-2    レジスタ0xA1から1個のデータを取得
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの返信
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0x4B


(2)値の要求2-3
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xE1 (※)
(3)値の返信3-3    レジスタ0xE1から7個のデータを取得
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの返信
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0x 76 0100 12 23 03 1E


(3)値の返信3-1~3-3まとめ 
 取得データ 32個の役目  Symbol 「Tn」 は圧力関連値 「Pn」は湿度関連値
Add 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A1 E1 E2 E3 E4 E5 E6 E7
Data 87 6F 01 68 32 00 C7 8E 3F D6 D0 0B 34 1F BB FF F9 FF AC 26 0A D8 BD 10 4B 76 01 00 12 23 03 1E
Symbol T1 T2 T3 P1 P2 P3 P4 P5 P6 P7 P8 P9 H1 H2 H3 H4 H5 H6
Exc 6F 87 68 01 00 32 8E C7 D6 3F 0B D0 1F 34 FF BB FF F9 26 AC D8 0A 10 BD 4B 01 76 00 12 23 23 03 1E
Value 28551 26625 50 36551 54847 3024 7988 65467 65529 9888 55306 4285 75 374 00 4643 8963 30
上記T1~T3およびP1~P9、H1~H6の補正値により次に取得するデータを加工して、気圧・湿度・温度を算出する。 
詳細計算方法は「4.出力補正計算」を確認下さい。

温度、湿度、気圧データの取得
(2)値の要求2-4
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの選択
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0xF7 (※)

(3)値の返信3-4(温度、湿度、気圧データ)
 ①読取るBME280のスレーブアドレス番号
 ②設定するレジスタの返信
->
ー>
76   詳細は「2.I2Cスレーブアドレス」参照
0x  53 4C 00  86 81 00  66 40

データと測定項目一覧表
Add Data 測定項目
F7,F8,F9 53,4C,00 気圧
FA,FB,FC 86,81,00 温度
FD,FE 66,40 湿度

補正値によりデータを計算した測定結果は
TEMP : 29.88 DegC PRESS : 998.10 hPa HUM : 42.93 %
[目次に戻る]


2.I2Cスレーブアドレス
SDA端子と下記表の端子を接続することによりスレーブアドレスが決定する。
No SDA スレーブアドレス
1 GNDと接続 0x76
2 SDOと接続 0x77
[目次に戻る]


3.レジスタ
レジスタ一覧表
No アドレス 名称 説明 Type
1 0x88..0xA1 calib00..calib25 補正用データ R
2 0xD0 id チップID R
3 0xE0 reset リセット W
4 0xE1..0xF0 calib26..calib41 補正用データ R
5 0xF2 ctrl_hum 温度測定条件設定 R/W
6 0xF3 stataus ステータス R
7 0XF4 ctel_meas 測定条件設定 R/W
8 0xF5 config 動作設定 R/W
9 0xF7 press_msb 気圧データ(上位8bit) R
10 0xF8 press_lsb 気圧データ(下位8bit) R
11 0xF9 press_xlsb 気圧データ(最下位4bit) R
12 0xFA temp_msb 温度データ(上位8bit) R
13 0xFB temp_lsb 温度データ(下位8bit) R
14 0xFC temp_xlsb 温度データ(最下位4bit) R
15 0xFD hum_msb 湿度データ(上位8bit) R
16 0xFE hum_lsb 湿度データ(下位8bit) R

(1) 0x88 calib00~calib25
 補正値で計算方法は 「4.出力補正計算」を確認下さい。
[レジスター一覧表に戻る]


(2) 0xD0 idレジスタ 「チップID」
「id」レジスタにはチップ識別番号chip_id[7:0](0x60)が含まれています。
この番号は、デバイスのパワーオンリセットが完了するとすぐに読み取ることができます。
[レジスター一覧表に戻る]


(3) 0xE0 resetレジスタ「リセット」
「リセット」レジスタにはソフトリセットワードリセット[7:0]が含まれています。
レジスタに値0xB6が書き込まれると、デバイスは完全なパワーオンリセット手順を使用してリセットされます。
0xB6以外の値を書き込んでも効果はありません。読み出し値は常に0x00です。
[レジスター一覧表に戻る]


(4) 0xE1~ calib26
 補正値で計算方法は 「4.出力補正計算」を確認下さい。
[レジスター一覧表に戻る]


(5) 0xF2 ctrl_humレジスタ 「温度測定条件設定」
「ctrl_hum」レジスタは、デバイスの湿度データ取得オプションを設定します。
このレジスタへの変更は、「ctrl_meas」への書き込み操作後にのみ有効になります。
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
-- -- -- -- -- osrs_h[2:0]
湿度データのオーバーサンプリングを制御します。下表を参照してください。
設定については を、詳細についてはデータシート 3.4.1 章を参照してください。
bit 湿度/温度のオーバーサンプリング RMSノイズ※
000 スキップ(出力は0x8000に設定)  
001 ×1 / ×1 0.07
010 ×2 / ×1 0.05
011 ×4 / ×1 0.04
100 ×8 / ×1 0.03
その他 ×16 / ×1 0.02
 ※25℃における湿度で
[レジスター一覧表に戻る]


(6) 0xF3 statausレジスタ 「ステータス」
「ステータス」レジスタには、デバイスのステータスを示す 2 つのビットが含まれています。
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
-- -- -- -- measuring[0] -- -- im_update[0]
measuring[0]
変換が実行中の場合は自動的に「1」に設定され、結果がデータ レジスタに転送 されると「0」に戻ります。

im_update[0]
NVM データがイメージ レジスタにコピーされるときに自動的に '1' に設 定され、コピーが完了すると '0' に戻ります。
データは、パワーオン リセ ット時および各変換の前にコピーされます。
[レジスター一覧表に戻る]


(7) 0xF4 ctrl_measレジスタ 
「ctrl_meas」レジスタは、デバイスの圧力と温度のデータ収集オプションを設定します。
変更を有効にするには、 「ctrl_hum」を変更した後にレジスタに書き込む必要があります。
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
osrs_t[2:0] osrs_p[2:0] mode[1:0]
osrs_t[2:0]
温度データのオーバーサンプリングを制御します。
設定については 下表を、詳細についてはデータシート第 3.4.3 章を参照してください。
bit 温度のオーバーサンプリング RMSノイズ※
000 スキップ(出力は0x8000に設定)  
001 ×1 0.005
010 ×2 0.004
011 ×4 0.003
100 ×8 0.003
その他 ×16 0.002
 ※25℃における温度で

osrs_p[2:0]
圧力データのオーバーサンプリングを制御します。
下表を参照してください。設定については を、データシート詳細については 3.4.2 章を参照してください。
IIRフィルタ係数
bit 気圧/温度のオーバーサンプリング オフ 2 4 8 16
000 スキップ(出力は0x8000に設定)          
001 ×1 / ×1 3.3 1.9 1.2 0.9 0.4
010 ×2 / ×1 2.6 1.5 1.0 0.6 0.4
011 ×4 / ×1 2.1 1.2 0.8 0.5 0.3
100 ×8 / ×1 1.6 1.0 0.6 0.4 0.2
その他 ×16 / ×2 1.3 0.8 0.5 0.4 0.2

mode[1:0]
デバイスのセンサーモードを制御します。
下表を参照してください。
設定については を、詳細については データシート3.3 章を参照してください。
bit モード
00 スリープモード
01又は10 強制モード
11 ノーマルモード
[レジスター一覧表に戻る]


(8) 0xF5 configレジスタ 「config」 1010 0000
「 config」レジスタは、デバイスのレート、フィルタ、およびインターフェース オプションを設定します。
通常モードでは、「config」レジスタへの書き込みは無視される場合があります。
スリープ モードでは、書き込みは無視されません。
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
t_sb[2:0] filter[2:0] -- spi3w en[0]
t_sb[2:0]
通常モードでの非アクティブ期間tstandbyを制御します。
設定については下表 を、詳細についてはデータシート第 3.3.4 章を参照してください。
bit スタンバイ(ms)
000 0.5
001 62.5
010 125
011 250
100 500
101 1000
110 10
111 20

filter[2:0]
IIRフィルタの時定数を制御します。
下表を参照してください。
設定については を、詳細については データシート3.4.4 章を参照してください。
bit フィルタ係数 サンプル数※
000 オフ 1
001 2 2
010 4 5
011 8 11
その他 16 22
 ※サンプルが75%以上に達するステップ応答の数

レジスタフィルタに書き込むと、フィルタはリセットされます。
次の ADC 値は変更されずにフィルタを通過し、フィルタの初期メモリ値になります。
温度または圧?の測定がスキップされた場合、出力レジスタが 0x80000 に設定されていても、対応するフィルタ メモリは変更されません。
以前にスキップされた測定が再度有効になると、測定がスキップされなかった最後のときのフィルタメモリを使用して出力がフィルタされます。
これが望ましくない場合は、フィルタを再初期化するためにフィルタレジスタに書き込んでください。
さまざまなフィルタ設定のステップ応答(たとえば、高さの突然の変化に対する応答)が図 7 に表示されています。

spi3w_en[0]
'1'に設定すると3線式SPIインターフェースが有効になります。
詳細については データシート6.3章を参照してください。
[レジスター一覧表に戻る]


(9) pressレジスタ 0xF7…0xF9 「気圧データ」(_msb、_lsb、_xlsb)
「press」レジスタには、生の圧力測定出力データup[19:0]が含まれています。
デバイスから圧力と温度の情報を読み出す方法の詳細については、データシート第4章を参照してください。
[レジスター一覧表に戻る]


(10) tempレジスタ 0xFA…0xFC 「温度データ」(_msb、_lsb、_xlsb)
「temp」レジスタには、生の温度測定出力データut[19:0]が含まれています。
デバイスから圧力と温度の情報を読み出す方法の詳細については、データシート第4章を参照してください。
[レジスター一覧表に戻る]


(11) hum レジスタ 0xFD…0xFE 「湿度データ」(_msb, _lsb)
「temp」レジスタには、生の温度測定出力データut[19:0]が含まれています。
デバイスから圧力と温度の情報を読み出す方法の詳細については、データシート第4章を参照してください。
[レジスター一覧表に戻る]

[目次に戻る]


4.出力補正計算
補正計算に使用するデータはBME280のレジスタアドレス 0x88(データ数24個)、0xA1(データ数1個)、0xE1(データ数7個) の3箇所から得られるデータを使用する。
下記表は各々のデータが何に関連するのかを示す。
なお表の
 「Add」はレジスタアドレスを示す
 「Data」はレジスタアドレスのデータを示す(1項で取得したデータ例)
 「Symbol」の 「Tn」 は圧力関連値 「Pn」は湿度関連値を示す。
 「Value」は各Symbolの値(10進数)を示す。

出力補正データ一覧表
Add 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A1 E1 E2 E3 E4 E5 E6 E7
Data 87 6F 01 68 32 00 C7 8E 3F D6 D0 0B 34 1F BB FF F9 FF AC 26 0A D8 BD 10 4B 76 01 00 12 23 03 1E
Symbol T1 T2 T3 P1 P2 P3 P4 P5 P6 P7 P8 P9 H1 H2 H3 H4 H5 H6
Exc 6F 87 68 01 00 32 8E C7 D6 3F 0B D0 1F 34 FF BB FF F9 26 AC D8 0A 10 BD 4B 01 76 00 12 23 23 03 1E
Value 28551 26625 50 36551 54847 3024 7988 65467 65529 9888 55306 4285 75 374 00 4643 8963 30

BME280のデータシートでは補正値により下記方法を参照する事と言っている。
[目次に戻る]


5.概要
(1)仕様
No スペック 説  明
1 電源電圧 DC1.71~3.6V
2 通信方式 I2C(最大3.4MHz)
SPI(最大10MHz)
3 測定レンジ・精度 温度:-40~+80℃±1℃
湿度:0~100%±3%
気圧:300~1100hPa±1hPa
4 分解能 温度:1℃
湿度:1%
気圧:1hPa
5 消費電流 1.8μA:1Hz湿度・温度
2.8μA:1Hz圧力・温度
3.8μA:1Hz湿・圧力・温度
0.1μA:スリープモード

(2)ピン
ピンと目的は下表のとおり
PIN DEVICE DESCRIPTION
1 VDD Power supply: 3.3V to 5V
2 GND Ground I2C slave address select
3 SCL Serial clock input: Clocks data on SDA
4 SDA Serial data: Transmits and receives data
写真の右側はVDDが5V対応になっている。
左側はSPI対応品

(3)内部回路

[目次に戻る]