如何让每次连接都需要输入密码

修改了从机配对设置后,手机蓝牙连接的时候需要配对密码,但是用蓝牙调试助手就能直接连接上,想让调试助手连接时也需要密码,需要怎么操作?


        uint32_t passkey = 123456; // passkey "000000"

        uint8_t  pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;

        uint8_t  mitm = TRUE;

        uint8_t  bonding = TRUE;

        uint8_t  ioCap = GAPBOND_IO_CAP_KEYBOARD_ONLY;

        GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

        GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(uint8_t), &pairMode);

        GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(uint8_t), &mitm);

        GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

        GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(uint8_t), &bonding);


如果想要调试助手连接也输入pin码,那么可以这样修改:uint8_t  pairMode = GAPBOND_PAIRING_MODE_INITIATE;

配对绑定后再次连接是不需要pin码的,如果想要每次都输入PIN码,可以把这个开启绑定屏蔽: 

GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(uint8_t), &bonding);


好的谢谢指导,修改设置后发现了新的问题:

1、既然可以直接连接不进行配对,设置配对是不是完全只是出于安全考虑?配对与否对能否正常连接没有影响。

3、两个蓝牙模块配对,从机启动配对,主机没有密码也能完成配对,密码是没有起到作用吗?


是的,配对是可选项,两个蓝牙配对需要将代码进行修改后才起到作用,如果有需要用到此功能的话,可以发送邮件至hy@wch.cn,给你发送修改后的代码。


设置pairMode = GAPBOND_PAIRING_MODE_INITIATE,如果手机连接蓝牙,不输入passkey配对的话会在一段时间内断开。但是两个蓝牙模块就能直接配对成功,我想让两个蓝牙也像手机一样,passkey不正确就不能配对成功然后自动断开,可不可以。

image.png


可以,但是需要如下配置,将一端配置为:

 uint8_t  ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

 GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

另一个设置为:

 uint8_t  ioCap = GAPBOND_IO_CAP_KEYBOARD_ONLY;

 GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);

这样配置之后,配对会失败,在主机打印Pairing fail处调用GAPRole_TerminateLink主动断开连接就可以了。



十分感谢!但是又有了新的问题:第一次匹配绑定成功,能进行正常的数据交互,但是断开连接后再次进行连接,就不能进行数据收发,这是为什么。

image.png


Write Error : 1应该是req.handle = centralCharHdl;传错导致的,

1.断开连接后centralCharHdl会清0,centralCharHdl值应该是0x23,是在调用GATT_DiscPrimaryServiceByUUID后获取的,断开连接再连接可能这个函数没有调用成功,可以写个任务,调用失败后1s再次调用,一直到调用成功,

2.也可以把0x23handle 记下来,传入参数的时候直接写死,如req.handle = 0x23


 uint32_t passkey = 666666; // passkey "000000"

        u8  pairMode = GAPBOND_PAIRING_MODE_INITIATE;

        u8  mitm = TRUE;

        u8  bonding = FALSE;

        u8  ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

        GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

        GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(u8), &pairMode);

        GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(u8), &mitm);

        GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(u8), &ioCap);

        GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(u8), &bonding);

从设备这样设置,为什么密码输入错误还能正常连接,读写数据



 uint32_t passkey = 666666; // passkey "000000"

        u8  pairMode = GAPBOND_PAIRING_MODE_INITIATE;

        u8  mitm = TRUE;

        u8  bonding = FALSE;

        u8  ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;

        GAPBondMgr_SetParameter(GAPBOND_PERI_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);

        GAPBondMgr_SetParameter(GAPBOND_PERI_PAIRING_MODE, sizeof(u8), &pairMode);

        GAPBondMgr_SetParameter(GAPBOND_PERI_MITM_PROTECTION, sizeof(u8), &mitm);

        GAPBondMgr_SetParameter(GAPBOND_PERI_IO_CAPABILITIES, sizeof(u8), &ioCap);

        GAPBondMgr_SetParameter(GAPBOND_PERI_BONDING_ENABLED, sizeof(u8), &bonding);

从设备这样设置,为什么密码输入错误还能正常连接,读写数据



设置的是从设备


可以参考这篇博客,加上回调函数,密码错误则直接调用断开函数。

BLE配对与绑定二(连接) - SweetTea_lllpc - 博客园


感谢大佬,解决了


只有登录才能回复,可以选择微信账号登录