0

저는 BLE을 처음 사용하고 올바른 구현 방법을 지적 할 수 있기를 바랍니다.대용량 데이터 청크를 BLE을 통해 전송하는 최상의 방법

주변 장치 (배터리로 작동되는) 장치가 센서 판독 값을 지속적으로 집계하는 응용 프로그램을 개발 중입니다. 모바일 쪽 응용 프로그램에서 "동기화"단추가있을 것이며, 단추를 누를 때 주변 장치에 축적 된 모든 센서 판독 값을 모바일 응용 프로그램으로 전송하고 싶습니다. 동기화 간의 최대 지속 시간은 며칠이 될 수 있으므로 누적 된 데이터 크기는 20KB가 될 수 있습니다.

이제 주변기기에서 중앙 애플리케이션으로의 데이터 전송을 수행하는 최선의 방법이 무엇인지 궁금합니다. 필자는 각 특성에 고정 된 양의 샘플이 포함되어있는 특성 배열 (예 : 1 시간 판독 값)을 작성하려고 생각했습니다.

그런 다음 동기화시, I는 :

  1. 는 특성 (얼마나 많은 1시간 세포) 계산 읽어보십시오.
  2. 그런 다음 특성 (1 시간 셀)을 하나씩 읽습니다.

그러나 이것이 유효한 접근 방법인지 잘 모릅니다.

  1. 이것이 가장 유용한 "전력 효율적인"방법인지 확실하지 않습니다. .
  2. Characteristic READ가가는 길인지, 아니면 어쩌면 표시를 대신 사용해야하는지 잘 모르겠습니다.

은 여기에 어떤 도움이 높게 평가 될 것입니다 :)

사전에 감사, 모티.

답변

3

나는 단순히 알림을 사용합니다.

전송 시작을 트리거하기 위해 무언가를 쓰는 특성 하나를 사용하십시오.

그런 다음 한 번에 20 바이트를 보내서 데이터를 스트리밍하는 또 다른 특징이 있습니다. BLE system-on-a-chip을위한 대부분의 SDK는 너무 빨리 보내지 않도록 데이터의 흐름을 제어하는 ​​몇 가지 방법을 가지고 있습니다. 일반적으로 다음 알림을받을 준비가되었을 때 콜백이 트리거됩니다.

전송되는 데이터의 크기를 알기 위해 예를 들어 첫 번째 알림에 크기가 포함되고 나머지는 데이터가 포함될 수 있습니다.

연결 간격마다 많은 알림을 보낼 수 있기 때문에 이것은 일반적으로 두 왕복을 필요로하는 많은 읽기 작업을 수행하는 경우와 비교해 볼 때 가장 시간이 오래 걸리고 전력 효율적입니다. 표시 당 기본적으로 두 번의 왕복이 필요하므로 표시를 사용하지 마십시오. 그들은 어쨌든 꽤 쓸모가 없습니다.

더 큰 MTU를 교환하여 속도를 어느 정도 높일 수 있습니다 (L2CAP/ATT 헤더 오버 헤드가 낮아짐).

+0

안녕하세요 Emil, 고마워요. 매우 도움이됩니다. 두 가지 후속 질문이 있습니다. 괜찮습니다. "연결 간격마다 많은 알림이 전송 될 수 있습니다", 단일 연결 간격 내에서 수행 할 수있는 특성 읽기 수에 제한이 있습니까? ? 알림이 응용 프로그램 수준 ACK를 필요로하지 않거나 프로토콜에 내재 된 READ 동작에 다른 제한이있을 수 있기 때문에 단순히 "빠른"것인지 이해하려고합니다. – MotiC

+0

제한 사항 인 ACK를 제한하는 응용 프로그램 뿐이며 한 번에 하나의 GATT 작업 만 처리 할 수 ​​있습니다. – Emil