温湿度センサー(DHT20)をI2C接続で使えたので,気圧センサーも追加しようと秋月のLPS25HBモジュールを使ってみました。
I2C接続でのデータ読み取りで少々ハマった点もあり,下記の「補足説明」などに沿った手順をメモしておきます。
[参考]
・AE-LPS25HB取扱説明書
・補足説明
・LPS25HB データシート
・サンプルプログラム
[ハード構成]
少々ハマったので,まずはメモリの心配もなく今私が一番使いやすい Raspberry Pi Pico につないで確かめていきました。

・モジュールのPin5をVccにつないでI2Cモードにして
Pin4はGNDにつないでスレーブアドレスを0x5Cに設定しました。
・I2CはPicoのデフォルトに接続,
プルアップは他のセンサーも使う予定なので今回は外付け抵抗で行っています。

[プログラム]
Arduinoで普通に書けますが,I2Cでのデータの読み取りが基本的には1バイトずつしかできないのが注意点ですね。
1) 設定部
1バイトの読み書きはsetupからすぐに使うので,先人に習って初頭に置いておきました。

2) setup
センサーの初期設定をしてスタートさせるパートです。
・センサーのリセット
CTRL_REG2レジスタの第2ビットを"1"にして"0"になるのを待ちます。
・設定値のリブート
CTRL_REG2レジスタの第7ビットを"1"にして"0"になるのを待ちます。


・オフセットの設定
工場出荷時の状態では誤差があるので,センサーの計測値と気象庁発表の現在地のデータ(私はWebで検索)との差をRPDSレジスタ(0x39-3A)に入れます。
最初の計測値を得るまでは差を"0"にしてプログラムしておかないとおかしな事になります(^^;;;;;;;
☆ 秋月の補足説明には計算値に誤植があり,サンプルプログラムを見ると以下が正しいと思います。
RPDS=(測定気圧hPa - 気象庁の実際の気圧hPa)×4096÷256

・データ取得間隔の設定と計測開始
CTRL_REG1レジスタ(0x20)の第7ビットを"1"にし,第6ビットから第4ビットを表から選択した値にします。
今回は"0x90"と1Hzのデータ取得に設定して,計測をスタートさせています。


3) loop
センサーからデータを読み取りシリアルに出力するパートです。
データは0x28から0x2Aに入っている24ビットです。
基本は1バイトずつアドレスを指定して読み込みますが,3バイト連続して読み込みたい時は注意書きのようにアドレスの第7ビットを"1"にします。
また,温度データはこの後0x2Bから続きますが,気圧の連続読み込みには含まれませんので,別に読み込む必要があります。


4) 出力例
シリアルモニタへの出力例です。
データの連続読み取りで少々ハマりましたが,,,何とか計測できるようになりましたV(^^)。

気圧が測れるようになったので,今までの温度・湿度とCO2の計測値と並べてみました。

CO2はCH32V003,温度・湿度はATtiny402,気圧はRaspberry Pi Pico とそれぞれで動いて雑然としていますが,7segLEDは明るいし何か楽しいですね(^^)。
ま,まとめるかそれぞれ別にしてポータブルにするか,,いろいろ考えられますね。
I2C接続でのデータ読み取りで少々ハマった点もあり,下記の「補足説明」などに沿った手順をメモしておきます。
[参考]
・AE-LPS25HB取扱説明書
・補足説明
・LPS25HB データシート
・サンプルプログラム
[ハード構成]
少々ハマったので,まずはメモリの心配もなく今私が一番使いやすい Raspberry Pi Pico につないで確かめていきました。

・モジュールのPin5をVccにつないでI2Cモードにして
Pin4はGNDにつないでスレーブアドレスを0x5Cに設定しました。
・I2CはPicoのデフォルトに接続,
プルアップは他のセンサーも使う予定なので今回は外付け抵抗で行っています。

[プログラム]
Arduinoで普通に書けますが,I2Cでのデータの読み取りが基本的には1バイトずつしかできないのが注意点ですね。
1) 設定部
1バイトの読み書きはsetupからすぐに使うので,先人に習って初頭に置いておきました。

2) setup
センサーの初期設定をしてスタートさせるパートです。
・センサーのリセット
CTRL_REG2レジスタの第2ビットを"1"にして"0"になるのを待ちます。
・設定値のリブート
CTRL_REG2レジスタの第7ビットを"1"にして"0"になるのを待ちます。


・オフセットの設定
工場出荷時の状態では誤差があるので,センサーの計測値と気象庁発表の現在地のデータ(私はWebで検索)との差をRPDSレジスタ(0x39-3A)に入れます。
最初の計測値を得るまでは差を"0"にしてプログラムしておかないとおかしな事になります(^^;;;;;;;
☆ 秋月の補足説明には計算値に誤植があり,サンプルプログラムを見ると以下が正しいと思います。
RPDS=(測定気圧hPa - 気象庁の実際の気圧hPa)×4096÷256

・データ取得間隔の設定と計測開始
CTRL_REG1レジスタ(0x20)の第7ビットを"1"にし,第6ビットから第4ビットを表から選択した値にします。
今回は"0x90"と1Hzのデータ取得に設定して,計測をスタートさせています。


3) loop
センサーからデータを読み取りシリアルに出力するパートです。
データは0x28から0x2Aに入っている24ビットです。
基本は1バイトずつアドレスを指定して読み込みますが,3バイト連続して読み込みたい時は注意書きのようにアドレスの第7ビットを"1"にします。
また,温度データはこの後0x2Bから続きますが,気圧の連続読み込みには含まれませんので,別に読み込む必要があります。


4) 出力例
シリアルモニタへの出力例です。
データの連続読み取りで少々ハマりましたが,,,何とか計測できるようになりましたV(^^)。

気圧が測れるようになったので,今までの温度・湿度とCO2の計測値と並べてみました。

CO2はCH32V003,温度・湿度はATtiny402,気圧はRaspberry Pi Pico とそれぞれで動いて雑然としていますが,7segLEDは明るいし何か楽しいですね(^^)。
ま,まとめるかそれぞれ別にしてポータブルにするか,,いろいろ考えられますね。