轻松实现ble设备与pc端应用通讯-推荐一个BLE转串口的神器ble-serial
一. 前言
我们有需求希望基于现有的ble设备与上位机通讯,又不想去开发上位机驱动,和修改下位机程序。ble-serial就是一个BLE转串口的神器,将ble的write-without-response和notify透转为串口的收发,这样上位机就可以直接基于串口的ble通讯了。本文就来分享ble-serial的使用。设备端使用N32WB031开发板,基于官方的demoN32WB03x_SDK_V2.0.0\projects\n32wb03x_EVAL\ble\rdtss。
二. 安装ble-serial
终端(管理员)中运行(假设已经安装好python环境)
pip install ble-serial
会在C:\Users\lhj\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\Scripts下生成程序(路径根据实际python安装路径可能不一样)
ble-com-setup.exe
ble-scan.exe
ble-serial.exe

需要将该目录添加到系统path环境变量,重启电脑生效。
此时终端管理员就可以运行对应的程序,比如
ble-com-setup -h

三.安装com0com
下载Setup_com0com_v3.0.0.0_W7_x64_signed.exe
https://sourceforge.net/projects/signed-drivers/files/com0com/v3.0/
安装,默认位于C:\Program Files (x86)\com0com
会自动安装.net依赖
之前我们公众号就分享过com0com这个虚拟串口工具。
四.创建ble-com映射
命令行运行ble-com-setup
com0com默认要位于C:\Program Files (x86)\com0com,如果不是可以通过
–install-path指定com0com的目录

设备管理器看到

但是串口下没有COM9

打开com0com
将COM9添加use Ports class

此时COM下可以看到COM9

五.搜寻设备
ble-scan

可以使用-h查看该命令的参数

深度搜寻
-d指定MAC比如
PS C:\Users\lhj> ble-scan -d B7:B2:00:0C:33:38Started general BLE scan1F:B2:21:E0:32:A4 (rssi=-92): None18:7A:9A:13:5B:D5 (rssi=-100): ESLinker2C:6F:9A:43:CF:11 (rssi=-92): None72:73:4E:95:F5:91 (rssi=-102): None1F:77:E6:AF:D7:99 (rssi=-102): None5E:FB:C8:A4:26:69 (rssi=-98): NoneB7:B2:00:0C:33:38 (rssi=-68): NS_RDTSS37:05:30:3B:67:6C (rssi=-92): None4C:EC:B9:2E:89:B2 (rssi=-94): None89:0E:85:13:89:07 (rssi=-92): None5A:F3:B0:3A:9B:41 (rssi=-102): None0E:5C:CB:68:3F:EA (rssi=-102): None0C:38:13:EC:01:31 (rssi=-104): None0B:64:1E:59:8C:4F (rssi=-104): NoneC4:7C:8D:64:C0:C6 (rssi=-96): Flower care26:70:17:03:E4:B2 (rssi=-100): None5E:60:BA:26:4F:99 (rssi=-102): None27:3C:AF:39:4D:EA (rssi=-102): NoneFinished general BLE scanStarted deep scan of B7:B2:00:0C:33:38Found device B7:B2:00:0C:33:38: NS_RDTSS (out of 1)SERVICE 00001800-0000-1000-8000-00805f9b34fb (Handle: 1): Generic Access ProfileCHARACTERISTIC 00002a00-0000-1000-8000-00805f9b34fb (Handle: 2): Device Name ['write', 'read']CHARACTERISTIC 00002a01-0000-1000-8000-00805f9b34fb (Handle: 4): Appearance ['read']SERVICE 00001801-0000-1000-8000-00805f9b34fb (Handle: 6): Generic Attribute ProfileCHARACTERISTIC 00002a05-0000-1000-8000-00805f9b34fb (Handle: 7): Service Changed ['indicate']DESCRIPTOR 00002902-0000-1000-8000-00805f9b34fb (Handle: 9): Client Characteristic ConfigurationCHARACTERISTIC 00002b29-0000-1000-8000-00805f9b34fb (Handle: 10): Client Supported Features ['write', 'read']CHARACTERISTIC 00002b2a-0000-1000-8000-00805f9b34fb (Handle: 12): Database Hash ['read']SERVICE 0000180a-0000-1000-8000-00805f9b34fb (Handle: 14): Device InformationCHARACTERISTIC 00002a29-0000-1000-8000-00805f9b34fb (Handle: 15): Manufacturer Name String ['read']CHARACTERISTIC 00002a24-0000-1000-8000-00805f9b34fb (Handle: 17): Model Number String ['read']CHARACTERISTIC 00002a25-0000-1000-8000-00805f9b34fb (Handle: 19): Serial Number String ['read']CHARACTERISTIC 00002a27-0000-1000-8000-00805f9b34fb (Handle: 21): Hardware Revision String ['read']CHARACTERISTIC 00002a26-0000-1000-8000-00805f9b34fb (Handle: 23): Firmware Revision String ['read']CHARACTERISTIC 00002a28-0000-1000-8000-00805f9b34fb (Handle: 25): Software Revision String ['read']CHARACTERISTIC 00002a23-0000-1000-8000-00805f9b34fb (Handle: 27): System ID ['read']CHARACTERISTIC 00002a2a-0000-1000-8000-00805f9b34fb (Handle: 29): IEEE 11073-20601 Regulatory Cert. Data List ['read']CHARACTERISTIC 00002a50-0000-1000-8000-00805f9b34fb (Handle: 31): PnP ID ['read']SERVICE 00002760-08c2-11e1-9073-0e8ac72e1001 (Handle: 33): time (minute)CHARACTERISTIC 00002760-08c2-11e1-9073-0e8ac72e0001 (Handle: 34): time (minute) ['write-without-response']DESCRIPTOR 00002901-0000-1000-8000-00805f9b34fb (Handle: 36): Characteristic User DescriptionCHARACTERISTIC 00002760-08c2-11e1-9073-0e8ac72e0002 (Handle: 37): time (minute) ['notify']DESCRIPTOR 00002902-0000-1000-8000-00805f9b34fb (Handle: 39): Client Characteristic ConfigurationCompleted deep scan of B7:B2:00:0C:33:38PS C:\Users\lhj>
六.连接设备
使用ble-serial命令
-h可以查看帮助

-d指定mac地址连接指定设备
ble-serial -d B7:B2:00:0C:33:38
默认会查询以下属性
No characteristic in builtin write-without-response list ['0000ff01-0000-1000-8000-00805f9b34fb', '0000ff02-0000-1000-8000-00805f9b34fb', '0000ffe1-0000-1000-8000-00805f9b34fb', '0000fff1-0000-1000-8000-00805f9b34fb', '0000fff2-0000-1000-8000-00805f9b34fb', '6e400002-b5a3-f393-e0a9-e50e24dcca9e', '6e400003-b5a3-f393-e0a9-e50e24dcca9e'] found!
如果找不到则需要手动
-w指定 写对应的UUID
-r指定 读对应的UUID
如果只有读则可指定–permit ro
ble-serial -d B7:B2:00:0C:33:38
前面看到
CHARACTERISTIC 00002a50-0000-1000-8000-00805f9b34fb (Handle: 31): PnP ID ['read']SERVICE 00002760-08c2-11e1-9073-0e8ac72e1001 (Handle: 33): time (minute)CHARACTERISTIC 00002760-08c2-11e1-9073-0e8ac72e0001 (Handle: 34): time (minute) ['write-without-response']DESCRIPTOR 00002901-0000-1000-8000-00805f9b34fb (Handle: 36): Characteristic User DescriptionCHARACTERISTIC 00002760-08c2-11e1-9073-0e8ac72e0002 (Handle: 37): time (minute) ['notify']DESCRIPTOR 00002902-0000-1000-8000-00805f9b34fb (Handle: 39): Client Characteristic Configuration
所以这里-r -w指定读写UUID
ble-serial -d B7:B2:00:0C:33:38 -r 00002760-08c2-11e1-9073-0e8ac72e0002-w 00002760-08c2-11e1-9073-0e8ac72e0001

七.记录日志
ble-serial的-l选项指定日志文件,-b选项指定二进制存储
logging options:
-l FILENAME, –log FILENAME
Enable optional logging of all bluetooth traffic to file (default: None)
-b, –binary Log data as raw binary, disable transformation to hex. Works only in combination with -l (default: False)
ble-serial -d B7:B2:00:0C:33:38 -r 00002760-08c2-11e1-9073-0e8ac72e0002-w 00002760-08c2-11e1-9073-0e8ac72e0001-l log.bin -b
八.读写测试
此时就可以通过COM9进行读写
相应的会转到BLE对应的UUID进行读写。

查看日志文件log.bin内容如下

九.总结
基于ble-serial和com0com可以方便的将ble映射为串口,这样上位机可以直接基于串口与ble设备通讯,无需设备端和pc端驱动修改。这样就可以快速的实现ble设备与pc端应用的通讯。
夜雨聆风