这是非常令人沮丧的,因为我已经尝试了几个星期,甚至没有在互联网上的线索。
我正在做一个项目,读取/写入蓝牙串行数据在不同的农业硬件。
这些硬件大多是旧的,改变SPP的波特率是不可能的。
我使用android蓝牙聊天作为读/写的基础,我只改变了UUID以允许连接到我拥有的设备
我已经设法以19200的坏率从标签阅读器中读取,并且格式化得很好
然而,我现在被困在了波特率为9600的刻度上,在我的应用程序中显示有趣的字符,甚至不接近应该来自刻度的格式
这个项目之前是在旧的Windows Mobile上完成的,波特率可以在他们的API中更改
是否有一种方法可以在Android中做到这一点,或者我是在错误的树上吠叫?
编辑:修正了一些错误。
网上没有关于这方面的好信息——而且很多都是错误的——不要相信任何人!
特别地,不为真:
- RFCOMM和SPP(串口配置文件)是同一事物的两个名称。(然而,它们是非常密切相关的。)
- 不需要设置RFCOMM/SPP连接的波特率
以下是我的发现:
蓝牙串行连接按照SPP中使用RFCOMM的描述进行。RFCOMM是一个在L2CAP上运行的连接,允许以帧的形式发送串行数据和控制参数。它在很大程度上基于一个名为TS 07.10的古老标准。SPP为蓝牙配置文件
这个帧还允许您发送带外数据,例如控制串行信号(DTR, CTS等)和设置波特率。
来自SPP规范:
DevA可以通过远程端口协商通知DevB RS232端口设置命令,直接在DLC建立之前。如果RFCOMM适配层的API公开了这些设置(例如波特率,奇偶校验),则需要这样做。
遗憾的是,Android根本没有公开这个功能。我想可能有可能自己发送远程端口协商命令,但我很确定这将需要重新实现RFCOMM,这需要访问我们没有的L2CAP。
远程端口协商命令详细信息见第31页。注意"所有参数都有默认值,如果不进行协商,则选择默认值。"
因此,不可能在Android上设置所需的波特率。它将使用蓝牙适配器的默认波特率(可能是9600)。
还需要注意的是Windows 不支持设置蓝牙适配器的波特率
大概是一些蓝牙到串行转换器连接到传统设备?如果是这样,你应该能够编程它一次,总是使用一个特定的比特率。那么蓝牙客户端就不需要设置比特率了…