硬件方面有两块板子,都通过USB转TTL芯片(CH340)以虚拟串口的方式连接电脑,两台设备外观一致,固件版本均为silent-smart V1.3.0 / V1.4.0,基于STM32WB05KZV6TR SoC。
基本信息确认
上电后模块默认波特率为115200bps,串口直接回显"WS8623 Ready",表示通信链路已通。两条指令就能获取模块的核心身份信息:
AT+BMAC? +BMAC="04:f9:c7:2c:51:d7" AT+GMR? +GMR="WS8623","silent-smart","V1.3.0","V1.4.0"
两个模块各自有唯一的MAC地址,固件独立烧录,互不影响。以下是完整的基础参数清单:
模块A (/dev/ttyACM0): BLE MAC: 04:f9:c7:2c:51:d7 设备名称: WS8623 角色: 0 (Slave) 波特率: 115200 广播间隔: 1600 (1.6秒) PHY模式: 1Mbps 发射功率: +8dBm 配对PIN码: 1234 绑定使能: OFF 连接参数: 20,20,0,400 数据延迟: 0ms 模块B (/dev/ttyACM1): BLE MAC: 2d:ad:07:30:ff:ed 设备名称: WS8623 角色: 0 (Slave) 波特率: 115200 广播间隔: 1600 (1.6秒) PHY模式: 1Mbps 发射功率: +8dBm 配对PIN码: 1234 绑定使能: OFF 连接参数: 20,20,0,400 数据延迟: 0ms
两模块出厂参数完全一致,除MAC外没有区别。
AT指令体系梳理
AT指令是这块模块的交互核心。从官方帮助表看,支持的命令大致分为三类:DO类(执行动作)、GET类(查询状态)和SET类(修改配置)。但实际使用时有一个非常关键的细节——所有GET操作都必须加问号后缀。如果只发命令名不加问号,模块会统一返回+ERROR=103。
比如正确用法是:
AT+BNAME? +BNAME="WS8623"
直接发AT+BNAME则得到错误响应。这一行为和其他很多BLE模块不同,初次接触容易踩坑。下面是完整测试结果。
GET类命令验证
以下全部为带问号后缀的查询指令,均正常返回当前配置值:
AT+GMR? => +GMR="WS8623","silent-smart","V1.3.0","V1.4.0" AT+BMAC? => +BMAC="04:f9:c7:2c:51:d7" AT+BNAME? => +BNAME="WS8623" AT+BROLE? => +BROLE=0 AT+UART? => +UART=115200 AT+BADVINTV? => +BADVINTV=1600 AT+BPHY? => +BPHY=1 AT+RFPOWER? => +RFPOWER=24 AT+BPIN? => +BPIN=1234 AT+BBONDEN? => +BBONDEN=0 AT+BSCANINTV? => +BSCANINTV=400,400 AT+BCONNPARA? => +BCONNPARA=20,20,0,400 AT+DATDLY? => +DATDLY=0
每条指令响应都在1秒以内,串口无丢包、无乱码,通信质量稳定。
SET类命令验证
设置类指令覆盖面较广,逐一实测下来大部分都能正常工作:
// 修改设备名称,注意必须用双引号包裹字符串 AT+BNAME="MyTestModule" +OK AT+BNAME? +BNAME="MyTestModule" // 切换主从角色,0=Slave 1=Master AT+BROLE=1 // 设为主机 +OK AT+BROLE=0 // 恢复从机 +OK // 发射功率调节,范围0~8共9档 AT+RFPOWER=0 // -24dBm最低 +OK AT+RFPOWER? +RFPOWER=0 AT+RFPOWER=4 // 0dBm中间值 +OK AT+RFPOWER? +RFPOWER=4 AT+RFPOWER=8 // +8dBm最高 +OK AT+RFPOWER? +RFPOWER=8 // PHY动态切换 AT+BPHY=2 // 切换至2Mbps +OK AT+BPHY? +BPHY=2 AT+BPHY=1 // 切回1Mbps +OK AT+BPHY? +BPHY=1 // 配对PIN码设置 AT+BPIN=123456 +OK AT+BPIN? +BPIN=123456 // 绑定功能开关 AT+BBONDEN=1 +OK AT+BBONDEN? +BBONDEN=1 AT+BBONDEN=0 +OK AT+BBONDEN? +BBONDEN=0 // 数据延迟控制 AT+DATDLY=0 +OK AT+DATDLY? +DATDLY=0
有两个小异常值得记录。一个是设置名字时如果省略了双引号,比如直接写AT+BNAME=MyTestModule,模块会报+ERROR=2参数错误。另一个是数据延迟设为100毫秒时同样报错,说明这个参数可能有特定的合法取值集合,固件内部做了严格限制。
DO类命令验证
// 重启模块,回显"WS8623 Ready"表示启动完成 AT+RST +OK // 恢复出厂设置并重启 AT+RESTORE +OK WS8623 Ready // 断开已有连接 AT+BDISCON +OK
这两条指令都能触发模块软复位,复位后各参数恢复到出厂默认值,串口重新输出Ready标志,流程干净利落。
错误码对照表
测试过程中碰到几个常见错误,整理如下方便排查:
+ERROR=100 命令未实现或不支持当前状态 +ERROR=2 参数错误或格式不对 +ERROR=3 参数解析失败 +ERROR=103 命令格式不正确(典型:GET没加问号) +ERROR=104 参数不完整 +ERROR=9 状态不允许(如未连接时进入透传)
BLE连接能力测试
这是本轮测试中最值得关注也最失望的部分。按照规格书描述,WS8623应该支持主从一体模式,这意味着同一个模块既能作为从机等待连接,也能主动去连接别的设备。但我花了相当多的时间去摸索AT+CONNECT相关的指令,结果并不理想。
我尝试了多种连接方式,包括通过MAC地址连接、通过设备名称连接、各种大小写和分隔符组合:
AT+CONNECT="04:f9:c7:2c:51:d7" +ERROR=100 AT+CONNECT="WS8623" +ERROR=100 AT+CONNECT=04f9c72c51d7 +ERROR=100 AT+CONNECT=? +ERROR=100
无论怎么调整格式,始终返回+ERROR=100。我也试过将模块角色切换到Master后再试,以及使用AT+AUTOCONN、AT+SCAN、AT+DISCOVER、AT+SEARCH等可能用于主动发现的指令,全部无一例外地返回同样的错误码。这说明这些指令虽然在帮助表中有所提及,但在当前V1.4.0版本的固件里并没有真正被实现。
关于数据透传,AT+BSEND指令在连接建立后才能正常工作。在没有连接的情况下发送该指令,模块回复+ERROR=9,也就是"操作不被允许"的状态。
最后,名称过滤功能和MAC过滤功能的设置也有奇怪的行为。按照帮助表中的描述应该可以设置AT+BFNAME=<name>来过滤扫描到的设备,但实测中无论什么格式都报参数错误。
综合来看,这块模块的BLE连接能力目前处于"半实现"状态。具体来说:
✅ 从机被动广播 — 正常工作,可被手机或其他主机发现并连接
✅ 接收外部连接 — 理论上可行(需要Host端发起),但受限于无法主动测试
❌ 主动搜索其他设备 — 不可用,相关指令全部无效
❌ 主动发起连接 — 不可用,CONNECT指令返回错误
❌ 自动重连 — 不可用
⚠️ 数据透传 — 需要连接存在才能启用,实际效果待进一步验证
性能与功耗初步评估
除了指令层面的功能验证,我还简单看了一下几个关键参数的可调范围和变化:
| RFPOWER | 8(+8dBm) | 0~8 | 越低越省电但传输距离缩短 |
| BPHY | 1(1Mbps) | 1/2 | 2Mbps速率更快但功耗略高 |
| BADVINTV | 1600 | 可减小至32 | 广播越快越耗电,但也越容易被发现 |
| BSCANINTV | 400,400 | 可调整 | 主设备的扫描间隔参数 |
| BCONNPARA | 20,20,0,400 | 可调整 | 连接间隔、超时等 |
发射功率调到最低档时,模块依然能够保持基本的信号强度,这对于电池供电设备来说是合理的留白空间。广播间隔虽然默认1.6秒偏长(有些信标类产品会用更短的周期),但可以压缩到最小32,灵活性不错。
至于关断模式和深度休眠模式的具体电流消耗,我没有在实际电路中进行精确测量。官方标称数据分别为8nA@1.8V和0.8μA@1.8V,如果这些数据属实,在同类型BLE模组中属于相当优秀的水准。有条件的话可以用高精度电源分析仪做个定量测试。
总结
WS8623给我的整体印象是一款基础功能扎实、易用性不错的低功耗蓝牙模块。AT指令响应速度快,串口通信稳定,绝大多数配置项都能通过简单的文本命令修改生效,对于快速原型开发非常友好。功率、PHY、广播间隔等关键参数都有较大的调整空间,能够满足不同应用场景的需求。
主要短板在于BLE主模式的主动连接和扫描功能在当前固件中尚未真正可用。如果你在设计方案中不需要模块主动连接其他设备,这个问题对你没有影响;如果需要双向对等连接或Mesh组网能力,建议先向厂商确认固件升级计划,或者评估其他方案。
我要赚赏金
