テキスト ボックス:  BME280

 

 

 

I2Cセンサーの種類

温度・湿度・気圧センサー

主な機能

温度・湿度・気圧センサー

I2Cデバイス名

BME-280

写真

 

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

開発したデバイスの入手先 

製品名 品番・型番

スイッチサイエンス

BME280搭載 温湿度・気圧センサモジュール(SSCI-022361

デバイスのData-Sheet

https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf

デバイスの主な仕様

 

電源電圧

I2Cアドレス

分解能

I2C通信速度

検出範囲

1.7~3.6V (5Vでは使えません)

0760X77SDO で選択可能)

20bit~16bit(IIRフィルタ使用の有無で決定します)

100K/400K/3.4Mbps

温度:-40~85℃  精度:±1

湿度:0~100%RH  精度:±3%

気圧:300~1100hpa 精度:±1.0hpa0.12hpa 

説明

最低動作電圧1.7Vで消費電流が1Hz計測時で温度、湿度測定時は1.8μA、温度、湿度、気圧測定時でも3.6μA,スリープモードでは0.1μAと超低電圧、超低消費電力のセンサー

です。

データサンプリング時のフィルタリング処理や補正処理等の機能も有り、使い方はチョット面倒ですが、価値の有るI2Cデバイスの一つです。

 

耐ノイズ対策では、オーバーサンプリング(1~16)とIIRフィルタの設定で向上して行きますので、使用環境に合わせた利用が可能です。

 

湿度データで16bit、温度、気圧データは20bitで構成されている為、I2Cセンサードライバーを使用しない場合、8bitレジスタを2度読み、3度読みを行い、データを集め、符号処理、補正演算を行わなければ成りませんが、I2Cインターフェース・ドライバーを用いれば、補正演算後のデータがプロパティにセットされて返ってくる為、非常に便利です。また、ドライバーが内部でポインター指定処理を実施する為、レジスタ指定は不要でプロパティへ値の代入、読み出しのみで可能です。

 

通常のレジスタの読み書きは、register
address
を指定した後に処理を行いますが、I2Cセンサー・ドライバーを使用する場合は使用するプロパティにregister addressが紐づけして有る為レジスタアドレスの指定は不要でプロパティへ値の代入、読み出しのみで可能です。

 

 

 

 

 開発・テスト風景

IMG_2415

GROVEコネクタ端子が無い為、ピンヘッダを半田付けし、ユニバーサル基板に取り付けたコネクタで接続

 

I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)

hum_lsb

calib26・・・・・・calib41

hum_msb

reset

temp_xlsb

id

temp_lsb

calib00・・・・・・calib25

temp_msb

 

press_xlsb

 

press_lsb

 

press_msb

 

config

 

ctrl_meas

 

status

 

ctrl_hum

 

  

I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド

    プロパティ

機能名

機能説明

hum

湿度の測定出力データを取得します。

temp

温度の測定出力データを取得します。

press

気圧の測定出力データを取得します。

t_sb

ノーマルモードでの非アクティブな継続時間を取得または設定します。

filter

IIRフィルタの時定数を取得または設定します。

spi3w_en

3線式SPIインターフェイスの設定を取得または設定します。

osrs_t

温度データのオーバサンプリング制御を取得または設定します。

osrs_p

気圧データのオーバサンプリング制御を取得または設定します。

mode

デバイスのセンサーモードを取得または設定します。

measuring

測定状態を取得します。

im_update

レジスタ更新状態を取得します。

osrs_h

湿度データのオーバサンプリング制御を取得または設定します。

 

 

機能名

機能説明

Reset

パワーオンリセット手順を使用してリセットします。

ID

チップ識別番号を取得します。

dig_T1

温度補正関連値1を取得します。

dig_T2

温度補正関連値2を取得します。

dig_T3

温度補正関連値3を取得します。

dig_P1

気圧補正関連値1を取得します。

dig_P2

気圧補正関連値2を取得します。

dig_P3

気圧補正関連値3を取得します。

dig_P4

気圧補正関連値4を取得します。

dig_P5

気圧補正関連値5を取得します。

dig_P6

気圧補正関連値6を取得します。

dig_P7

気圧補正関連値7を取得します。

dig_P8

気圧補正関連値8を取得します。

dig_P9

気圧補正関連値9を取得します。

dig_H1

湿度補正関連値1を取得します。

dig_H2

湿度補正関連値2を取得します。

dig_H3

湿度補正関連値3を取得します。

dig_H4

湿度補正関連値4を取得します。

dig_H5

湿度補正関連値5を取得します。

dig_H6

湿度補正関連値6を取得します。

 

メソッド

機能名

機能説明

Init

初期化処理を行います。

Read

指定レジスタ読込

ReadTemperature

各プロパティの値を使用し温度を計算します。(補正演算処理後の値)

ReadPreasure

各プロパティの値を使用し気圧を計算します。(補正演算処理後の値)

ReadHumidity

各プロパティの値を使用し湿度を計算します。(補正演算処理後の値)

Write

指定レジスタ書込

定数

機能名

機能説明

定数値

REG_ADDR.HUM

湿度の測定出力データ

0xFD

REG_ADDR.TEMP

温度の測定出力データ

0xFA

REG_ADDR.PRESS

気圧の測定出力データ

0xF7

REG_ADDR.CONFIG

コンフィグ

0xF5

REG_ADDR.CTRL_MEAS

計測制御

0xF4

REG_ADDR.STATUS

状態

0xF3

REG_ADDR.CTRL_HUM

湿度の測定出力データ

0xF2

REG_ADDR.CALIB26_CALIB41

キャリブレーションデータ2641

0xE1

REG_ADDR.RESET

リセット

0xE0

REG_ADDR.ID

ID

0xD0

REG_ADDR.CALIB00_CALIB25

キャリブレーションデータ0025

0x88

 

 

I2Cセンサードライバーを使ったVBでのサンプルソース

 

Imports I2CLibrary

Public NotInheritable Class BME280Page

 Inherits Page

 

 Private Const BME280_Address As Byte = &H77

 Private BME280 As BME280 = New BME280()

 Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer()

 

 Public Sub New()

  InitializeComponent()

  Call Init()

 End Sub

 

 Private Async Sub Init()

  Await BME280.Init(BME280_Address)

 End Sub

 

 Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs)

  BME280.Read(BME280.REG_ADDR.CONFIG)

  BME280.Read(BME280.REG_ADDR.CTRL_MEAS)

  BME280.Read(BME280.REG_ADDR.CTRL_HUM)

 

  BME280.t_sb = BME280.standbySettings_e.tsb_0p5ms

  BME280.mode = BME280.mode_e.smNormal

  BME280.filter = BME280.filterCoefficient_e.fc_16

  BME280.osrs_p = BME280.oversampling_e.os16x

  BME280.osrs_t = BME280.oversampling_e.os16x

  BME280.osrs_h = BME280.oversampling_e.os16x

 

  BME280.Write(BME280.REG_ADDR.CTRL_HUM)

  BME280.Write(BME280.REG_ADDR.CTRL_MEAS)

  BME280.Write(BME280.REG_ADDR.CONFIG)

 

  RefreshTimer.Interval = TimeSpan.FromMilliseconds(100)

  RefreshTimer.Start()

 End Sub

 Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick

  RefreshTimer.Stop()

 

  BME280.Read(BME280.REG_ADDR.HUM)

  BME280.Read(BME280.REG_ADDR.TEMP)

  BME280.Read(BME280.REG_ADDR.PRESS)

  BME280.Read(BME280.REG_ADDR.CONFIG)

  BME280.Read(BME280.REG_ADDR.CTRL_MEAS)

  BME280.Read(BME280.REG_ADDR.STATUS)

  BME280.Read(BME280.REG_ADDR.CTRL_HUM)

  BME280.Read(BME280.REG_ADDR.CALIB26_CALIB41)

  BME280.Read(BME280.REG_ADDR.RESET)

  BME280.Read(BME280.REG_ADDR.ID)

  BME280.Read(BME280.REG_ADDR.CALIB00_CALIB25)

 

  Dim ftmp As Single = BME280.ReadTemperature

  Dim fhum As Single = BME280.ReadHumidity()

  Dim fpres As Single = BME280.ReadPreasure() / 100

 

  Debug.WriteLine(“{0:F2} , ftmp)

  Debug.WriteLine(“{0:F2} , fhum)

  Debug.WriteLine(“{0:F2} hPa”, fpres)

 

  RefreshTimer.Start()

 End Sub

 

 Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Stop()

 End Sub

 

 Private Sub btnBack_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Stop()

  BME280.close()

  App.rootFrame.Navigate(GetType(MenuPage))

 End Sub

End Class