原创博客,欢迎光临
嵌入式是本职,AI 是兴趣,其它是无奈

某些问题,是会让人抓狂的:手机 APP 突然扫描不到蓝牙设备

#Telink BLE Mesh 应用开发

问题

基于 Telink mesh SDK 开发,之前一切安好,手机 APP 扫描设备并配网,一直都好好的,修改代码重新烧录,手机 APP 突然扫描不到设备。
好吧,大概率是修改代码造成的,把代码改回去看看:什么?不行? 这下,开始怀疑人生……

于是连接上开发板的串口,看看能不能从设备端的 log 输出中找到原因。设备上电,日志输出如下:

[USER]:(USER)Start user init...
[ERR]:tx_access:key array index not existed,nk:2,ak:2
[ERR]:not found app key
[ERR]:tx upper layer:not found device or app key
[ERR]:tx upper layer failed: 1(see tx_errno_e)
[ERR]:tx_access:key array index not existed,nk:2,ak:2
[ERR]:not found app key
[ERR]:tx upper layer:not found device or app key
[ERR]:tx upper layer failed: 1(see tx_errno_e)

有线索,之前正常时,只有第一行日志,没有后面的 ERR。ERR 中也说得清楚:not found device or app key。但是为什么会这样,还是不知道。

过程

实在没辙,只能用官网的 SDK 中 demo 再次实验,不做任何修改,看看有没有问题。
什么?还是不行?
好吧,我都不自己编译了,直接用 SDK 中提供的编译好的程序烧录,我就不信邪了。
当看到同样的结果,心拔凉拔凉的……
这时,已经怀疑人生了……

这时,你会想什么。
官方 demo 问题?之前官网的 SDK demo,是实验过的,没有问题的,所以这个不用怀疑。
硬件问题?嗯,很有可能,这时只能让硬件来暂时背锅了。可是目前只有一块开发板,如果有多个设备,倒是可以一试。
没招了,只能喝杯水,上个厕所,暂时逃避一下。

不能罢工不干了吧。
回到座位,开始回想自己从上次设备可以正常工作,到现在为止,自己到底做了些什么。
之前是一个 ADC 采样通道,现在是两个:于是去掉新增的连线试试,不行。
外接的各种连线都去掉,只保留烧录器连线和串口连线,不行。 单独用适配器给设备供电,不使用 USB hub,不用电脑供电,不行。

不能罢工不干了吧。
开始逛官方论坛,在论坛提问,长时间没有人回复……
开始再次从前往后看官方文档(因为之前自己是边看文档,边实验成功的),看看是不是有什么地方遗漏了。

看了很久很久(其实也就 1 个小时左右)。
Kuang!上天垂怜,文档中的一段话提醒了我:

QA(常见问答)  
Q3. 剔除、删除或者踢出节点的时候,可以用组号作为目的地址吗?
设备剔除出网络,是必须一个一个去kick out的。 原因是 kick out 发送的是 "NODE_RESET" 命令,这个命令属于 configure model,需要使用 device key加解密,而每个节点的device key是不一样的,所以没办法使用 组播 的方式发送命令。除非客户自定义 vendor 命令去做kick out动作。

剔除网络、RESET 命令,device key,这几个词,像黑夜中的明灯,让我突然有了希望!
为什么:
因为在问题出现之前,我确实有把设备剔除网络的操作;
因为我新增 ADC 采样通道,连线时,因为开发板上没有多余的 3.3v 电压,我自作聪明,用示波器量了开发板上各可用空管脚的电压,发现 RST 管脚是 3.3v,就想临时用一下,把 RST 管脚所为 ADC 的参考电压;
因为设备端串口日志中 ERR 有关键字:device or app key;
于是,猜测原因:
自己在 APP 中把设备剔除网络时,因为 RST 管脚是连接到外设的,导致 “NODE_RESET” 命令没有真正执行成功,APP 上显示删除了,没有设备了,但是设备上还保留有配网的相关信息,从而导致前面的问题!
那怎么解决呢?—— 完全擦除 Flash,重新烧录!

解决

然后,迫不及待,打开烧录工具,连接上设备,先 “Erase”,再 download。设备上电,一切恢复正常! 喜极而泣……

反思

  • GPIO 管脚各司其职,不要乱用(不过借用 RTS 管脚确实解决了我暂时没有 3.3v 资源可用的问题,调通了两路 ADC 同时采样的程序)
  • 遇到这种几乎让人抓狂的问题,可以怀疑人生,但不要放弃:问题就在那里,只是暂时没有找到罢了。
  • 做为一个程序员,有问题真是家常便饭,修炼的不只是代码,还有心态,什么时候能做到云淡风轻了,说明入行了。
  • 完全没有思路,没有招的时候,离开座位,抽烟,喝茶,上厕所……,甚至下班回去睡一觉,说不定第二天就有思路(过来人,这招屡试不爽!)。
  • 具体到这个问题,官方 SDK 也有问题:发送 “NODE_RESET” 命令,因为 RST 管脚的问题,没有执行成功,APP 端为什么会显示已删除。
赞(1)
未经允许不得转载:程序员大狐狸 » 某些问题,是会让人抓狂的:手机 APP 突然扫描不到蓝牙设备

评论 1

  1. #1

    程序员开发的过程,就是一个不断打怪升级的过程 :)

    大狐狸1个月前 (10-11)回复

登录

找回密码

注册