피드로 돌아가기
How I synced BLE firmware with React Native
Dev.toDev.to
Frontend

React Native 기반 Custom BLE Firmware 통신 레이어 설계 및 안정화

How I synced BLE firmware with React Native

Rabab Zahra2026년 6월 28일7intermediate

Context

SDK 없이 Protocol Spec만 제공되는 Custom Firmware 환경에서 React Native와 스마트워치 간의 BLE 통신 구현 필요. 단순 연결을 넘어 잦은 연결 끊김과 BLE 하드웨어 특유의 타이밍 이슈로 인한 통신 불안정성 해결이 핵심 과제임.

Technical Solution

  • useBleManager Custom Hook 중심의 응집도 높은 Connection Layer 설계로 비즈니스 로직과 통신 로직 분리
  • Binary Frame 구조(Start/End Marker, Checksum 포함)의 buildPayload 함수 구현을 통한 데이터 무결성 보장
  • connect $\rightarrow$ sleep(900ms) $\rightarrow$ startNotification $\rightarrow$ sleep(1000ms) $\rightarrow$ handshake 순의 엄격한 시퀀스 제어로 하드웨어 타이밍 병목 해결
  • retrieveServicesstartNotification을 선행한 후 Handshake 패킷을 송신하는 3단계 인증 절차 수립으로 펌웨어 인식률 제고
  • disconnect 리스너와 connectPeripheralWithRetry 재귀 루프 결합을 통한 자동 복구 메커니즘 구축
  • Expo Config Plugin을 통한 Android Manifest 권한 주입으로 OS 레벨의 스캔 실패 원인 제거

- BLE 통신 시 `connect` 직후 즉시 쓰기를 수행하지 말고 하드웨어 안정화를 위한 `sleep` 지연 시간 확보 - 데이터 전송 전 원본 페이로드 기반의 Checksum 검증 로직을 구현하여 전송 오류 방지 - Happy Path 외에 Airplane Mode, 거리 이탈 등 강제 연결 끊김 시나리오를 통한 재연결 로직 검증 - 모든 BLE 송수신 바이트를 Hex 형태로 로깅하여 디버깅 시간을 단축하는 환경 구축

원문 읽기