You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ArduinoBLE库批量为Arduino Nano 33 BLE设备命名?

Arduino Nano 33 BLE批量命名的最佳方案

一、先解决你当前的特征值改设备名问题

你之前的代码没生效,核心原因是BLE设备的广播名称(Local Name)在启动广播后没法直接修改——BLE.setLocalName()和BLE.setDeviceName()需要重启BLE广播才能让新名称生效,而且得先停掉当前的广播。

修正后的代码示例:

void changeNameCharWritten(BLEDevice central, BLECharacteristic characteristic) 
{
  // 获取写入的新名称
  String newName = characteristic.value();
  
  // 先停止当前广播
  BLE.stopAdvertise();
  
  // 设置新名称(注意转成c字符串)
  BLE.setLocalName(newName.c_str());
  BLE.setDeviceName(newName.c_str());
  
  // 重新启动广播
  BLE.advertise();
}

另外要确保这个特征值的权限是可写(BLEWrite),而且修改后需要断开BLE连接再重新扫描,才能看到新的设备名。

二、批量生产场景的更优方案

完全没必要给每个设备刷专属固件,推荐这几种实用方法:

1. 靠硬件唯一ID自动生成名称

Nano 33 BLE用的nRF52840芯片自带全球唯一的硬件ID,直接读取这个ID就能生成每个设备独有的名称,全程不用手动配置。
示例代码:

#include <ArduinoBLE.h>

void setup() {
  // 读取nRF52840的唯一硬件ID(地址是固定的0x100000A0)
  uint8_t* deviceID = (uint8_t*)0x100000A0;
  
  // 生成带前缀的唯一名称,比如取ID后两位做标识
  char deviceName[20];
  snprintf(deviceName, sizeof(deviceName), "NanoBLE-%02X%02X", deviceID[6], deviceID[7]);
  
  // 初始化BLE并设置名称
  if (!BLE.begin()) {
    while (1); // 初始化失败就死等
  }
  BLE.setLocalName(deviceName);
  BLE.setDeviceName(deviceName);
  BLE.advertise();
}

void loop() {
  // 你的业务逻辑
}

2. 用内置EEPROM存自定义名称

如果需要给设备设置自定义名称(比如包含产品型号+序号),可以用Nano 33 BLE自带的EEPROM,生产时用工具把名称写入EEPROM,设备启动时自动读取并设置BLE名称。
示例代码:

#include <ArduinoBLE.h>
#include <EEPROM.h>

#define NAME_STORAGE_START 0 // 名称存在EEPROM的起始地址
#define MAX_NAME_LEN 16      // 最大名称长度

void setup() {
  EEPROM.begin(MAX_NAME_LEN);
  
  // 从EEPROM读取预存的设备名
  char deviceName[MAX_NAME_LEN] = {0};
  for(int i=0; i<MAX_NAME_LEN; i++){
    deviceName[i] = EEPROM.read(NAME_STORAGE_START + i);
    if(deviceName[i] == 0) break; // 读到结束符就停止
  }
  
  // 初始化BLE
  if (!BLE.begin()) {
    while (1);
  }
  BLE.setLocalName(deviceName);
  BLE.setDeviceName(deviceName);
  BLE.advertise();
}

void loop() {
  // 可选:加一个BLE特征值,支持后期修改名称并写入EEPROM
}

生产时可以写个简单的USB配置工具,连接设备后发送自定义名称,工具把名称写入EEPROM即可,不用重新刷固件。

3. 批量编程工具自动化配置

如果需要大规模批量设置不同名称,可以用Arduino批量编程器配合脚本:

  • 脚本自动生成带序号的名称(比如Product-001、Product-002)
  • 把名称写入每个设备的EEPROM,或者在编译固件时动态替换名称变量(需要修改编译脚本)

三、总结

不用给每个设备做专属固件,优先选硬件ID生成名称(零配置,适合标准化生产),如果需要自定义名称就用EEPROM存储方案,用BLE特征值改名称的话记得重启广播。

内容的提问来源于stack exchange,提问作者Daniele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:05:29