ラズパイ5 2025年夏(2023年10月更新 bookworm) ④ I2C LPS22HB
ラズパイ5のI2Cバスに接続した気圧センサLPS22HBをPythonでアクセスします。
ラズパイ2023年10月更新 bookworm ② pythonでI2Cバスをアクセス
上の記事をトレースし、何か変更があるかどうかを検証します。
●環境
- Windows11;24H2 コマンドプロンプト sshでアクセス、もしくはRealVNC
- Raspberry Pi 5 4GBモデル
- OS Raspberry Pi OS (64ビット)、bookworm (2025-06-26)
- Python 3.11.2
●利用したのはAdafruitのStemma QT/Qwiicボード
Stemma QT/Qwiic(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。
コネクタは、表と裏のどちらも差し込めそうですが、ピンがコネクタ内部の上部に並んでいるので、差し込める方向は一意です。ロック機構はないですが、すぐに抜けるということはありません。
●気圧センサLPS22HBのおもなスペック
LPS22HBのデータシートはこのWebページから
- 電源電圧 1.7~3.6V
- 気圧測定範囲 260~1260hPa、確度;±1hPa、分解能;±0.1hPa
- 温度測定範囲 -40~+85℃、確度;±1.5℃
- インターフェース I2C(0~400kHz)、SPI(10MHz)
- スレーブ・アドレス 0x5d、裏面のAddrをショートすると0x5c
●接続
$ i2cdetect -y 1
で、接続を確認します。0x5dはLPS22HBのスレーブ・アドレスです。
●利用するPythonのI2Cライブラリはsmbus2
下記の記事でpythonの仮想環境envを作成しました。
ラズパイ5 2025年夏(2023年10月更新 bookworm) ② GPIO gpiozero
$ source env/bin/activate
(env) yoshidaw@ras05:~ $ pip list
Package Version
---------- -------
colorzero 2.0
gpiozero 2.0.1
pip 23.0.1
setuptools 66.1.1
smbus2ライブラリをインストールします。
(env) yoshidaw@ras05:~ $ pip install smbus2
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus2
Downloading https://www.piwheels.org/simple/smbus2/smbus2-0.5.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: smbus2
Successfully installed smbus2-0.5.0
(env) yoshidaw@ras05:~ $ pip list
Package Version
---------- -------
colorzero 2.0
gpiozero 2.0.1
pip 23.0.1
setuptools 66.1.1
smbus2 0.5.0
●smbus2ライブラリを使ったプログラム
import smbus2 import time i2c = smbus2.SMBus(1) addr = 0x5d i2c.write_byte_data(addr, 0x10, 0x10) while 1: i2c.write_byte_data(addr, 0x11, 0x11) data = i2c.read_i2c_block_data(addr, 0x28, 3) press = (data[2]<<16 | data[1] << 8 | data[0] ) / 4096.0 print("\nPress = " + str(int(press)) + "hPa") data = i2c.read_i2c_block_data(addr, 0x2b, 2) temp = (data[1] << 8 | data[0] ) / 100.0 print("Temp = " + str(round(temp,1)) + "`C") time.sleep(2)
実行します。GPIOをアクセスしたときのように、管理者権限は必要ないようです。