无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3

Posted

技术标签:

【中文标题】无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3【英文标题】:Trouble Connecting Android App to Raspberry Pi 3 over BLE 【发布时间】:2017-09-18 07:09:32 【问题描述】:

我正在使用 Raspberry Pi 3 型号 B 作为蓝牙外围设备。 Pi 正在运行 GATT 服务器并对其进行广告宣传。

我可以从 LightBlue ios 应用程序连接到它,并且可以读取和写入值。

我无法从 android 应用程序通过 BLE 连接到 Pi。 我尝试使用 Play 商店中的 2 个应用程序 - BLE 扫描仪和蓝牙 LE 扫描仪。 BluetoothLeGatt 是我尝试使用的另一个应用程序。它作为 Android Studio 上的示例 BLE 项目提供。 pi 出现在扫描结果中,一旦我按下连接,应用程序就会尝试连接,但可能会被 pi 拒绝连接。程序控制转到 GattCallback 函数,状态更改为“断开连接”,服务发现永远不会发生。 日志如下所示:

D/BluetoothGatt: connect() - device: B8:27:EB:A4:E7:75, auto: false
D/BluetoothGatt: registerApp()
D/BluetoothGatt: registerApp() - UUID=0c46767a-1ddc-4d91-83fe-490f9d3a5ad7
D/BluetoothGatt: onClientRegistered() - status=0 clientIf=6
D/BluetoothLeService: Trying to create a new connection.
D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=6 device=B8:27:EB:A4:E7:75
I/BluetoothLeService: Disconnected from GATT server.

同一应用能够连接到使用 LightBlue iOS 应用或 DropBeacon iOS 应用模拟的虚拟外围设备。

这让我想到,pi 上的某些配置阻止它接受来自 Android 的连接。

源代码:https://github.com/googlesamples/android-BluetoothLeGatt

有什么建议可以完成这项工作吗? 谢谢

【问题讨论】:

有没有办法只为 LE 模式做广告,而不是来自 Pi 的经典模式? 【参考方案1】:

使用

mBluetoothGatt = device.connectGatt(this, false, mGattCallback,TRANSPORT_LE);

而不是

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

为我做了诀窍。 API 级别 23 支持这个带有 4 个参数的 connectGatt 函数定义

【讨论】:

对于那些需要在较低版本的Android(该方法存在但它是私有的)中调用该方法的人,请查看***.com/a/27961521/1852787

以上是关于无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3的主要内容,如果未能解决你的问题,请参考以下文章

如何通过android应用连接多个BLE设备?

Android BLE,扫描开始,找到设备但未连接过滤器(ESP32 和三星)

Android 可穿戴设备可以与 iOS 一起使用,通过 BLE 连接吗?有没有可用的SDK?

AT 命令无法通过 Arduino 在 BLE HM 10 上运行

如何在 Android 中获取当前连接的 BLE 外围设备

无法通过 BLE 连接到 AirPods