This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

蓝牙设备断开连接后怎样恢复连接

Other Parts Discussed in Thread: CC2540

我使用的是CC2540设备,应用情况是这样,有个用电池供电温度传感器挂在某个房间里面,想达到的目的是随时可以用手机连接它读取数据。

可是实际上我用手机连接上去,这样两个设备就建立了连接,手机可以读到传感器的信息;可是如果手机被拿走,这样蓝牙连接就断开了,当手机再回到蓝牙范围以内,也不能再恢复连接。

我想是因为处在连接状态时,两个设备按照一定的时间间隔来交换数据包来保证时隙的同步,使双方的下一次收发时间可以保持一致;而断开连接之后,双方时隙没办法保持一致,所以就算再回到连接范围,也无法再连接上来了。请问是不是这样?

目前我想了两个办法来解决:
1:使温度传感器检测到连接断开后,就切换成GAPROLE_ADVERTISING状态,这样当手机回到范围之后,就可以搜索到设备,从而可以连接上去,可是长期处于GAPROLE_ADVERTISING应该会增大很多功耗,对电池压力很大。

2:在温度传感器上面设一个按钮,用来激活设备进入GAPROLE_ADVERTISING状态,当手机回来之后,就按一下按钮进入GAPROLE_ADVERTISING状态,这样麻烦的地方是每次需要按一下,也不好用

请问有没有什么办法可以解决这样的问题?

  • 请问有人可以回答我吗?

    还有设备是间隙广播的,那每次广播耗时多久呢

  • Hi Mahone,

    一般这种情况下用的是低频率的广播, 通过设置广播的interval来实现.

    比如说:

    #define HID_LOW_ADV_INT_MIN 1600
    #define HID_LOW_ADV_INT_MAX 1600

    uint8 param;

    VOID GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, HID_LOW_ADV_INT_MIN );
    VOID GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, HID_LOW_ADV_INT_MAX );
    VOID GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, HID_LOW_ADV_TIMEOUT );

    // Setup adverstising filter policy first
    param = GAP_FILTER_POLICY_WHITE;
    VOID GAPRole_SetParameter( GAPROLE_ADV_FILTER_POLICY, sizeof( uint8 ), &param );

    VOID GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &param );

  • 你好。我想用从机实现一个广播20秒停下的功能,可是我实验了GAPROLE_ADVERT_OFF_TIME,TGAP_LIM_ADV_TIMEOUT都没有作用

    #define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITED

    GAP_SetParamValue(TGAP_LIM_ADV_TIMEOUT, 20);

     uint16 gapRole_AdvertOffTime = 20000; 

    GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );

    从机都是一直在广播,没有停止

    另外我想问下:

    GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
    GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
    GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
    GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );

    这四个参数有什么作用和我之前的设置有关系么?