ラズベリーパイ使用チュートリアル
プロジェクト概要
JUXI_HeartRate_SPO2 は MAX30102 チップをベースにした心拍・血中酸素センサーモジュールで、内蔵アルゴリズムが心拍数と血中酸素飽和度の値を直接出力できます。
主な機能:
- 血中酸素飽和度(SPO2)の測定
- 心拍数の測定(回/分)
- 基板温度の測定
- UART と I2C の 2 種類の通信方式に対応
ハードウェアの準備
| 必要なもの | 説明 |
|---|---|
| ラズベリーパイ(2/3/4/Zero いずれも可) | ラズベリーパイ 3B+ または 4B を推奨 |
| JUXI_HeartRate_SPO2 センサー | 心拍・血中酸素センサーモジュール |
| ジャンパーワイヤ 数本 | メス-メス ジャンパーワイヤ 4 本 |
| 電源アダプター | ラズベリーパイ専用電源 |
ハードウェア接続
方法 1:I2C 通信(推奨)
I2C 通信は配線が簡単なため、推奨します。

| センサーピン | ラズベリーパイ物理ピン | BCM 番号 | 説明 |
|---|---|---|---|
| VCC | 1 または 17 | - | 3.3V 電源(5V 接続も可) |
| GND | 6 または 9 または 14 | - | グラウンド |
| SDA | 3 | GPIO2 | I2C データ線 |
| SCL | 5 | GPIO3 | I2C クロック線 |
重要: センサーのスイッチを IIC の位置に切り替えてください!
方法 2:UART シリアル通信
UART 通信はクロス接続が必要です。

| センサーピン | ラズベリーパイ物理ピン | BCM 番号 | 説明 |
|---|---|---|---|
| VCC | 2 または 4 | - | 5V 電源(3.3V 接続も可) |
| GND | 6 または 9 または 14 | - | グラウンド |
| RX | 8 | GPIO14 | センサーの RX をラズベリーパイの TX に接続 |
| TX | 10 | GPIO15 | センサーの TX をラズベリーパイの RX に接続 |
重要: センサーのスイッチを UART の位置に切り替えてください!

環境設定
1. I2C の有効化(I2C モードで必要)
sudo raspi-configInterface Options → I2C を選択し、Yes を選んで有効化します
ラズベリーパイを再起動します:
sudo reboot2. シリアルの有効化(UART モードで必要)
sudo raspi-configInterface Options → Serial を選択します
- 最初の質問:"Would you like a login shell to be accessible over serial?" →
Noを選択 - 2 番目の質問:"Would you like the serial port hardware to be enabled?" →
Yesを選択
ラズベリーパイを再起動します:
sudo reboot3. 依存ライブラリのインストール
# 更新软件源
sudo apt-get update
# 安装 I2C 工具和 smbus2 库(I2C 模式必须使用 smbus2)
sudo apt-get install -y i2c-tools python3-smbus2
# 安装 pyserial(串口支持)
sudo pip3 install pyserial注意: I2C モードでは
smbus2のインストールが必須で、旧版のpython-smbusは使用できません。 ライブラリ内部ではsmbus2.i2c_msgを使用して独立した 2 段階の I2C トランザクション(先にレジスタアドレスを書き込んで STOP を送信し、 その後新しい読み取りトランザクションを開始して複数バイトを連続読み取り)を実装し、センサーチップの I2C タイミング要件に合わせています。
4. I2C 接続の確認(I2C モード)
配線完了後、以下のコマンドで I2C デバイスを検出します:
i2cdetect -y 1アドレス 0x57 が表示されれば、センサーの接続に成功しています。
サンプルコードの使用
ファイル構成
python/raspberry/
├── JUXI_HeartRate_SPO2.py # 主库文件
└── examples/
├── i2c_example.py # I2C 模式示例
└── uart_example.py # UART 模式示例I2C モードのサンプルを実行
cd python/raspberry/examplessudo python3 i2c_example.pyUART モードのサンプルを実行
cd python/raspberry/examplessudo python3 uart_example.py注意: ハードウェアシリアルを使用するには sudo 権限が必要です。
実行結果
すべて正常であれば、以下のような出力が表示されます:
==================================================
JUXI 心率血氧传感器 - I2C 模式
==================================================
正在初始化 I2C 总线 1,地址 0x57...
传感器初始化成功!
开始数据采集...
传感器 LED 已亮起!
请将手指放在传感器上...
血氧饱和度: 98 %
心率: 72 次/分钟
板载温度: 25.5 ℃
...Ctrl+C を押してプログラムを停止します。
API リファレンス
クラス:JUXI_HeartRate_SPO2_i2c
I2C 通信方式のセンサークラスです。
コンストラクタ
JUXI_HeartRate_SPO2_i2c(bus_number=1, i2c_address=0x57)
パラメータ:
bus_number: I2C バス番号。ラズベリーパイでは通常 1i2c_address: センサーの I2C アドレス。デフォルトは 0x57
メソッド
| メソッド | 説明 | 戻り値 |
|---|---|---|
| begin() | センサーを初期化し、接続を検出 | bool(成功時は True) |
| sensor_start_collect() | データ収集を開始(センサー LED 点灯) | なし |
| sensor_end_collect() | データ収集を停止(センサー LED 消灯) | なし |
| get_heartbeat_SPO2() | 心拍数と血中酸素データを読み取り | なし(結果はオブジェクトの属性に格納) |
| get_temperature_c() | 基板温度を読み取り | float(摂氏) |
| close() | I2C 接続を閉じる | なし |
属性
| 属性 | 説明 |
|---|---|
| SPO2 | 血中酸素飽和度(%)、無効値は -1 |
| heartbeat | 心拍数(回/分)、無効値は -1 |
クラス:JUXI_HeartRate_SPO2_uart
UART シリアル通信方式のセンサークラスです。
コンストラクタ
JUXI_HeartRate_SPO2_uart(port='/dev/serial0', baudrate=9600)
パラメータ:
port: シリアルデバイスのパス。ラズベリーパイのデフォルトは/dev/serial0baudrate: ボーレート。デフォルトは 9600
メソッド
JUXI_HeartRate_SPO2_i2c と同じです。
よくある質問
Q1: センサーの初期化に失敗したらどうすればよいですか?
A: 以下の手順で確認してください:
- 配線の確認
- I2C モード:SDA が GPIO2、SCL が GPIO3 に接続されていることを確認
- UART モード:RX-TX がクロス接続されていることを確認
- センサーのスイッチの確認
- I2C モード:スイッチは IIC の位置
- UART モード:スイッチは UART の位置
- 電源の確認
- VCC が 3.3V または 5V に接続されていることを確認
- GND が接続されていることを確認
- システム設定の確認
- I2C モード:I2C が有効になっていることを確認
- UART モード:シリアルが有効になっていることを確認
- 検出コマンドの使用
# I2C 模式
i2cdetect -y 1
# UART 模式
ls /dev/serial*Q2: データがずっと -1 と表示される場合は?
A:
- 指がセンサーの上に正しく置かれ、2 つの LED を完全に覆っていることを確認します
- 数秒待ってデータを安定させます(通常 10~30 秒必要です)
sensor_start_collect()を呼び出して収集を開始したか確認します- センサーのインジケーター LED が点灯しているか確認します
Q3: データが正確でない場合は?
A:
- 指がセンサーの光学領域を完全に覆っていることを確認します
- 指を静止させ、動かさないようにします
- 30 秒以上待ってデータを安定させます
- 複数回測定して平均値を取ります
- センサーに強い光が直接当たらないようにします
Q4: I2C と UART は同時に使用できますか?
A: いいえ、同時に使用できる通信方式は 1 種類のみです。
Q5: sudo で実行する必要がありますか?
A:
- I2C モード:権限の問題を避けるため sudo の使用を推奨します
- UART モード:必須です。sudo がないとシリアルポートにアクセスできません
注意事項
測定のコツ
- 指を正しく置く
- 指をそっとセンサーの上に置き、2 つの LED を覆います
- 血流に影響するため、強く押さないでください
- 指を安定させ、動かさないでください
- データが安定するまで待つ
- 測定開始直後は数値が不安定になることがあります
- 10~30 秒待ってデータが安定してから読み取ることをおすすめします
- センサーは 4 秒ごとにデータを更新します
- 環境要件
- センサーに強い光が直接当たらないようにしてください
- 適切な環境温度を保ってください
- 測定時は静かにしてください
データの見方
| SPO2 範囲 | 説明 |
|---|---|
| 95% - 100% | 正常 |
| 90% - 94% | 軽度低酸素 |
| < 90% | 低酸素、受診を推奨 |
| 心拍数範囲 | 説明 |
|---|---|
| 60 - 100 回/分 | 成人の正常範囲 |
| < 60 回/分 | 徐脈 |
| > 100 回/分 | 頻脈 |
安全上の注意
- 本センサーは参考用であり、専門医療機器の代替にはなりません
- 健康上の問題がある場合は、速やかに医師の診察を受けてください
- 測定結果は参考用であり、診断の根拠にはなりません

