IC采用杰理的AC63/696n,用的通用蓝牙SDK,AC63_BT_SDK,想要实现1主多从通讯,主设备从手机接收蓝牙数据,并广播给多个分设备,SDK要怎么配置
2条回答 默认 最新
檀越@新空间 2026-01-23 14:51关注下午好🌅🌅🌅
本答案参考通义千问要实现杰理AC69系列芯片(如AC63/696n)的 “1主多从”蓝牙通信架构,即:手机作为主设备(Central),AC69系列设备作为从设备(Peripheral),接收来自手机的数据,并将数据广播给其他多个设备(例如通过BLE广播或连接到其他从设备),你需要对 AC63_BT_SDK 进行合理的配置。
✅ 一、整体架构说明
1.1 系统拓扑结构
- 手机(Central):连接到AC69设备(Peripheral)。
- AC69设备(Peripheral):接收手机数据,然后广播给其他设备(可以是其他Peripheral设备,或者通过广播方式发送)。
- 目标:实现“1主(手机)→ 多从(AC69设备)”的通信链路。
✅ 二、SDK 配置关键点
2.1 初始化蓝牙协议栈
确保在
main.c或初始化函数中调用:bluetooth_init();2.2 配置为 Peripheral 模式
在 SDK 中设置 AC69 设备为 Peripheral 模式,并启用服务和特征值。
示例代码片段(参考)
// 设置设备名称 ble_set_local_name("AC69_Device"); // 注册 GATT 服务 gatt_service_t service; service.uuid = UUID_128BIT(0x0001); service.max_char_num = 1; service.char_list[0].uuid = UUID_128BIT(0x0002); service.char_list[0].properties = GATT_CHAR_PROP_READ | GATT_CHAR_PROP_WRITE_NO_RESP; service.char_list[0].value = "Hello"; service.char_list[0].value_len = 5; gatt_add_service(&service); // 启动广播 ble_start_advertising();2.3 接收手机数据
当手机连接到 AC69 设备时,可以通过 GATT 读写操作接收数据。
注册 GATT 回调函数
void gatt_read_callback(uint16_t conn_handle, uint16_t attr_handle, uint8_t *value, uint16_t len) { // 处理接收到的数据 LOG("Received data: %s", value); } void gatt_write_callback(uint16_t conn_handle, uint16_t attr_handle, uint8_t *value, uint16_t len) { // 处理写入数据 LOG("Write data: %s", value); }2.4 广播数据给其他设备
你可以使用两种方式广播数据:
方式一:通过 BLE 广播(Advertising)
- 将数据封装到 AD Data 中,通过广播发送给其他设备。
- 适用于无连接的广播场景。
示例代码(修改广播内容)
uint8_t adv_data[] = {0x02, 0x01, 0x06}; // Flags uint8_t scan_rsp[] = {0x0F, 0x09, 'A', 'C', '6', '9', 'D', 'e', 'v', 'i', 'c', 'e'}; // Scan Response ble_set_adv_data(adv_data, sizeof(adv_data)); ble_set_scan_rsp_data(scan_rsp, sizeof(scan_rsp)); // 更新广播内容 ble_update_advertising_data();注意: 广播内容长度有限制(通常不超过31字节),若需要传输大量数据,建议使用连接方式。
方式二:连接到多个从设备(Multiple Peripherals)
- 如果你有多个 AC69 设备,可让它们都处于 Peripheral 模式,并允许手机连接。
- 手机通过连接每个设备,发送数据到 AC69,再由 AC69 转发给其他设备。
✅ 三、详细步骤总结
1. 初始化蓝牙模块
bluetooth_init();2. 配置为 Peripheral 模式
- 设置本地设备名称
- 注册 GATT 服务和特征值
- 启动广播
3. 注册 GATT 回调函数
gatt_read_callbackgatt_write_callback
4. 接收手机数据
- 在回调中处理接收到的数据
5. 广播数据给其他设备
- 使用 BLE 广播(Advertising)
- 或者建立 多个 Peripheral 连接
✅ 四、完整示例代码(简化版)
#include "bt_api.h" #include "gatt_api.h" // GATT 服务定义 gatt_service_t service; gatt_char_t char_val; // GATT 写入回调 void gatt_write_callback(uint16_t conn_handle, uint16_t attr_handle, uint8_t *value, uint16_t len) { LOG("Data received from phone: %s", value); // 广播数据给其他设备 ble_send_advertising_data(value, len); } // GATT 读取回调 void gatt_read_callback(uint16_t conn_handle, uint16_t attr_handle, uint8_t *value, uint16_t len) { LOG("Read request from phone"); } // 初始化蓝牙 void bt_init() { bluetooth_init(); // 设置设备名称 ble_set_local_name("AC69_Device"); // 注册 GATT 服务 service.uuid = UUID_128BIT(0x0001); service.max_char_num = 1; service.char_list[0].uuid = UUID_128BIT(0x0002); service.char_list[0].properties = GATT_CHAR_PROP_READ | GATT_CHAR_PROP_WRITE_NO_RESP; service.char_list[0].value = "Hello"; service.char_list[0].value_len = 5; gatt_add_service(&service); // 注册 GATT 回调 gatt_register_callback(gatt_write_callback, gatt_read_callback); // 启动广播 ble_start_advertising(); }
✅ 五、注意事项
- 广播数据限制:BLE 广播内容最大为 31 字节,超出需使用连接方式。
- 连接管理:如果要连接多个设备,需管理多个连接句柄(conn_handle)。
- 安全性:建议开启加密或配对机制以增强安全性。
- SDK 版本兼容性:请确认你使用的 AC63_BT_SDK 是最新版本,避免已知 Bug。
✅ 六、推荐调试工具
- Nordic nRF Connect:用于测试手机与 AC69 的连接和数据交互。
- Wireshark + Bluetooth Sniffer:用于抓包分析 BLE 数据流。
✅ 七、总结
| 步骤 | 内容 | |------|------| | 1 | 初始化蓝牙模块 | | 2 | 配置为 Peripheral 模式 | | 3 | 注册 GATT 服务和回调函数 | | 4 | 接收手机数据 | | 5 | 广播或连接其他设备 |
如果你能提供具体的 SDK 文档或项目结构,我可以进一步帮你定制代码。希望以上内容对你有帮助!
解决 无用评论 打赏 举报