这令我非常沮丧,因为我已经尝试了几个星期,甚至连互联网都没有线索。
我正在研究一个在不同农业硬件上读/写蓝牙串行数据的项目。
这些硬件中的大多数都是旧的,并且不能改变其SPP的波特率。
我使用android蓝牙聊天作为读/写的基础,我只更改了UUID以允许连接到我拥有的设备
我设法以19,200的糟糕速度从标签阅读器中读取,并且格式很好
然而,我现在卡在波特率为9,600的音阶上,并在我的应用中显示有趣的角色,甚至没有接近应该来自音阶的格式
此项目之前已在旧的Windows Mobile上完成,并且可以在其API中更改波特率
有没有办法在Android中执行此操作,还是我咆哮错误的树?
答案 0 :(得分:9)
编辑:修正了一些错误。
互联网上没有关于此事的好消息 - 很多都是错误的 - 不信任任何人!
特别是,这两件事不是真的:
以下是我发现的内容:
使用RFCOMM按照SPP中的说明制作蓝牙串行连接。 RFCOMM是一种在L2CAP上运行的连接,允许以帧为单位发送串行数据和控制参数。它主要基于一种名为TS 07.10的古老标准。 SPP是蓝牙配置文件。
此成帧还允许您发送带外数据,例如控制串行信号(DTR,CTS等)和以设置波特率。
来自SPP规范:
DevA可以通过远程端口协商通知DevB RS232端口设置 命令,直接在DLC建立之前。如果RFCOMM适配层的API公开这些设置(例如波特率,奇偶校验),则需要这样做。
可悲的是,Android根本没有公开这个功能。我想有可能自己发送远程端口协商命令,但我很确定需要重新实现RFCOMM,这需要访问我们没有的L2CAP。
Remote Port Negotiation命令详细说明here第31页。注意“所有参数都分配了默认值,如果未执行协商,则选择默认值。” / p>
因此,无法在Android上根据需要设置波特率。它将使用蓝牙适配器使用的默认波特率(可能是9600)。
另请注意,Windows 支持设置蓝牙适配器的波特率。
答案 1 :(得分:2)
大概有些蓝牙到串口转换器连接到传统设备?如果是这样,您应该能够对其进行一次编程以始终使用特定的比特率。然后蓝牙客户端就不需要设置比特率......