Description
Hi everyone I have been trying to use this library on a RPI4 to connect to a BLE device, but the connection is not reliable, as a lot of other issues have mentioned, it needs a lot of attempts to connect.
The thing is that when I use bluetoothctl command prompt and use the connect {MAC} command it always connects in the first attempt. So this lead me to believe that it is not a problem with the hardware but with the implementation.
I have captured with btmon the logs of the different ways a connection is stablished using this library and when a connection is stablished with bluetoothctl and I have seen that the commands used are different:
Connection with BLEAK it uses the LE Create Connection command. It fails and the device disconnects
< HCI Command: LE Create Connection (0x08|0x000d) plen 25
Scan interval: 60.000 msec (0x0060)
Scan window: 60.000 msec (0x0060)
Filter policy: Accept list is not used (0x00)
Peer address type: Public (0x00)
Peer address: FE:97:80:00:24:64 (OUI FE-97-80)
Own address type: Public (0x00)
Min connection interval: 30.00 msec (0x0018)
Max connection interval: 50.00 msec (0x0028)
Connection latency: 0 (0x0000)
Supervision timeout: 420 msec (0x002a)
Min connection length: 0.000 msec (0x0000)
Max connection length: 0.000 msec (0x0000)
> HCI Event: Command Status (0x0f) plen 4
LE Create Connection (0x08|0x000d) ncmd 1
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 19
LE Connection Complete (0x01)
Status: Success (0x00)
Handle: 64
Role: Central (0x00)
Peer address type: Public (0x00)
Peer address: FE:97:80:00:24:64 (OUI FE-97-80)
Connection interval: 48.75 msec (0x0027)
Connection latency: 0 (0x0000)
Supervision timeout: 420 msec (0x002a)
Central clock accuracy: 0x00
@ MGMT Event: Device Connected (0x000b) plen 44
LE Address: FE:97:80:00:24:64 (OUI FE-97-80)
Flags: 0x00000008
Connection Locally Initiated
Data length: 31
Flags: 0x06
LE General Discoverable Mode
BR/EDR Not Supported
16-bit Service UUIDs (partial): 1 entry
Health Thermometer (0x1809)
Service Data: Unknown (0xc1c4)
Data: fe97800024646c08bc05106c000003504607000a
@ RAW Open: btmon (privileged) version 2.22
@ RAW Close: btmon
< HCI Command: LE Read Remote Used Features (0x08|0x0016) plen 2
Handle: 64 Address: FE:97:80:00:24:64 (OUI FE-97-80)
> HCI Event: Command Status (0x0f) plen 4
LE Read Remote Used Features (0x08|0x0016) ncmd 1
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 12
LE Read Remote Used Features (0x04)
Status: Connection Failed to be Established (0x3e)
Handle: 64 Address: FE:97:80:00:24:64 (OUI FE-97-80)
Features: 0x3f 0x00 0x00 0x08 0x00 0x00 0x00 0x00
LE Encryption
Connection Parameter Request Procedure
Extended Reject Indication
Peripheral-initiated Features Exchange
LE Ping
LE Data Packet Length Extension
Remote Public Key Validation
> HCI Event: Disconnect Complete (0x05) plen 4
Status: Success (0x00)
Handle: 64 Address: FE:97:80:00:24:64 (OUI FE-97-80)
Reason: Connection Failed to be Established (0x3e)
@ MGMT Event: Device Disconnected (0x000c) plen 8
LE Address: FE:97:80:00:24:64 (OUI FE-97-80)
Reason: Unspecified (0x00)
Connection with bluetoothctl connect command it uses the LE Extended Create Connection command and it connects
< HCI Command: LE Extended Create Connection (0x08|0x0043) plen 58
Filter policy: Accept list is not used (0x00)
Own address type: Public (0x00)
Peer address type: Public (0x00)
Peer address: FE:97:80:00:24:64 (OUI FE-97-80)
Initiating PHYs: 0x07
Entry 0: LE 1M
Scan interval: 60.000 msec (0x0060)
Scan window: 60.000 msec (0x0060)
Min connection interval: 10.00 msec (0x0008)
Max connection interval: 10.00 msec (0x0008)
Connection latency: 0 (0x0000)
Supervision timeout: 4000 msec (0x0190)
Min connection length: 0.000 msec (0x0000)
Max connection length: 0.000 msec (0x0000)
Entry 1: LE 2M
Scan interval: 60.000 msec (0x0060)
Scan window: 60.000 msec (0x0060)
Min connection interval: 10.00 msec (0x0008)
Max connection interval: 10.00 msec (0x0008)
Connection latency: 0 (0x0000)
Supervision timeout: 4000 msec (0x0190)
Min connection length: 0.000 msec (0x0000)
Max connection length: 0.000 msec (0x0000)
Entry 2: LE Coded
Scan interval: 60.000 msec (0x0060)
Scan window: 60.000 msec (0x0060)
Min connection interval: 10.00 msec (0x0008)
Max connection interval: 10.00 msec (0x0008)
Connection latency: 0 (0x0000)
Supervision timeout: 4000 msec (0x0190)
Min connection length: 0.000 msec (0x0000)
Max connection length: 0.000 msec (0x0000)
> HCI Event: Command Status (0x0f) plen 4
LE Extended Create Connection (0x08|0x0043) ncmd 2
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 31
LE Enhanced Connection Complete (0x0a)
Status: Success (0x00)
Handle: 16
Role: Central (0x00)
Peer address type: Public (0x00)
Peer address: FE:97:80:00:24:64 (OUI FE-97-80)
Local resolvable private address: 00:00:00:00:00:00 (Non-Resolvable)
Peer resolvable private address: 00:00:00:00:00:00 (Non-Resolvable)
Connection interval: 10.00 msec (0x0008)
Connection latency: 0 (0x0000)
Supervision timeout: 4000 msec (0x0190)
Central clock accuracy: 0x00
@ MGMT Event: Device Connected (0x000b) plen 44
LE Address: FE:97:80:00:24:64 (OUI FE-97-80)
Flags: 0x00000008
Connection Locally Initiated
Data length: 31
Flags: 0x06
LE General Discoverable Mode
BR/EDR Not Supported
16-bit Service UUIDs (partial): 1 entry
Health Thermometer (0x1809)
Service Data: Unknown (0xc1c4)
Data: fe97800024646c08bc05146c000003505f07000a
@ RAW Open: btmon (privileged) version 2.22
@ RAW Close: btmon
> HCI Event: LE Meta Event (0x3e) plen 4
LE Channel Selection Algorithm (0x14)
Handle: 16 Address: FE:97:80:00:24:64 (OUI FE-97-80)
Algorithm: #1 (0x00)
< HCI Command: LE Read Remote Used Features (0x08|0x0016) plen 2
Handle: 16 Address: FE:97:80:00:24:64 (OUI FE-97-80)
> HCI Event: Command Status (0x0f) plen 4
LE Read Remote Used Features (0x08|0x0016) ncmd 2
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 12
LE Read Remote Used Features (0x04)
Status: Success (0x00)
Handle: 16 Address: FE:97:80:00:24:64 (OUI FE-97-80)
Features: 0x3d 0x00 0x00 0x00 0x00 0x00 0x00 0x00
LE Encryption
Extended Reject Indication
Peripheral-initiated Features Exchange
LE Ping
LE Data Packet Length Extension
Do you think this might be causing the connection fail issues?
Best regards