0x01 . BlueNRG-1 BLE同时作为主、从设备的场景是如何实现的?

本文详细阐述了一个BLE设备如何同时作为中央设备和外设,与多个外设建立连接并进行特征通知的过程。首先,设备通过GAP_Init()API设置成主/从设备,然后配置Slave_A和Slave_B为外设。接着,主/从设备执行通用发现流程,连接到Slave_A和Slave_B。一旦连接建立,设备启用特征通知,并再次进入可发现模式,等待其他主设备的连接请求。主设备发现主/从设备后,也会与其建立连接并启用特征通知,从而实现双向通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 通过在 GAP_Init()API 上将角色设置为 GAP_PERIPHERAL_ROLE |GAP_CENTRAL_ROLE,将一个BLE 设备(称为“主/从设备”)配置为中央设备及外设。假设该设备也定义了相关的服务和特征。
  2. 通过在GAP_Init() API 上将角色设置为 GAP_PERIPHERAL_ROLE,将两个 BLE 设备(称为Slave_A、Slave_B)配置为外设。Slave_A 和 Slave_B 均作为“主/从设备”定义了相同的服务和特征。
  3. 通过在 GAP_Init()API 上将角色设置为 GAP_CENTRAL_ROLE,将一个 BLE 设备(称为主设备)配置为中央设备。
  4. Slave_A 和 Slave_B 设备均进入发现模式:
ret =aci_gap_set_discoverable(Advertising_Type=0x00,
 Advertising_Interval_Min=0x20, 
 Advertising_Interval_Max=0x100, 
 Own_Address_Type= 0x0; 
 Advertising_Filter_Policy= 0x00; 
 Local_Name_Length=0x05, 
 Local_Name=[0x08,0x74,0x65,0x73,0x74],
 Service_Uuid_length = 0; 
 Service_Uuid_length = NULL; 
 Slave_Conn_Interval_Min = 0x0006, 
 Slave_Conn_Interval_Max = 0x0008);
  1. 主/从设备执行发现流程,以便发现外设 Slave_A 和 Slave_B:
ret = aci_gap_start_gen_disc_proc (LE_Scan_Interval=0x10, 
 LE_Scan_Window=0x10, 
 Own_Address_Type = 0x0, 
 Filter_Duplicates = 0x0);

通过使用 hci_le_advertising_report_event()事件回调通知的广告报告事件发现这两个设备。

  1. 在发现两个设备后,主/从设备启动两个连接流程(作为中央设备),以便分别连接到 Slave_A 和Slave_B 设备:
ret= aci_gap_create_connection(LE_Scan_Interval=0x0010,
 LE_Scan_Window=0x0010
 Peer_Address_Type= ”Slave_A 地址类型”
 Peer_Address= ”Slave_A 地址,
 Own_Address_Type = 0x0; 
 Conn_Interval_Min=0x6c,
 Conn_Interval_Max=0x6c,
 Conn_Latency=0x00,
 Supervision_Timeout=0xc80,
 Minimum_CE_Length=0x000c,
 Maximum_CE_Length=0x000c);
ret= aci_gap_create_connection(LE_Scan_Interval=0x0010,
 LE_Scan_Window=0x0010,
 Peer_Address_Type= ”Slave_B 地址类型”,
 Peer_Address= ”Slave_B 地址”,
 Own_Address_Type = 0x0; 
 Conn_Interval_Min=0x6c, 
 Conn_Interval_Max=0x6c,
 Conn_Latency=0x00, 
 Supervision_Timeout=0xc80, 
 Minimum_CE_Length=0x000c, 
 Maximum_CE_Length=0x000c);

7.一旦连接,主/从设备使用 aci_gatt_write_char_desc()API 对二者启用特征通知。Slave_A 和Slave_B 设备使用aci_gatt_upd_char_val()API 启动特征通知。

8.在该阶段,主/从设备进入发现模式(作为外设):

ret =aci_gap_set_discoverable(Advertising_Type=0x00,
 Advertising_Interval_Min=0x20, 
 Advertising_Interval_Max=0x100, 
 Own_Address_Type= 0x0; 
 Advertising_Filter_Policy= 0x00; 
 Local_Name_Length=0x05, 
 Local_Name=[0x08,0x74,0x65,0x73,0x74],
 Service_Uuid_length = 0; 
 Service_Uuid_List = NULL; 
 Slave_Conn_Interval_Min = 0x0006, 
 Slave_Conn_Interval_Max = 0x0008);
  1. 一旦主/从设备进入发现模式,它还等待来自被配置为 GAP 中央设备的其他 BLE 设备(称为主设备)的
    连接请求。主设备启动发现流程,以便发现主/从设备:
ret = aci_gap_start_gen_disc_proc(LE_Scan_Interval=0x10,
 LE_Scan_Window=0x10,
 Own_Address_Type = 0x0,
 Filter_Duplicates = 0x0);

10.一旦发现主/从设备,主设备启动连接流程以便与之连接:

ret= aci_gap_create_connection(LE_Scan_Interval=0x0010,
 LE_Scan_Window=0x0010,
 Peer_Address_Type= ”Master&Slave address type”,
 Peer_Address= ” Master&Slave address",
 Own_Address_Type = 0x0; 
 Conn_Interval_Min=0x6c,
 Conn_Interval_Max=0x6c,
 Conn_Latency=0x00,
 Supervision_Timeout=0xc80,
 Minimum _CE_Lenght=0x000c
 Maximum_CE_Length=0x000c);

通过使用hci_le_advertising_report_event()事件回调函数可得知主/从设备被发现。

  1. 一旦连接,主设备使用 aci_gatt_write_char_desc()API 在主/从设备上启用特征通知。
  2. 在该阶段,由于是 GAP 中央设备,主/从设备接收来自从设备 A、从设备 B 的特征通知,而作为 GAP 外
    设,它还能将这些特征值通知主设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小超嵌入式笔记

感激不尽

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值