经典蓝牙、BLE 或... Wifi Direct?

问题描述

希望能朝着正确的方向推动:-)。

我正在编写一个 Java 应用程序,它将在 RaspBerry Pi 4 上运行,嵌入到车辆中(无头,无键盘)。客户端或中心将是 android 或 iOS。

我想要以下内容

  • 绝对无痛配对 - 这是最重要的一点!你走进范围,你会自动连接。切勿出现 PIN 验证提示或“连接验证”提示
  • 不能干扰连接到汽车娱乐系统使用的相同 BT 配置文件(即不能干扰免提或音频配置文件
  • 在合理的时间内传输相对较小的文件(大约 500K)
  • 不传输文件时,我需要能够发送一些随机位,服务器/外设将根据这些位进行操作。
  • 电池寿命并不是真正的问题
  • 安全不是真正的问题

我已经使用 jSerial 编写了一些经典的 BT 代码,但是树莓派有一些连接问题,使经典 BT 显得笨拙。连接过程需要接受 PIN 码,而隐藏在汽车引擎盖下的无头树莓无法验证。断开/重新连接会导致 rfcomm/串行端口出现问题。我可以通过 SPP 相对快速地传输文件,但连接/重新连接问题是一个障碍。

我已经尝试了带有 ssp 的 Classic BT(“正常工作”安全性),但我仍然收到 PIN 提示。 :-(

BLE 似乎是“无需配对”的一个选项,但文件传输会非常缓慢(我必须自己创建文件 xfer 进程)。不过,好处是 iOS 确实支持 BLE。

我已经简要地研究了 wifi direct,但即使它也需要从服务器端(引擎盖下的设备)进行连接验证,所以这可能是行不通的。

BLE 是最好的方法吗,我只需要适应糟糕的文件传输速度?任何通过 BLE 处理 xmodem 或其他有保证的文件 xfer 的建议或库?

感谢您的建议!

问候,

布雷特

解决方法

如果您希望您的设备与 iOS 和 Android 无缝协作,那么您最好的选择确实是 BLE。这是因为与经典的蓝牙和 WiFi Direct 不同,BLE 更成熟,更适合 iOS 平台,您最终会找到更多资源(在 iOS 13 之前,CoreBluetooth 仅支持 BLE 连接)。查看以下链接了解更多详情:-

您已经完成了研究,并且您对上述不同技术的局限性是正确的,尽管自大多数设备现在支持的蓝牙 v4.2 以来,BLE 的速度已大大提高。看看下面的链接:-

剩下的唯一挑战是为 BLE 实现类似 SPP 的机制,我同意这不是微不足道的,但是过去有很多人尝试过这个,虽然没有一个推荐的解决方案,你也不会从头开始。