9

这非常令人沮丧,因为我已经尝试了数周,甚至在互联网上都没有任何线索。

我正在研究一个在不同农业硬件上读取/写入蓝牙串行数据的项目。

这些硬件中的大多数都是旧的,并且无法更改其 SPP 的波特率。

我使用 android 蓝牙聊天作为读/写的基础,我只更改了 UUID 以允许连接到我拥有的设备

我已经成功地以 19,200 的糟糕速率从标签阅读器中读取,并且格式很好

但是,我现在被波特率 9,600 的刻度卡住了,并且在我的应用程序中显示有趣的字符,甚至不接近应该来自刻度的格式

这个项目以前是在旧的 Windows Mobile 上完成的,波特率可以在他们的 API 中改变

有没有办法在 Android 中做到这一点,还是我在叫错树?

4

2 回答 2

9

编辑:修正了一些错误。

互联网上没有关于此的好的信息——而且很多信息都是错误的——不要相信任何人!

特别是,这两件事是正确的:

  • RFCOMM 和 SPP(串行端口配置文件)是同一事物的两个名称。(然而,它们之间的关系非常密切。)
  • 无需设置 RFCOMM / SPP 连接的波特率。

这是我发现的:

蓝牙串行连接按照 SPP 中的描述使用RFCOMM进行。RFCOMM 是一个在 L2CAP 上运行的连接,允许以帧的形式发送串行数据和控制参数。它在很大程度上基于称为TS 07.10的古老标准。SPP 是蓝牙配置文件。

此成帧还允许您发送带外数据,用于控制串行信号(DTR、CTS 等)和设置波特率

从 SPP 规范:

DevA 可以直接在 DLC 建立之前使用远程端口协商命令通知 DevB 的 RS232 端口设置。如果 RFCOMM 适配层的 API 公开了这些设置(例如波特率、奇偶校验),则需要这样做。

可悲的是,Android 根本没有公开此功能。我想可以自己发送远程端口协商命令,但我很确定这需要重新实现 RFCOMM,这需要访问我们没有的L2CAP 。

远程端口协商命令在第 31 页有详细说明。 注意“所有参数都分配了默认值,如果不执行协商,则选择默认值。”

因此,无法在 Android 上根据需要设置波特率。它将使用您的蓝牙适配器使用的默认波特率(可能是 9600)。

另请注意,Windows确实支持设置蓝牙适配器的波特率。

于 2014-05-27T12:03:33.363 回答
2

大概一些蓝牙到串行转换器连接到旧设备?如果是这样,您应该能够对其进行一次编程以始终使用特定的比特率。那么蓝牙客户端就不需要设置比特率了……

于 2011-04-07T09:22:19.210 回答