乐于分享
好东西不私藏

轻松实现ble设备与pc端应用通讯-推荐一个BLE转串口的神器ble-serial

轻松实现ble设备与pc端应用通讯-推荐一个BLE转串口的神器ble-serial

一. 前言

我们有需求希望基于现有的ble设备与上位机通讯,又不想去开发上位机驱动,和修改下位机程序。ble-serial就是一个BLE转串口的神器,将blewrite-without-responsenotify透转为串口的收发,这样上位机就可以直接基于串口的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比如

ble-scan -d B7:B2:00:0C:33:38
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 Profile     CHARACTERISTIC 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 Profile     CHARACTERISTIC 00002a05-0000-1000-8000-00805f9b34fb (Handle: 7): Service Changed ['indicate']         DESCRIPTOR 00002902-0000-1000-8000-00805f9b34fb (Handle: 9): Client Characteristic Configuration     CHARACTERISTIC 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 Information     CHARACTERISTIC 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 Description     CHARACTERISTIC 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-serialcom0com可以方便的将ble映射为串口,这样上位机可以直接基于串口与ble设备通讯,无需设备端和pc端驱动修改。这样就可以快速的实现ble设备与pc端应用的通讯。