基于ble-serial蓝牙虚拟串口实现蓝牙485
目前测试CSM92F25-HR485跟CH9140都可以实现。

在Linux、MAC、Windows中均可以使用ble-serial来实现,其中windows需要通过com2com来生成虚拟串口。
见:https://github.com/Jakeler/ble-serial?tab=readme-ov-file#usage
CH9140在Windows下有厂商提供的软件,可以直接使用软件完成蓝牙虚拟串口。同时,CH9140虽然是主从一体,但主机模式仅能跟该厂商的芯片建立连接,因此,当通过linux/windows/macOS/手机等跟它连接时,默认就工作在从角色。但缺点就是CH9140不支持AT命令。
这里主要记录一下上海芯苗CSM92F25-HR485的调试。
默认的服务与特征如下:
Service Name:透传控制
Service UUID:0xFFF0
**CharacteristicName/CharacteristicUUID/Properties**
上传信息/FFF1/Notify
下发信息/FFF2/Write without response
AT指令操作/FFF3/Notify,Read,Write without response
蓝牙模块不但可以接收UART 接口发送过来的AT 指令,也支持通过BLE 信道发送过来的AT 指令。通过“AT指令操作”特征值,可进行 AT指令的交互。文档中大部分指令支持通过该特征值传输,少部分指令不支持,具体请查看“AT 指令集”。文档可向淘宝客服索取。
我买到的模块出厂设置:
工作方式:主从一体模式下;串口波特率115200;
因此需要对这两个进行设置。
串口设置相关:
AT+BAUD(查询当前波特率,响应BAUD:)
AT+BAUD:(设置波特率,响应OK)
Param对应值如下:
Param: (0~4)
0--115200
1-- 57600
2-- 38400
3-- 19200
4-- 9600
默认值:0
工作模式设置相关:
AT+ROLE(查询当前角色,响应ROLE:)
AT+ROLE:(设置角色,响应OK)
Param对应值如下:
Param:(0~2)
0--slave,从角色,支持单连接
1--master,主角色,支持多连接,最多为8个从机连接。
2--slave and master,主从一体,支持2主8从。
其中串口设置支持UART接口与BLE信道,工作模式只支持UART接口。
因此需要通过USB转485通过PC串口进行工作模式配置,将USB转485的AB接口与模块的AB接口互连,发送AT+ROLE:<0>rn即可指定为从角色
windows端可以使用sscom进行操作,比较方便。
sscom5.13.1.zip
由于BLE信道下不支持AT+ROLE指令,所以如果想查询当前的工作模式可以使用AT+GETSTAT查看,通过输出判断:
Param在从角色模式下,连接状态定义为:
0--未连接状态
1--连接状态
Param在主角色模式下,由8个连接状态组成,定义与从角色模式相同,格式为:Sxxxxxxxx。
Param在主从一体角色模式下,由2个主机连接状态和8个从机连接状态组成,定义与从角色模式相同,格式为MxxSxxxxxxxx。
如果暂时无法通过UART接口指定角色,可临时指定多连接时UART发送数据透传handle来解决:
AT+TXHANDLE:,<00>
M/S:M表示向主机发送数据,S表示向从机发送数据。handle:对应连接handle
完成模块设置之后,即可通过ble-serial创建虚拟串口直接使用了。
附加:
AT+NAME,修改蓝牙名称
AT+POWER:,修改发射功率
Param: (0~4)
0-- -20db
1-- -5db
2-- -2db
3-- 0db
4-- 5db
默认值:0db
AT+MAC:,修改MAC地址,格式为C8B21E561122(高位在前,低位在后)
AT+VER,查询版本号
AT+RESTORE,恢复出厂设置
AT+OTA,进入OTA模式,发送进入 OTA 指令后,模块会自动复位进入OTA BootLoader,蓝牙广播名称会变成CST92F25-OTA,此时可通过nrf connect 手机APP 连接上模块进行模块应用程序固件升级。
最后,感谢上海芯苗技术人员的支持
