BLE 저전력 블루투스 개발 관련 개념 문제 기록

블루투스ble의 전송 속도는 주종기가 초당 전송하는 바이트 수를 가리킨다.전송 속도라면 시간과 매번 전달되는 가방의 크기에 관한 문제다.
이 글은 이미 위챗 공식 번호fanfan 프로그램 원에게 독점적으로 발표할 수 있는 권한을 부여하였다
전재는 출처를 밝혀 주십시오. 본고는 BLE 저소모 블루투스 개발과 관련된 개념 문제 기록에서 나온 것입니다.
ble 통신에 대한 demo는 블루투스 API 소개 및 기본 기능 실현을 참고할 수 있다
Ble 개념 관련
ble는 데이터의 전송에 대해 한 바이트의 제한이 있습니다. 기본적으로 20바이트이지만 수정할 수 없는 것은 아닙니다.기본적으로 mtu는 23바이트 (3바이트를 제외한 나머지 20바이트) 이며, 호스트는 Bluetooth Gatt#requestMtu (int mtu) 를 호출해서 가방마다 전송되는 바이트 수를 수정할 수 있습니다.마찬가지로 ble는 전송에 속할 때 모든 가방 사이의 시간 간격에 대해 일정한 제한이 있다. 대부분 기기의 연결 시간 간격은 7.5ms–4s(1.25ms를 한 단위, 즉 6-0x0C80개 단위)이다.연결 간격 호스트에서도 수정할 수 있습니다: Bluetooth Gatt# request Connection Priority (int connection Priority) 방법을 호출합니다.여기서 connectionPriority에는 다음과 같은 세 가지 수치가 있습니다.
  • BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER: 낮은 전력 소비량, 연결 간격 범위: 100ms~125ms(80~100단위).대응하는 시간 지연 수치는 2.5ms(2개 단위)에 대응하는 모니터링 시간 초과 수치는 20s(10ms를 한 단위)로 한다.
  • BluetoothGatt#CONNECTION_PRIORITY_BALANCED: 중간 수준에서 대응하는 연결 시간 간격의 수치 범위는 30ms-50ms(24–40개 단위)이다.대응하는 시간 지연 수치는 0ms(0개 단위)에 대응하는 모니터링 시간 초과 수치는 20s()이다.
  • BluetoothGatt#CONNECTION_PRIORITY_HIGH: 전력 소비량이 많은 연결 간격의 범위는 11.25ms-15ms(9~12개 단위)입니다.대응하는 시간 지연 수치는 0ms(0개 단위)에 대응하는 모니터링 시간 초과 수치는 20s()이다.

  • 다음은 각 개념이 무슨 뜻인지??
  • 호스트 및 슬레이터: 연결을 시작한 장치는 호스트이고 연결 요청을 받은 장치는 슬레이터
  • 클라이언트와 서버:'속성'을 보여주는 장치는 서버이고 그와 어울리는 것은 클라이언트이다.다시 말하면 정보를 얻은 클라이언트가 정보를 제공하는 것은 서버
  • 이다.
  • 호스트는 클라이언트일 수도 있고 서버일 수도 있으며 클라이언트일 수도 있고 서버일 수도 있다
  • BLE 프로토콜과 프로토콜 창고: 프로토콜은 일종의 통신 표준을 가리킨다.예를 들어 첫 번째 바이트가 무슨 뜻을 대표하는지, 두 번째 바이트가 무슨 뜻을 대표하는지 규정한다.프로토콜 창고는 구체적인 실현 함수로 개발자가 프로토콜 창고 함수를 호출하여 통신한다(각종 API에 해당)
  • 연결 이벤트: 두 개ble설비의 연결에서 주파수 변조 메커니즘을 사용하고 두 장치는 특정한 채널로 데이터를 수발하며 시간이 지나면 새로운 채널(체인층 처리 채널 전환)을 사용한다. 두 장치는 채널 전환 후 첫 번째 데이터를 연결 부품이라고 한다.데이터 송수신이 없어도 두 장치는 여전히 체인 데이터를 교환해서 연결을 유지할 것이다.연결 이벤트에서 채널을 끊임없이 전환합니다. 보내는 패키지가 한 개가 아닙니다.
  • 연결 간격(Connection Interval): 두 연결 이벤트 사이의 간격입니다.호스트에서 데이터를 보내기 시작하는 시간과 호스트에서 다음 호스트로 데이터를 보내기 시작하는 시간 사이의 간격입니다.주종기 간의 매번 통신은 연결 이벤트이다. (그러나 첫 번째 종기가 방송 상태인 호스트 연결 종기와 다르다.)1.25ms를 한 단위로 하고 일반적인 수치는 7.5ms-4s(6-3200)이다.
  • 기기 지연 시간(Slave latency): 일부 연결 이벤트를 기기에서 건너뛸 수 있습니다.간단하게 말하면 내가 시간을 정해서 이번 연결 사건이 시작된 후 일정 시간 동안 이 기간 동안 호스트의 어떤 소식도 응답하지 않을 것이다.
  • 모니터링 시간 초과(Supervision Timeout): 두 개의 성공적인 연결 이벤트 간의 최대 허용 간격입니다.이 시간을 초과하여 연결 이벤트가 없고 데이터 교환이 없으면 연결을 끊습니다.10ms를 단위로 하고 일반적인 수치 범위는 100ms-32s(10-3200)이다.

  • 호스트가 연결을 시작하면 BluetoothGatt 객체를 가져옵니다.
  • 호스트가 주동적으로 데이터를 읽고readCharacteristic 방법을 사용하며, 읽은 후에 onCharacteristicRead 방법을 터치합니다
  • 호스트가 자발적으로 데이터를 쓸 때 writeCharacteristic 방법을 사용하고, 쓴 후에 onCharacteristicWrite 방법을 터치한다
  • 호스트가 수동적으로 데이터를 얻고(notify 방법으로 데이터를 발송) 모니터링이 데이터를 들을 때 onCharacteristicChanged 방법을 터치한다(단 이 방법을 리셋하려면 호스트 프로그램에서 감청할 characteristic에 notify: setCharacteristicNotification 설정해야 한다)
  • 호스트가 mtu (가방의 바이트) 를 수정하면 onMtuChanged 방법을 터치합니다.

  • 호스트 종속 연결 통신 프로세스 설명:
  • 호스트에 블루투스 enable 켜기()
  • 호스트 스캔 블루투스 startLeScan()(startLeScan(final UID[] 서비스 Uuids,final LeScan Callback) 특정 uuid를 스캔할 수 있는 장치)
  • 호스트 연결 블루투스
  • 호스트 discovery Services 검색 서비스(onServices Discovered 메소드 리콜)
  • 커뮤니케이션
  • 문제 요약
    문제1: 블루투스를 스캔할 때 어떻게 필터를 합니까?
    이 시스템은 이미 인터페이스를 제공했다.
     @Deprecated
        @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
        public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback) {

    스캔하고 싶은 장치의 서비스 uid를 서비스 Uuids에 추가하여 스캔하면 됩니다.절대 name을 필터로 하지 마십시오.BluetoothDevice를 통해 디바이스를 검색한 후getUuids () 메서드는 필터링되지 않습니다. 메서드에 대한 정의를 보면 알 수 있습니다.
     /**
         * Returns the supported features (UUIDs) of the remote device.
         *
         * <p>This method does not start a service discovery procedure to retrieve the UUIDs
         * from the remote device. Instead, the local cached copy of the service
         * UUIDs are returned.
         * <p>Use {@link #fetchUuidsWithSdp} if fresh UUIDs are desired.
         * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
         *
         * @return the supported features (UUIDs) of the remote device,
         *         or null on error
         */
        @RequiresPermission(Manifest.permission.BLUETOOTH)
         public ParcelUuid[] getUuids() {

    여기 되돌아오는 uid는 캐시된 uid입니다.캐시된 uid가 없으면 틀림없이null입니다.
    공식 계정 위챗 검색 팬맨 성서원

    좋은 웹페이지 즐겨찾기