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.

CC2340R5: 如何动态生成设备名称?

Part Number: CC2340R5


因应用场景需求,小范围内有多个蓝牙模块工作。

当前蓝牙设备名称是在软件配置中设置的,多设备烧写都是同一个设备名称。

能否做到蓝牙启动后动态修改蓝牙设备名称,以区分我要连接的设备?

  • 您好:

    根据您的描述,您需要在小范围内有多个蓝牙模块工作,并且动态修改它们的设备名称以区分它们,这是完全可以实现的,根据工程师的建议,您可以按照以下步骤来实现这一需求:

    1.预定义多个名称:为每个蓝牙模块预定义多个设备名称,这些名称用于区分不同的设备。这些设备名称可以存储在你的应用程序中,或者在设备内的存储中。

    2.随机选择设备名称:在每个蓝牙模块启动后,可以随机选择一个预定义的设备名称,以确保每个设备有一个唯一的名称。

    3.修改设备名称:在蓝牙启动后,您的应用程序可以使用蓝牙的GATT来动态修改设备名称。这可以通过写入设备名称特征来实现,将选择的名称写入特征的值。

    4.更新广播的设备名称:一旦设备名称的特征值被修改,蓝牙堆栈会根据新的值来更新广播的设备名称。这将允许其他设备发现并连接到正确的蓝牙模块。

    5.确保唯一性:确保所选择的设备名称在同一小范围内是唯一的,以避免冲突。

  • 软件中预设值不能满足我的需求。
    计划从串口输入数据来修改设备名称,在收到串口数据后使用了示例中ble_stack_api.c中设置名称的方法

    GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, rxBuf);

    但是没有成功,而且手机端simple link connect的连接也断了。

    可否提供一下具体的修改设备名称的示例代码?

  • 您好:

    我理解你的需求是通过串口输入数据来修改设备名称,并且你已经尝试过修改设备名称的方法,但出现了问题。以下是一个通用的示例代码框架,以供您参考:

    #include <stdint.h>
    #include <string.h>
    #include "ble_stack_api.h"
    
    // 定义一个变量来存储设备名称
    static char deviceName[20] = "DefaultName";
    
    // 函数用于设置设备名称
    void setDeviceName(char* newName) {
        if (strlen(newName) <= 20) {
            strcpy(deviceName, newName);
        }
    }
    
    // 函数用于更新设备名称到蓝牙堆栈
    void updateDeviceNameInStack() {
        // 停用广播
        ble_stack_stop_advertising();
    
        // 设置新的设备名称
        ble_stack_set_device_name(deviceName, strlen(deviceName));
    
        // 重新启用广播
        ble_stack_start_advertising();
    }
    
    // 串口输入处理函数
    void processSerialInput(char* input) {
        // 假设输入格式为 "SETNAME NewName"
        char* command = strtok(input, " ");
        char* newName = strtok(NULL, " ");
    
        if (strcmp(command, "SETNAME") == 0) {
            setDeviceName(newName);
            updateDeviceNameInStack();
        }
    }
    
    int main() {
        // 初始化蓝牙堆栈和串口通信
    
        while (1) {
            // 监听串口输入
            char inputBuffer[50];
            if (serial_input_available()) {
                serial_read(inputBuffer, sizeof(inputBuffer));
                processSerialInput(inputBuffer);
            }
    
            // 处理其他任务
        }
    }
    

  • 你好,对于updateDeviceNameInStack中的三部分,可否提供实际代码。

  • 您好:

    E2EChina论坛这边可以提供思路和方案,以上代码是通用框架,我们不做具体实现。

    这里为您提供通过GATT修改设备名称的帖子,希望能够帮助到您。

  • 我搜索到一个修改广播名称的网站,但是太旧,里面的函数现在应该都有变化了,GAP_UpdateAdvertisingData、GAPRole_SetParameter在现在的代码中对应的是什么名字?

  • 具体的函数名称和参数会根据开发环境和版本而有所不同,因此建议查看TI-RTOS或SimpleLink Stack的相关代码和示例文档。

    您所说的GAP_UpdateAdvertisingData应该用于更新广播数据,GAPRole_SetParameter用于设置GAP角色参数,包括设备名称。

    请参考低功耗蓝牙协议栈的GAP层

    希望对您有所帮助,如有后续问题建议您开新帖交流,谢谢。