Part Number:CC2340R5
因应用场景需求,小范围内有多个蓝牙模块工作。
当前蓝牙设备名称是在软件配置中设置的,多设备烧写都是同一个设备名称。
能否做到蓝牙启动后动态修改蓝牙设备名称,以区分我要连接的设备?
Yolande Wang:
您好:
根据您的描述,您需要在小范围内有多个蓝牙模块工作,并且动态修改它们的设备名称以区分它们,这是完全可以实现的,根据工程师的建议,您可以按照以下步骤来实现这一需求:
1.预定义多个名称:为每个蓝牙模块预定义多个设备名称,这些名称用于区分不同的设备。这些设备名称可以存储在你的应用程序中,或者在设备内的存储中。
2.随机选择设备名称:在每个蓝牙模块启动后,可以随机选择一个预定义的设备名称,以确保每个设备有一个唯一的名称。
3.修改设备名称:在蓝牙启动后,您的应用程序可以使用蓝牙的GATT来动态修改设备名称。这可以通过写入设备名称特征来实现,将选择的名称写入特征的值。
4.更新广播的设备名称:一旦设备名称的特征值被修改,蓝牙堆栈会根据新的值来更新广播的设备名称。这将允许其他设备发现并连接到正确的蓝牙模块。
5.确保唯一性:确保所选择的设备名称在同一小范围内是唯一的,以避免冲突。
,
Xuefeng:
软件中预设值不能满足我的需求。计划从串口输入数据来修改设备名称,在收到串口数据后使用了示例中ble_stack_api.c中设置名称的方法
GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, rxBuf);但是没有成功,而且手机端simple link connect的连接也断了。
可否提供一下具体的修改设备名称的示例代码?
,
Yolande Wang:
您好:
我理解你的需求是通过串口输入数据来修改设备名称,并且你已经尝试过修改设备名称的方法,但出现了问题。以下是一个通用的示例代码框架,以供您参考:
#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);}// 处理其他任务} }
,
Xuefeng:
你好,对于updateDeviceNameInStack中的三部分,可否提供实际代码。
,
Yolande Wang:
您好:
E2EChina论坛这边可以提供思路和方案,以上代码是通用框架,我们不做具体实现。
这里为您提供通过GATT修改设备名称的帖子,希望能够帮助到您。
,
Xuefeng:
谢谢
,
Yolande Wang:
不客气
,
Xuefeng:
我搜索到一个修改广播名称的网站,但是太旧,里面的函数现在应该都有变化了,GAP_UpdateAdvertisingData、GAPRole_SetParameter在现在的代码中对应的是什么名字?
,
Yolande Wang:
具体的函数名称和参数会根据开发环境和版本而有所不同,因此建议查看TI-RTOS或SimpleLink Stack的相关代码和示例文档。
您所说的GAP_UpdateAdvertisingData应该用于更新广播数据,GAPRole_SetParameter用于设置GAP角色参数,包括设备名称。
请参考低功耗蓝牙协议栈的GAP层,
希望对您有所帮助,如有后续问题建议您开新帖交流,谢谢。