温湿度センサー(DHT20)をI2C接続で使えたので,気圧センサーも追加しようと秋月のLPS25HBモジュールを使ってみました。
I2C接続でのデータ読み取りで少々ハマった点もあり,下記の「補足説明」などに沿った手順をメモしておきます。
[参考]
・AE-LPS25HB取扱説明書
・補足説明
・LPS25HB データシート
・サンプルプログラム
[ハード構成]
少々ハマったので,まずはメモリの心配もなく今私が一番使いやすい Raspberry Pi Pico につないで確かめていきました。
![](https://stat.ameba.jp/user_images/20230908/11/pta55/26/d6/j/o1200080615335398157.jpg?caw=800)
・モジュールのPin5をVccにつないでI2Cモードにして
Pin4はGNDにつないでスレーブアドレスを0x5Cに設定しました。
・I2CはPicoのデフォルトに接続,
プルアップは他のセンサーも使う予定なので今回は外付け抵抗で行っています。
![](https://stat.ameba.jp/user_images/20230908/11/pta55/7e/35/j/o1421076815335398369.jpg?caw=800)
[プログラム]
Arduinoで普通に書けますが,I2Cでのデータの読み取りが基本的には1バイトずつしかできないのが注意点ですね。
1) 設定部
1バイトの読み書きはsetupからすぐに使うので,先人に習って初頭に置いておきました。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/16/59/j/o0734073815335407980.jpg?caw=800)
2) setup
センサーの初期設定をしてスタートさせるパートです。
・センサーのリセット
CTRL_REG2レジスタの第2ビットを"1"にして"0"になるのを待ちます。
・設定値のリブート
CTRL_REG2レジスタの第7ビットを"1"にして"0"になるのを待ちます。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/fe/da/j/o1908082615335410358.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/12/pta55/29/af/j/o0689029415335415568.jpg?caw=800)
・オフセットの設定
工場出荷時の状態では誤差があるので,センサーの計測値と気象庁発表の現在地のデータ(私はWebで検索)との差をRPDSレジスタ(0x39-3A)に入れます。
最初の計測値を得るまでは差を"0"にしてプログラムしておかないとおかしな事になります(^^;;;;;;;
☆ 秋月の補足説明には計算値に誤植があり,サンプルプログラムを見ると以下が正しいと思います。
RPDS=(測定気圧hPa - 気象庁の実際の気圧hPa)×4096÷256
![](https://stat.ameba.jp/user_images/20230908/12/pta55/7e/51/j/o0692016115335415571.jpg?caw=800)
・データ取得間隔の設定と計測開始
CTRL_REG1レジスタ(0x20)の第7ビットを"1"にし,第6ビットから第4ビットを表から選択した値にします。
今回は"0x90"と1Hzのデータ取得に設定して,計測をスタートさせています。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/6c/25/j/o1908136815335410355.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/12/pta55/a3/bb/j/o0692019315335415574.jpg?caw=800)
3) loop
センサーからデータを読み取りシリアルに出力するパートです。
データは0x28から0x2Aに入っている24ビットです。
基本は1バイトずつアドレスを指定して読み込みますが,3バイト連続して読み込みたい時は注意書きのようにアドレスの第7ビットを"1"にします。
また,温度データはこの後0x2Bから続きますが,気圧の連続読み込みには含まれませんので,別に読み込む必要があります。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/62/f6/j/o1200080015335434555.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/13/pta55/d8/d3/j/o0770086315335430628.jpg?caw=800)
4) 出力例
シリアルモニタへの出力例です。
データの連続読み取りで少々ハマりましたが,,,何とか計測できるようになりましたV(^^)。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/e9/0a/j/o0836066815335430632.jpg?caw=800)
気圧が測れるようになったので,今までの温度・湿度とCO2の計測値と並べてみました。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/32/50/j/o1200101315335441931.jpg?caw=800)
CO2はCH32V003,温度・湿度はATtiny402,気圧はRaspberry Pi Pico とそれぞれで動いて雑然としていますが,7segLEDは明るいし何か楽しいですね(^^)。
ま,まとめるかそれぞれ別にしてポータブルにするか,,いろいろ考えられますね。
I2C接続でのデータ読み取りで少々ハマった点もあり,下記の「補足説明」などに沿った手順をメモしておきます。
[参考]
・AE-LPS25HB取扱説明書
・補足説明
・LPS25HB データシート
・サンプルプログラム
[ハード構成]
少々ハマったので,まずはメモリの心配もなく今私が一番使いやすい Raspberry Pi Pico につないで確かめていきました。
![](https://stat.ameba.jp/user_images/20230908/11/pta55/26/d6/j/o1200080615335398157.jpg?caw=800)
・モジュールのPin5をVccにつないでI2Cモードにして
Pin4はGNDにつないでスレーブアドレスを0x5Cに設定しました。
・I2CはPicoのデフォルトに接続,
プルアップは他のセンサーも使う予定なので今回は外付け抵抗で行っています。
![](https://stat.ameba.jp/user_images/20230908/11/pta55/7e/35/j/o1421076815335398369.jpg?caw=800)
[プログラム]
Arduinoで普通に書けますが,I2Cでのデータの読み取りが基本的には1バイトずつしかできないのが注意点ですね。
1) 設定部
1バイトの読み書きはsetupからすぐに使うので,先人に習って初頭に置いておきました。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/16/59/j/o0734073815335407980.jpg?caw=800)
2) setup
センサーの初期設定をしてスタートさせるパートです。
・センサーのリセット
CTRL_REG2レジスタの第2ビットを"1"にして"0"になるのを待ちます。
・設定値のリブート
CTRL_REG2レジスタの第7ビットを"1"にして"0"になるのを待ちます。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/fe/da/j/o1908082615335410358.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/12/pta55/29/af/j/o0689029415335415568.jpg?caw=800)
・オフセットの設定
工場出荷時の状態では誤差があるので,センサーの計測値と気象庁発表の現在地のデータ(私はWebで検索)との差をRPDSレジスタ(0x39-3A)に入れます。
最初の計測値を得るまでは差を"0"にしてプログラムしておかないとおかしな事になります(^^;;;;;;;
☆ 秋月の補足説明には計算値に誤植があり,サンプルプログラムを見ると以下が正しいと思います。
RPDS=(測定気圧hPa - 気象庁の実際の気圧hPa)×4096÷256
![](https://stat.ameba.jp/user_images/20230908/12/pta55/7e/51/j/o0692016115335415571.jpg?caw=800)
・データ取得間隔の設定と計測開始
CTRL_REG1レジスタ(0x20)の第7ビットを"1"にし,第6ビットから第4ビットを表から選択した値にします。
今回は"0x90"と1Hzのデータ取得に設定して,計測をスタートさせています。
![](https://stat.ameba.jp/user_images/20230908/12/pta55/6c/25/j/o1908136815335410355.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/12/pta55/a3/bb/j/o0692019315335415574.jpg?caw=800)
3) loop
センサーからデータを読み取りシリアルに出力するパートです。
データは0x28から0x2Aに入っている24ビットです。
基本は1バイトずつアドレスを指定して読み込みますが,3バイト連続して読み込みたい時は注意書きのようにアドレスの第7ビットを"1"にします。
また,温度データはこの後0x2Bから続きますが,気圧の連続読み込みには含まれませんので,別に読み込む必要があります。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/62/f6/j/o1200080015335434555.jpg?caw=800)
![](https://stat.ameba.jp/user_images/20230908/13/pta55/d8/d3/j/o0770086315335430628.jpg?caw=800)
4) 出力例
シリアルモニタへの出力例です。
データの連続読み取りで少々ハマりましたが,,,何とか計測できるようになりましたV(^^)。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/e9/0a/j/o0836066815335430632.jpg?caw=800)
気圧が測れるようになったので,今までの温度・湿度とCO2の計測値と並べてみました。
![](https://stat.ameba.jp/user_images/20230908/13/pta55/32/50/j/o1200101315335441931.jpg?caw=800)
CO2はCH32V003,温度・湿度はATtiny402,気圧はRaspberry Pi Pico とそれぞれで動いて雑然としていますが,7segLEDは明るいし何か楽しいですね(^^)。
ま,まとめるかそれぞれ別にしてポータブルにするか,,いろいろ考えられますね。