问题描述
希望能朝着正确的方向推动:-)。
我正在编写一个 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 连接)。查看以下链接了解更多详情:-
- WiFi Direct and iOS Support
- How to use Bluetooth Classic instead of LE
- How to connect to classic Bluetooth devices in iOS 13
您已经完成了研究,并且您对上述不同技术的局限性是正确的,尽管自大多数设备现在支持的蓝牙 v4.2 以来,BLE 的速度已大大提高。看看下面的链接:-
- Maximizing BLE throughput on Android and iOS
- Maximizing BLE Throughput: Everything You Need to Know
- A Practical Guide to BLE Throughput
剩下的唯一挑战是为 BLE 实现类似 SPP 的机制,我同意这不是微不足道的,但是过去有很多人尝试过这个,虽然没有一个推荐的解决方案,你也不会从头开始。