安卓蓝牙串口/RFCOMM/SPP,如何改变波特率?

10

这非常令人沮丧,因为我已经尝试了几周,但在互联网上找不到任何线索。

我正在开发一个项目,可以在不同的农业硬件上读/写蓝牙串行数据。

这些硬件大多数都很老旧,更改其SPP的波特率不是一个选项。

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

我已经成功地以19200的波特率从标签阅读器中读取并格式化了数据。

然而,现在我卡在了秤上,它的波特率为9600,在我的应用程序中显示出奇怪的字符,甚至与应该来自秤的格式完全不同。

此前,该项目是在旧版Windows Mobile上完成的,其API可以更改波特率。

在Android中是否有办法做到这一点,或者我走错了路?

2个回答

10

编辑:修复了一些错误。

互联网上没有关于这个问题的好信息 - 而且很多信息是错误的 - 不要相信任何人!

特别地,以下两点是不正确的

  • 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 支持设置蓝牙适配器的波特率。


我将ELM 327蓝牙OBD-2适配器(10美元的中国ELM克隆版本)的波特率从默认的38400更改为230400,Android会与该设备配对,但当我使用之前可用的终端应用时,设备完全没有响应……我想知道设备是否被砖化或是否有方法使其再次工作(在任何系统/操作系统上)。我有一个类似的带USB的OBD-2适配器,它可以用230.4k工作。 - Kozuch
如果可以的话,我建议在115200或更低的速率下进行测试,因为这些速率更为常见。可能有一些代码认为你不能超过115200。 - Timmmm
问题是我无法在接收器(Android)上设置波特率...我找到的唯一一个可能能够设置它的应用程序https://play.google.com/store/apps/details?id=com.devmel.apps.serialterminal将无法连接到已在操作系统中配对的设备(需要BT PIN一遍又一遍)。我还没有在纯Linux(笔记本电脑)上使用BT dongle进行测试。Linux(而不是Android)可以设置BT波特率吗?糟糕的是,在其他终端应用程序中没有回复(那些不能设置速率的应用程序)-如果设备仍然活着,即使在错误的输入命令下,它也会至少发送回一些东西... - Kozuch
我还没有在Linux上测试过,但我认为它应该可以。你绝对不能在Android上设置波特率。我猜那个应用程序是指USB串行适配器,它显然也支持。 - Timmmm
1
真遗憾,Android 上无法进行远程端口协商!而且,这种情况几乎没有文档记录,Google 甚至似乎对与该功能相关的请求不感兴趣,将它们标记为过时(此处此处)。 - DriesOeyen
@Kozuch 很抱歉,“Android串口终端”无法设置蓝牙连接速度。我已经检查了该应用程序的代码,它忽略了蓝牙选项。 - Kanaris007

2

假设一些蓝牙串口转换器连接到了传统设备上?如果是这样,你应该能够编程它,使其始终使用特定的比特率。这样,蓝牙客户端就不需要设置比特率了...


谢谢!我成功设置了设备和蓝牙适配器之间物理连接的波特率。现在它运行得非常好!我意识到,在蓝牙连接中没有可调整的波特率。 - ZiGi
@Zigi,你是如何设置物理连接的波特率的?我遇到了类似的问题,目前卡在9600bps。我已经将打印机波特率配置为115200bps,但速度仍然非常慢,看起来设置打印机波特率并没有产生任何影响... - Saro Taşciyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接