어떤 사이클로컴퓨터에서도
실시간 심박수를 확인하세요.
HeartRate Broadcaster(HRB)는 Apple Watch와 AirPods Pro에서 실시간 심박수를 읽어 하나의 값으로 통합합니다. 이를 표준 심박수 모니터 형식으로 Bluetooth LE를 통해 방송하므로, 훈련 앱은 가슴 스트랩을 보는 것과 같습니다.
하나는 심장, 하나는 스트림
시계가 측정하고, AirPods이 측정합니다. 두 센서가 동시에 다른 값을 보고하는 것은 하나의 센서가 약간 잘못 측정하는 것보다 더 나쁘므로, HRB는 이 둘을 조정하여 정확히 하나의 숫자를 방송합니다.
공개된 센서 일치
현재 수신할 수 있는 센서를 나열하고, BPM 단위로 그 차이를 표시하며, 최종적으로 선택하여 전송한 단일 값을 보여줍니다.
- Apple Watch
- 주요 센서입니다. 실제 운동 세션을 실행하여 유용한 속도로 심박수를 샘플링하고, 화면이 꺼진 상태에서도 샘플링을 유지하는 유일한 방법을 제공합니다.
- AirPods Pro 3
- 두 번째이며 완전히 선택적인 센서입니다. 시계만으로도 완전한 소스가 되며, AirPods만으로도 충분합니다.
- iPhone
- 일치하는 값은 평균을 내고, 일치하지 않을 때는 이상치를 거부한 후, 결과를 표준 Bluetooth LE 심박수 서비스(
0x180D)로 광고합니다. 센서가 신호를 멈추면, 낡은 값과 조용히 비교하는 대신 해당 행에 그 사실을 명시합니다. - 헤드 유닛
- MyWhoosh, Zwift, TrainerRoad, Wahoo, 그리고 Bluetooth 지원 Garmin Edge 장치는 모두 하나의 일반적인 가슴 스트랩을 인식합니다.
들어오는 와트, 나가는 칼로리
파워 미터가 작업량을 측정합니다. 이 작업량을 칼로리로 변환하려면 아래에 명시된 두 상수가 필요합니다.
페달에서 숫자까지
와트는 초당 줄입니다. HRB는 미터가 실제로 보고하던 시간 동안 미터가 보고한 출력을 적분한 후, 기계적 작업을 신체가 이를 생산하는 데 쓴 에너지로 변환합니다.
- 작업
- 모든 출력 샘플은 해당 간격에 곱해져 합산됩니다. 데이터 손실은 보간되지 않고 제외되며, 요약에는 손실된 초 수가 표시됩니다.
- 효율
- 소모하는 에너지의 약 24%가 페달에서 작업으로 전환되고, 나머지는 열로 방출됩니다. 이 수치인
0.24는 숙련된 사이클링에서 측정된 0.20–0.25 범위 내에 있으며, 이것이 작업 1킬로줄이 약 1킬로칼로리에 해당하는 이유입니다. - 기초
- 활성 에너지가 "기초"보다 높다는 것이 건강의 의미이므로, 세션의 기초 비율 — 키, 체중, 나이, 성별을 기반으로 한 미플린-젠토어 공식 —은 기록되기 전에 빼집니다. 요약에는 두 수치가 모두 표시됩니다.
- 미터 없음
- 전력 데이터가 없으면 추정치는 공개된 심박수 회귀 분석(Keytel et al., 2005)으로 대체되며 화면에 그 사실을 표시합니다. 추정치로 표시된 수치는 측정된 것처럼 속이는 숫자보다 신뢰도가 높습니다.
자전거의 모든 미터
사이클링 전력(0x1818), 사이클링 속도 및 케던스(0x1816), 그리고 FTMS 실내 자전거 데이터(0x1826). 페달, 크랭크, 스마트 트레이너가 모두 데이터를 보고하며, 페달 기반 미터는 해당 기능이 있을 경우 좌우 밸런스도 보고합니다.
Wahoo Kickr Core 2와 PowerTap P1 페달을 함께 사용하여 주행 및 테스트했습니다.
하나의 미터는 중요하고 나머지는 기록됨
페달, 크랭크, 트레이너는 구동계의 서로 다른 지점에서 측정하기 때문에 다르게 표시됩니다. 칼로리 수치가 어느 장치에서 파생되었는지 선택할 수 있으며, 다른 장치들의 데이터는 자체 평균과 함께 함께 기록되어 분포를 확인할 수 있습니다.
라이딩, 러닝, 수영
세션은 시작 전에 레이블이 지정되며, 전력 미터가 활성화되면 기본적으로 라이딩으로 설정됩니다. 이 레이블은 HealthKit 활동 유형을 설정하며, 시계도 이에 맞춰 자체 세션 레이블을 지정합니다.
신체 세부 정보는 여기에 유지됩니다
키, 몸무게, 생년월일, 성별은 한 번 입력하면 휴대폰에만 저장됩니다. 이 값들은 위의 두 방정식에만 사용되며 다른 곳에서는 사용되지 않습니다. 키는 피트와 인치, 또는 센티미터 단위로 입력합니다.
헬스에 기록
각 세션은 활동 에너지 정보가 포함된 운동 세션으로 저장되어 헬스의 링에 반영되고 헬스 데이터를 읽는 모든 앱에 표시됩니다. 앱 내 기록에는 헬스에 없는 세부 정보가 유지됩니다. 어떤 미터를 감지했는지, 어디에 데이터 간격이 있었는지 등입니다.
추정 중임을 알려줍니다
신체 프로필이 불완전하거나 센서가 끊기거나 심박수 기반 추정만 이루어진 경우, 수치 아래 노트 섹션에 표시됩니다. 데이터를 실제보다 좋게 보이도록 모호하게 반올림하지 않습니다.
얻는 세 가지 방법
앱은 하나이며 빌드도 하나입니다. 다른 점은 앱에 접근하는 방법입니다. 이 중 두 경로는 비용이 들지 않으며 노력이나 인내를 요구하며, 세 번째 경로는 App Store입니다.
TestFlight — 무료, 90일
누구나 참여 가능, 초대 불필요. Apple의 TestFlight 앱을 열고 공개 링크를 열면 베타가 다른 앱들과 함께 설치됩니다. 각 빌드는 게시된 날로부터 90일 동안 사용 가능합니다. 새 빌드가 올라오면 시간이 초기화되어 업데이트가 계속되는 한 베타는 계속 실행됩니다.
직접 설치 — 무료, 개발자 계정 필요
모든 GitHub 릴리스에는 Release 구성의 .ipa 파일이 포함되어 있습니다. 이 파일은 배포용으로 서명되어 있으므로 설치하려면 자신의 인증서로 다시 서명해야 합니다. Xcode, AltStore, Sideloadly 모두 이 작업을 수행할 수 있습니다. HealthKit과 백그라운드 Bluetooth는 무료 프로비저닝 프로필에서는 사용할 수 없으므로 이 경로에는 유료 Apple Developer 계정이 필요합니다. 전체 소스 코드도 함께 제공됩니다.
앱 스토어 — USD 4.99
한 번 구매로 구독, 인앱 구매, 광고, 계정이 필요 없으며, 다른 앱처럼 자동으로 업데이트됩니다. 당신은 위의 두 경로를 건너뛰고 그 이면의 작업을 위해 지불하는 것입니다.
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)를 심박수 측정 및 신체 센서 위치와 함께 광고합니다. 모든 블루투스 스트랩은 이 기능을 지원하며, 전용 앱이나 플러그인이 필요하지 않습니다.
두 개의 센서, 하나의 수치
시계와 AirPods이 모두 값을 보고할 때, HRB는 일치하는 읽기 값을 평균내고 불일치할 때는 이상치를 거부합니다. 이미 관찰된 추세에 더 가까운 값을 선호합니다.
가상 변속기
동일한 폰은 오픈 Bike Control 프로토콜을 통해 변속기 역할도 제공하므로, 하트레이트 버튼으로 MyWhoosh 또는 Zwift에서 트레이너를 제어할 수 있습니다. 클릭이나 플레이 컨트롤러, 두 번째 기기가 필요 없습니다.
다이나믹 아일랜드
잠금 화면과 다이내믹 아일랜드의 라이브 액티비티: 현재 BPM, 신호원, 헤드유닛 구독 여부. 잠금 해제 없이 한눈에 확인 가능합니다.
플로팅 창
Picture in Picture는 다른 앱을 사용하는 동안에도 화면에 숫자를 표시해 줍니다. HRB에서 운동을 시작하고 훈련 앱으로 전환하면 BPM이 플로팅 창으로 따라옵니다. 홈 화면으로 스와이프해도 유지되며 관련 없는 앱 위에 떠 있고, 조용합니다. 창은 소리를 재생하지 않으며, 일시 정지하거나, 음량을 줄이거나, 이미 재생 중인 콘텐츠를 잠식하지 않습니다.
워치 화면 잠금
슬리브, 조끼 지퍼, 핸들바 테이프를 잡는 동작 등으로 인해 라이드 중 방송이 중단될 수 있습니다. 잠금을 활성화하면 워치 앱이 실수한 탭을 무시합니다. 1초간 길게 눌러야 잠금이 해제되며, BPM은 계속 읽을 수 있습니다.
풀 디agnostics
설정에서 연결된 중앙 장치의 식별자, 구독자당 전송된 프레임 수, 실시간 프레임 속도, 마지막 프레임의 정확한 바이트, 그리고 마지막으로 전송된 지 경과 시간을 확인할 수 있습니다. 문제가 발생하면 링크의 어느 쪽에 문제가 있는지 확인할 수 있습니다.
심박 동기화 애니메이션
휴대전화와 시계의 하트가 측정된 심박수에 맞춰 뛰며, 샘플 수신이 중단되면 멈춥니다. 합리적인 수치 위에 정지된 하트가 표시되면 센서가 연결이 끊겼음을 의미합니다.
백그라운드에서도 계속 전송
헤드 유닛이 연결되면 잠금 화면에서도 링크가 유지됩니다. HRB는 값이 변경되었는지 여부와 관계없이 1초마다 알림을 보내며, 이는 실제 심박 스트랩이 수행하고 헤드 유닛이 기대하는 동작입니다.
테스트 신호
장비를 착용하지 않고 페어링 및 디버깅을 위한 합성 심박 소스입니다. 센서 문제를 걱정하기 전에 헤드 유닛이 브로드캐스트를 수신하는지 확인하세요.
25개 언어
전화기와 시계의 모든 화면이 25개 언어로 번역되며, 아랍어는 거꾸로 뒤집힌 영어가 아닌 우측에서 좌측으로 읽는 레이아웃을 포함합니다. 설정에서 하나를 선택하면 전화기의 설정과 관계없이 그 선택이 유지됩니다. 이 사이트도 동일한 25개 언어로 제공됩니다.
호환성
블루투스 LE 하트레이트 서비스 센서를 페어링하는 모든 앱이나 헤드유닛은 HRB를 동일한 방식으로 페어링합니다.
이것이 HRB가 읽는 데이터입니다. 이름이 있는 항목은 앱 개발 및 테스트에 사용된 기기들입니다. 여기에 없는 미터나 트레이너도 표준 사이클링 파워 및 FTMS 프로파일을 읽기 때문에 정상 작동합니다.
ANT+ 미지원 — 앱으로도 추가 불가
HRB는 블루투스 LE로만 브로드캐스트합니다. ANT+는 별도의 무선 프로토콜이며, iPhone에는 ANT+ 하드웨어가 없으므로 어떤 소프트웨어도 이를 전송할 수 없습니다. 이는 앱의 제한이 아닌 기기의 제한입니다.
ANT+를 통해서만 심박을 페어링하는 기기(예: Garmin Forerunner 935 포함)는 구성 방법과 관계없이 이 브로드캐스트를 절대 수신하지 못합니다.
MyWhoosh 설정 중
두 가지 구성이 작동합니다. 어떤 것을 선택할지는 iPhone을 휴대할 의사가 있는지 여부입니다. iPhone이 없으면 Apple Watch는 어떤 장치에도 연결할 수 없기 때문입니다.
Apple Watch + iPhone + AirPods Pro 3
정확한 구성입니다. 두 센서 모두 데이터를 전송하며, HRB가 이를 하나의 숫자로 통합합니다. MyWhoosh는 단일 스트랩을 인식합니다. Watch 앱을 시작하고, iPhone에서 소스로 Both를 선택한 후, MyWhoosh의 센서 화면에서 HRB를 페어링하세요. iPhone은 방 안에 그대로 두고, Apple Watch는 헤드유닛 근처가 아니라 iPhone 근처에 두면 됩니다.
iPad + AirPods Pro 3
단일 기기 구성입니다. AirPods Pro 3이 iPad에 직접 페어링되므로, HRB, MyWhoosh, Bike Control 모두 iPhone이나 Apple Watch 없이 동일한 화면에서 실행됩니다. 소스를 AirPods로 설정하세요. 연결할 대상이 없으므로 Watch 옵션은 여기에서 숨겨집니다.
Apple Watch는 항상 iPhone을 통해 연결됩니다
애플 워치는 아이폰과만 페어링되며, 블루투스를 통해 자체적으로 하트레이트를 광고하지 않습니다. 워치 앱이 측정한 데이터를 워치-폰 링크를 통해 폰으로 전달하고, 헤드유닛은 실제로 이 폰에 연결됩니다.
따라서 Apple Watch는 iPhone 구성에 두 번째 센서를 추가하지만, iPad 구성에는 아무것도 추가하지 않습니다. 책상 위에 기기를 하나만 두고 싶다면, iPad에서 AirPods를 사용하고 Apple Watch는 제외하세요.
| 전경에서 한 번 페어링 | MyWhoosh에서 센서가 연결되었다고 보고할 때까지 HRB를 화면에 열어두세요. iOS는 백그라운드 앱의 광고 서비스를 숨기므로, 포그라운드에서 발견해야 합니다. 이후에는 앱을 전환하거나 장치를 잠그더라도 연결이 유지됩니다. |
|---|---|
| 단일 기기에서 방송 | 휴대전화나 iPad에서 HRB를 실행하세요. 둘 다 실행하면 동시에 두 개의 동일한 HRB 센서가 MyWhoosh 목록에 나타나며, 페어링 화면에서는 이들을 구분할 수 없습니다. |
| 시계 링크, 행이 빨간색인 경우 | 메인 화면의 시계 앱 행은 휴대전화가 실제로 감지하는 내용을 보고합니다. '설치되지 않음'은 시계 앱을 아직 열지 않았음을 의미하며, '연결 불가'는 보통 시계 앱이 실행 중이지 않음을 의미합니다. 앱을 열고 세션을 시작하세요. iPad에서는 행이 완전히 사라집니다. |
| 센서 없이 테스트 중 | 출력을 테스트 신호로 설정하여 50–100 BPM의 합성 신호를 방송합니다. 실제 신호처럼 MyWhoosh에서 페어링되므로, 착용 전에 센서 측 작동을 확인하는 가장 빠른 방법입니다. |
질문
가장 먼저 부딪히는 문제들과 각 문제에 대한 솔직한 답변입니다.
AirDrop가 작동하지 않음 — 먼저 방송을 중지하세요
에어드롭은 블루투스 LE를 통해 주변 기기를 찾으며, HRB도 동일한 라디오를 사용해 동일한 방식으로 동작합니다. HRB가 광고 중이고 헤드유닛이 구독 중일 때 해당 라디오를 지속적으로 점유하므로, 에어드롭은 상대방 기기를 찾지 못하거나 전송 시작 전에 멈출 수 있습니다.
방송을 중지하거나 HRB를 종료한 후 에어드롭을 다시 실행하세요. 즉시 작동합니다. HRB가 포그라운드로 돌아오면 한 번의 탭으로 재페어링할 수 있습니다. 방송 중 작동이 멈추는 다른 기능(카플레이 핸드오프, 블루투스 키보드 키 누락, 컨티뉴이티 카메라 등)에서도 시도해 볼 가치가 있습니다.
페어링 후 화면을 잠글 수 있나요?
네. 디스커버리(검색)에는 HRB가 포그라운드에 있어야 하지만, 연결은 화면 잠금, 백그라운드 전환, 앱 전환 시에도 유지됩니다. 단, 앱이 숨겨진 상태에서 처음 페어링하는 것은 불가능합니다. iOS는 백그라운드에서 서비스 광고를 중지하기 때문입니다.
배터리 소모량은 얼마나 됩니까?
방송 자체는 전력 소모가 적지만, 판독값을 생성하는 운동 세션은 그렇지 않습니다. 해당 기기에서 심박수 운동이 차지하는 배터리 소모량과 비슷할 것으로 예상됩니다. iPhone 구성에서 시계가 더 많은 영향을 받습니다. 시계가 측정하는 쪽이기 때문입니다.
두 앱이 동시에 방송을 읽을 수 있습니까?
네. Bluetooth LE는 하나의 센서에 여러 구독자를 허용하므로 MyWhoosh와 두 번째 앱이 동일한 수치를 모두 볼 수 있습니다. 메인 화면에는 실시간 구독자 수가 표시되어 두 앱이 실제로 모두 연결되었는지 확인할 수 있습니다.
주행 중 BPM이 멈췄습니다
측정값이 오래되면 죽은 수치를 반복하는 대신 회색으로 표시됩니다. AirPods의 경우 이는 보고를 중단했음을 의미합니다. 해당 행의 경로 선택기가 오디오를 튕겨 내보내고 다시 받아와 앱에서 나가지 않고도 링크를 재설정합니다.
Garmin에서 검색되지 않습니다
해당 모델이 ANT+를 통해서만 심박수를 페어링하는지 확인하십시오. iPhone에는 ANT+ 라디오가 없으므로 어떤 앱도 이를 전송할 수 없습니다. Bluetooth 스트랩을 수락하는 Garmin 기기는 HRB와 정상적으로 페어링되지만, 그렇지 않은 기기는 절대 페어링되지 않습니다.
데이터는 어디로 가나요?
블루투스 라디오로만 가고 다른 곳으로는 가지 않습니다. 계정, 서버, 분석 도구가 없습니다. 심박수는 기기에서 HealthKit을 통해 들어와 페어링한 대상에게 표준 센서 값으로 나갑니다.
요구 사항
실행에 필요한 것 및 비용
| 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 계정이 필요합니다.