温湿度センサー(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は明るいし何か楽しいですね(^^)。

ま,まとめるかそれぞれ別にしてポータブルにするか,,いろいろ考えられますね。