avenlee2023 2026-01-23 14:50 采纳率: 3.8%
浏览 2

杰理AC69系列如何实现接收手机蓝牙数据并广播给其他设备

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_callback
    • gatt_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 文档或项目结构,我可以进一步帮你定制代码。希望以上内容对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 1月23日