I2Cセンサーの種類 |
温度・湿度・気圧センサー |
|
主な機能 |
温度・湿度・気圧センサー |
|
I2Cデバイス名 |
BME-280 |
|
写真
|
||
開発したデバイスの入手先 製品名 品番・型番 |
スイッチサイエンス BME280搭載 温湿度・気圧センサモジュール(SSCI-022361) |
|
デバイスのData-Sheet |
https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf |
|
デバイスの主な仕様
|
電源電圧 I2Cアドレス 分解能 I2C通信速度 検出範囲 |
1.7V~3.6V (5Vでは使えません) 0X76、0X77(SDO で選択可能) 20bit~16bit(IIRフィルタ使用の有無で決定します) 100K/400K/3.4Mbps 温度:-40℃~85℃ 精度:±1℃ 湿度:0~100%RH 精度:±3% 気圧:300~1100hpa 精度:±1.0hpa~0.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 |
|
|
|
|
開発・テスト風景
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 |
キャリブレーションデータ26~41 |
0xE1 |
REG_ADDR.RESET |
リセット |
0xE0 |
REG_ADDR.ID |
ID |
0xD0 |
REG_ADDR.CALIB00_CALIB25 |
キャリブレーションデータ00~25 |
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
|