【已解决】配网后超过一定距离范围断开连接问题
TuyaOS版本:TuyaOS-3.9.0
组件开发包:tuyaos-subdev-bt_3.9.0_nrf52832_ble_ble-common_1.0.3
问题:在蓝牙设备配网成功后,如果蓝牙设备之间超过一定的距离范围会导致断开连接,那我如何区分是超过一定距离范围导致的断开连接还是其它原因比如断电导致的断开连接呢?
TuyaOS版本:TuyaOS-3.9.0
组件开发包:tuyaos-subdev-bt_3.9.0_nrf52832_ble_ble-common_1.0.3
问题:在蓝牙设备配网成功后,如果蓝牙设备之间超过一定的距离范围会导致断开连接,那我如何区分是超过一定距离范围导致的断开连接还是其它原因比如断电导致的断开连接呢?
可以通过断开连接的原因来区分断开连接的类型,断开连接的原因在SDK中有打印:
Code: Select all
TAL_PR_INFO("disconnect: 0x%02x", p_event->ble_event.disconnect.reason);
不同原因数值的含义详见 ble_hci.h
但是,如果两种情况下断开的原因相同,则无法通过蓝牙协议的角度进行区分。
逻辑的院子 2024年 Jul 15日 19:54可以通过断开连接的原因来区分断开连接的类型,断开连接的原因在SDK中有打印:
Code: Select all
TAL_PR_INFO("disconnect: 0x%02x", p_event->ble_event.disconnect.reason);
不同原因数值的含义详见 ble_hci.h
但是,如果两种情况下断开的原因相同,则无法通过蓝牙协议的角度进行区分。
好的,谢谢。我试了一下,打印出来的值是0x08,0x08在ble_hci.h里对应的宏是:“#define BLE_HCI_CONNECTION_TIMEOUT 0x08 /**< Connection Timeout. */”
对,0x08是最常见的断开类型,因为蓝牙通信的距离是有限的,超出距离后无法通信导致的断开就是0x08(连接超时)。
好的,感谢
不好意思,我想再问一下,在已经连接上,而且两个连接的设备之间距离很近,都没有超过一米,但偶尔会出现连接断开的现象(断开连接的值也是0x08,连接超时),对于这种情况,会是什么原因导致的呢?
在蓝牙设备开发过程中,尤其是前期调试过程中,08原因的断开确实是很常见的,可能的原因比较多,常见的有以下几种:
原因1:蓝牙硬件设备的射频性能差(即天线没调好);
原因2:周围2.4GHz频段的射频环境差(干扰设备多,例如WiFi、其他蓝牙设备);
原因3:手机本身的射频性能差;
08断开的本质原因就是在连接超时的时间范围内(SDK默认是conn_sup_timeout=6s)没有发生至少一次连接事件,连接事件即连接双方在规定的时间范围内(SDK默认是max_conn_interval=15ms)进行一次数据收发(如果没有实际的数据则发送空包),所以连接事件没有发生的可能原因涉及到发射端、传输路径、接收端。
由于数据收发是双向的,所以发射端和接收端是轮换的。
先说其中的一种情况,即:设备作为发射端,手机作为接收端。此时问题可能发生在:
反过来也是一样的。
对于上述三种情况,可使用的排查手段如下:
核心思想就是控制变量法,先根据已有的现象推测最可能的原因,然后通过对比测试确认是否该原因。
逻辑的院子 2024年 Jul 19日 11:24在蓝牙设备开发过程中,尤其是前期调试过程中,08原因的断开确实是很常见的,可能的原因比较多,常见的有以下几种:
原因1:蓝牙硬件设备的射频性能差(即天线没调好);
原因2:周围2.4GHz频段的射频环境差(干扰设备多,例如WiFi、其他蓝牙设备);
原因3:手机本身的射频性能差;08断开的本质原因就是在连接超时的时间范围内(SDK默认是conn_sup_timeout=6s)没有发生至少一次连接事件,连接事件即连接双方在规定的时间范围内(SDK默认是max_conn_interval=15ms)进行一次数据收发(如果没有实际的数据则发送空包),所以连接事件没有发生的可能原因涉及到发射端、传输路径、接收端。
由于数据收发是双向的,所以发射端和接收端是轮换的。先说其中的一种情况,即:设备作为发射端,手机作为接收端。此时问题可能发生在:
- 设备端,即上述的原因1;
- 传输过程中,即上述的原因2;
- 手机端,即上述的原因3;
反过来也是一样的。
对于上述三种情况,可使用的排查手段如下:
- 换个蓝牙硬件(例如使用芯片原厂的开发板)进行对比测试,如果怀疑是设备软件问题,则直接使用原厂的SDK进行对比测试;
- 换个环境进行对比测试;
- 换个手机进行对比测试,如果怀疑是手机软件问题,则换个App(例如nRF Connect)进行对比测试;
核心思想就是控制变量法,先根据已有的现象推测最可能的原因,然后通过对比测试确认是否该原因。
好的,谢谢。