HeartRate Broadcasterアプリのアイコン

あなたの心拍数、
あらゆるバイクコンピュータに。

HeartRate Broadcaster (HRB) は、Apple Watch および AirPods Pro からライブ心拍数を読み取り、1つの読み値に融合し、Bluetooth LE 経由で標準的な心拍モニターとして再ブロードキャストします。トレーニングアプリからは、チェストストラップとして認識されます。

TestFlightで無料で試す、またはサイドロードで無料で、App Storeに公開されたらUSD 4.99。3つのオプション。ストアのリストは審査中です。

心臓は一つ、ストリームも一つ

あなたの時計が測定し、あなたのAirPodsが測定します。2つのセンサーが同時に食い違うのは、1つのセンサーがわずかにずれているよりも問題です。そのため、HRBは両方を同時に放送しません。HRBは両者の間で仲裁を行い、正確に1つの数値だけを電波に乗せます。

Apple Watchからの96 BPMを表示するHeartRate Broadcaster、「Watch only」と表示されるSensor Agreementの行、および接続されたヘッドユニット。

オープンな環境でのセンサー合意

アプリは、あなたの言葉を信じるようには決して求めません。現在受信できるセンサーの名前を列挙し、BPM単位での差を表示し、最終的にどの1つの値を採用して送信したかを示します。

Apple Watch
主要なセンサーです。実際のワークアウトセッションを実行します。これは、有用なレートで心拍数をサンプリングし、画面をオフにしたままサンプリングを継続するための唯一の方法です。
AirPods Pro 3
2つ目の、完全にオプションのセンサーです。時計単体でも完全な情報源となりますし、AirPods単体でも同様です。
iPhone
一致する値の平均を計算し、一致しない場合は外れ値を除外し、その結果を標準的なBluetooth LE心拍数サービス(0x180D)として広告します。センサーが応答を停止すると、古い値との比較を静かに行うのではなく、そのことを明示します。
ヘッドユニット
MyWhoosh、Zwift、TrainerRoad、Wahoo、そしてBluetooth対応のGarmin Edgeデバイスすべてが、1つの一般的なチェストストラップとして認識します。

入手方法3つ

アプリは1つ、ビルドも1つです。異なるのは入手方法で、そのうち2つは無料で手間や忍耐を求め、もう1つは便利なApp Storeです。

TestFlight — 無料、90日間

誰でも利用可能で招待は不要です。AppleのTestFlightアプリを開き、公開リンクを開くと、ベータ版が他のアプリと同時にインストールされます。各ビルドは公開日から90日間使用可能で、新しいビルドが公開されるとカウントがリセットされ、更新され続ける限りベータ版は稼働し続けます。

公開ベータに参加

サイドロード — 無料、開発者アカウントが必要

GitHubの各リリースには、Release構成の.ipaファイルが含まれています。これは配布用に署名されているため、インストールするには独自のIDで再署名する必要があります — Xcode、AltStore、Sideloadlyのいずれでも可能です。HealthKitとバックグラウンドBluetoothは、無料のプロビジョニングプロファイルでは利用できないため、この方法には有料のApple Developerアカウントが必要です。完全なソースコードも公開されています。

GitHubのリリース

App Store — USD 4.99

1回の購入のみ。サブスクリプション、アプリ内購入、広告、アカウントは不要で、他のアプリと同様に自動的に更新されます。あなたは上記のいずれも実行しないという利便性と、そこに込められた作業に対して支払っています。

App Storeで表示

TestFlightで試す

ベータ版は公開されており、招待リストや承認手順はありません。有料版と同じアプリで、ストアではなくAppleのベータチャネルを通じてインストールされます。

1 — TestFlightをインストール
Apple公式のベータ版アプリで、App Storeで無料です。iPhoneにインストールしないとリンクが機能しません。
2 — 公開リンクを開く
同じiPhoneでtestflight.apple.com/join/VUJCa5Gwを開き、「承諾」および「インストール」をタップします。招待やコードは不要です。
3 — ウォッチアプリを追加
iPhoneのWatchアプリからインストールします。他のウォッチアプリと同じ方法です。ウォッチがセンサーなので、この手順は必須です。

TestFlightのビルドは公開日から90日間有効です。新しいビルドごとにこの期間がリセットされるため、更新され続ける限りベータ版は稼働し続けます。App Store版には有効期限はありません。

すべての画面

iPhone 17 Pro Max および Apple Watch で出荷ビルドからキャプチャしたものです。ここにあるものはすべてモックアップではありません。

機能

ここにある機能はすべて、現在アプリで利用可能です。このページに記載されている内容は、ロードマップではありません。

本格的な心拍センサー

標準の心拍サービス(0x180D)をアドバタイズし、心拍測定と身体センサーの位置情報を送信します。Bluetooth対応のセンサーであれば、専用アプリやプラグインなしでペアリング可能です。

2つのセンサー、1つの数値

Apple WatchとAirPodsの両方がデータを送信する場合、HRBは一致する数値の平均を算出し、一致しない場合は外れ値を除外します。これは、これまでに検知した傾向に近い方の値を優先するためです。ヘッドアップディスプレイでは、常に1つのセンサーからのみデータが表示されます。

Dynamic Island

ロック画面とDynamic IslandでのLive Activity:現在のBPM、データソース、およびヘッドユニットが実際にサブスクライブしているかを示します。ロック解除せずに一瞥するだけで情報が確認できます。

フローティングウィンドウ

Picture in Pictureを使用すると、他のアプリを利用している間も画面上に数値を表示し続けます。HRBでワークアウトを開始し、トレーニングアプリに切り替えても、BPMはフローティングウィンドウとして追従します。

Apple Watchのロック画面

スリーブのファスナー、ジャージのジッパー、またはバーテープへの接触などが原因で、走行中にブロードキャストが中断されることがあります。ロックを有効にすると、Apple Watchアプリは誤タップをブロックします。解除するには意図的に1秒間長押しする必要があり、その間もBPMは読み取り可能です。

正確な診断情報

「設定」では、識別子ごとの接続済みセントラル、サブスクライバーごとの送信フレーム数、ライブフレームレート、最後のフレームの正確なバイト数、および最終送信からの経過時間を表示します。何かが正常に動作していない場合、リンクのどちら側に問題があるかを確認できます。

心拍同期アニメーション

スマートフォンとApple Watchのハートアイコンは、測定された心拍数に合わせて鼓動を打ち、サンプルの受信が停止すると停止します。妥当な数値の上に静止したハートが表示される場合は、センサーの接続が切れていることを意味します。

バックグラウンドで送信を継続

ヘッドユニットが接続されると、リンクはスマートフォンのロック状態に関係なく維持されます。HRBは値が変更されたかどうかに関係なく1秒ごとに通知を行います。これは実際のストラップが行い、ヘッドユニットが期待する動作です。

テスト信号

装着せずにペアリングとデバッグを行うための合成心拍数ソースです。センサーの問題を心配する前に、ヘッドユニットがブロードキャストを受信していることを確認してください。

互換性

Bluetooth LE心拍センサーを受け付けるデバイスであれば、HRBを心拍センサーとして認識します。

MyWhoosh Zwift TrainerRoad Wahoo Garmin Edge (Bluetooth) nRF Connect

ANT+非対応 — アプリでも追加不可

HRBはBluetooth LEのみでブロードキャストします。ANT+は別の無線プロトコルであり、iPhoneにはANT+ハードウェアが存在しないため、どのソフトウェアもANT+を送信できません。これはアプリの制限ではなく、デバイスの制限です。

ANT+のみで心拍数をペアリングするデバイス — Garmin Forerunner 935を含む — は、設定方法にかかわらず、このブロードキャストを一切受信できません。

MyWhooshの設定

2つの構成が動作します。どちらを選ぶかは、iPhoneを持ち歩くかどうかにかかっています。なぜなら、Apple Watchだけでは何も接続できないからです。

Apple Watch + iPhone + AirPods Pro 3

高精度な構成。両方のセンサーからデータが送信され、HRBがそれらを1つの数値に統合します。MyWhooshからは1つのチェストストラップとして認識されます。Watchアプリを起動し、iPhone上でソースとしてBothを選択してから、MyWhooshのセンサー画面でHRBをペアリングします。iPhoneは部屋の中に置いたままにしてください。Apple Watchはヘッドユニットの近くである必要はなく、iPhoneの近くであれば大丈夫です。

iPad + AirPods Pro 3

1台構成。AirPods Pro 3はiPadに直接ペアリングされるため、HRB、MyWhoosh、Bike Controlのすべてが同じ画面で動作します。iPhoneもApple Watchも不要です。ソースをAirPodsに設定してください。ここではWatchのオプションは非表示になります。接続先がないためです。

Apple Watchは常にiPhoneを経由する

Apple WatchはiPhoneとしかペアリングできません。iPadとはペアリングできず、Bluetooth経由で心拍数を直接広告することもありません。Watchアプリが測定を行い、測定値をiPhoneへのリンク経由でiPhoneに渡します。ヘッドユニットが実際に接続するのは、このiPhoneです。

つまり、Apple WatchはiPhone構成では2つ目のセンサーを追加するだけで、iPad構成では何も追加されません。デスクに1台だけ置きたい場合は、iPadでAirPodsを使用し、Apple Watchは使わないようにしてください。

フォアグラウンドで1回ペアリング MyWhooshがセンサーの接続を報告するまで、HRBを画面を開いたままにしてください。iOSはバックグラウンドにあるアプリの広告サービスを隠すため、HRBが前面にある状態で検出を行う必要があります。一度接続が確立すれば、アプリを切り替えてもデバイスをロックしても、接続は維持されます。
1台のデバイスから送信 HRBを電話機またはiPadで実行してください。両方で同時に実行しないでください。2つのコピーが同時に広告を出すと、MyWhooshのリストに2つの同一のHRBセンサーが表示され、ペアリング画面からはそれらを区別する方法がありません。
ウォッチリンク(行が赤の場合) メイン画面のウォッチアプリの行は、電話機が実際に検出している内容を示します。「インストールされていない」はウォッチアプリがまだ開かれたことがないことを意味し、「到達不能」は通常、ウォッチアプリが実行されていないことを意味します(アプリを開いてセッションを開始してください)。この行はiPadでは完全に非表示になります。
センサーなしで試す ソースをテスト信号に設定して、合成された50〜100 BPMの信号を放送します。これは実際の測定値と同様にMyWhooshにペアリングされるため、何も装着する前にセンサー側が正常に動作することを確認する最も迅速な方法です。

質問

最初に直面する問題と、それに対する率直な回答。

AirDropが動作しなくなった場合 — まず放送を停止してください

AirDropはBluetooth LEを介して近隣のデバイスを検出しますが、HRBも同じ無線を使用してそれを行います。HRBが広告を出しており、ヘッドユニットがサブスクライブしている間、HRBはその無線を連続的に占有するため、AirDropは相手のデバイスを見逃すか、表示された後でも転送開始前に停止することがあります。

放送を停止するか、HRBを終了してからAirDropを終了してください。すぐに動作が回復し、何も失われません:HRBがフォアグラウンドに戻ったら、ペアリングは1回のタップで完了します。放送中に他の機能が応答しなくなった場合(CarPlayのハンドオフ、キー入力が途切れ始めるBluetoothキーボード、Continuity Cameraなど)にも、同様の対処が有効な場合があります。

ペアリング後に画面をロックできますか?

できます。検出にはHRBがフォアグラウンドにある必要がありますが、接続は画面のロック、バックグラウンドへの移行、アプリの切り替え後も維持されます。ただし、アプリを非表示にして初めてペアリングすることはできません。iOSはバックグラウンドでサービスの広告を停止するためです。

バッテリー消費はどのくらいですか?

ブロードキャスト自体は消費が少ないですが、測定値を生成するワークアウトセッションは消費が大きいです。そのデバイスでの心拍数ワークアウトと同程度の消費が見込まれます。iPhone 構成では、測定を行っているため、Apple Watch の方が影響を受けやすくなります。

2つのアプリが同時にブロードキャストを読み取ることができますか?

はい。Bluetooth LEでは1つのセンサーに対して複数のサブスクライバーが許可されるため、MyWhooshと2つ目のアプリの両方が同じ数値を確認できます。メイン画面にはライブのサブスクライバー数を表示するため、両方が実際に接続されていることを確認できます。

走行中に BPM が凍結した

測定値は古くなるとグレー表示になり、無効な数値を繰り返すことはありません。AirPodsの場合、これは通常、レポートを停止したことを意味します。その行のルートピッカーはオーディオを一時的に切り替えてリンクを再確立するため、アプリを離れることなく接続を回復できます。

Garminで検出されない

そのモデルがANT+のみで心拍数をペアリングするか確認してください。iPhoneにはANT+ラジオがないため、どのアプリでも送信できません。Bluetoothストラップを受け付けるGarminデバイスはHRBと通常通りペアリングしますが、そうでないデバイスは永遠にペアリングできません。

データはどこに送信されますか?

Bluetoothラジオへ、それ以外には送信されません。アカウントもサーバーも分析機能もありません。心拍はデバイス上のHealthKitから取得され、標準的なセンサー値としてペアリングしたデバイスへ送信されます。

要件

アカウント不要、サインイン不要、データは電話から一切送信されません。心拍数はBluetoothラジオにのみ送信され、他には送信されません。

iPhone iOS 26以降。ブロードキャストにはBluetoothの周辺機器ロールを使用するため、シミュレーターではサポートされていません。実際のハードウェアが必要です。
Apple Watch watchOS 11以降。ウォッチアプリはワークアウトセッションを実行します。これは、実用的なレートで心拍数を取得し、画面をオフにした状態でサンプリングを継続するための唯一の方法です。
AirPods オプション。AirPods Pro 3は、ワークアウトセッションを実行しているデバイスに心拍数を報告するため、HRBはソースとして有効化すると電話でセッションを開始します。
価格 App StoreではUSD 4.99で、一度の支払いのみ。サブスクリプションやアプリ内購入はありません。TestFlightベータ版は、次のバージョンを早期に試したい誰でも利用できるよう、リリース版と同時に実行されます。
ペアリング ヘッドユニットが接続するまでアプリを開いたままにしてください。iOSはバックグラウンドにあるアプリのアドバタイズ済みサービスUUIDを隠すため、ディスカバリはフォアグラウンドで発生する必要があります。その後、電話のロックを解除しても接続は維持されます。
ブロードキャスト名 デフォルトはHRBで、最大10文字まで編集可能です。アドバタイズパケットは31バイトであり、ヘッドユニットはそれより長い名前は切り捨てます。

GitHubでオープンソース

このアプリ全体はMITライセンスの下で公開されています — iPhoneアプリ、Watchアプリ、Live Activity、ビルドスクリプト、そしてこのウェブサイトです。プライバシーに関する主張を鵜呑みにするのではなく、Bluetoothのコードそのものを読みたいという方には、すべて公開されています。

読む
github.com/tankbottoms/HeartRateBroadcaster — Swift製、依存関係なし、解析用のSDKも含まれていません。
ビルド
クローンしてxcodegen generateを実行し、プロジェクトを開いてビルドします。コード署名には独自のチーム識別子が必要ですが、それ以外に追加の設定は必要ありません。
サイドロード
各リリースには、サイドロード手順付きのRelease構成.ipaファイルが含まれています。HealthKitとバックグラウンドBluetoothは、フリープロビジョニングプロファイルでは利用できないため、再署名には有料のApple Developerアカウントが必要です。