如何在CircuitPython中修改Circuit Playground Bluefruit的蓝牙广播名称
解决Circuit Playground Bluefruit蓝牙自定义名称不生效的问题
核心原因
ProvideServicesAdvertisement默认不会主动将设备名称纳入广播数据,直接设置complete_name或short_name无法触发名称字段的广播,导致设备搜索时仍显示默认名称。
可行解决方案
方法一:显式添加名称字段到广播
通过手动添加CompleteName元素,强制让广播包含自定义名称:
from adafruit_ble import BLERadio from adafruit_ble.advertising.standard import ProvideServicesAdvertisement, CompleteName from adafruit_ble.services.nordic import UARTService ble = BLERadio() uart = UARTService() advertisement = ProvideServicesAdvertisement(uart) # 设置自定义名称,建议添加编号区分多设备 advertisement.complete_name = "CPB-001" # 禁用短名称避免冲突(可选) advertisement.short_name = None # 关键步骤:将名称元素加入广播数据列表 advertisement.data.append(CompleteName()) ble.start_advertising(advertisement) while True: # 后续可添加连接后的UART数据处理逻辑 pass
方法二:使用基础广播类结合服务UUID
如果方法一仍有问题,可改用基础Advertisement类,同时指定UART服务UUID确保设备能被识别:
from adafruit_ble import BLERadio from adafruit_ble.advertising import Advertisement from adafruit_ble.advertising.standard import CompleteName from adafruit_ble.services.nordic import UARTService ble = BLERadio() uart = UARTService() advertisement = Advertisement() # 设置自定义名称 advertisement.complete_name = "CPB-002" advertisement.data.append(CompleteName()) # 添加UART服务UUID,让设备被识别为UART蓝牙设备 advertisement.service_uuids.append(uart.uuid) ble.start_advertising(advertisement) while True: if ble.connected: # 连接后的业务逻辑 pass
额外优化建议
- 自动生成唯一名称:利用设备内置UUID生成唯一标识,避免手动编号出错:
import board # 提取UUID后4位作为设备唯一编号 device_suffix = str(board.UUID)[-4:] custom_name = f"CPB-{device_suffix}" - 名称长度限制:完整名称最多31字符,短名称最多10字符,超出会被自动截断。
- 清除蓝牙缓存:部分设备会缓存旧蓝牙名称,修改后需清除缓存再重新搜索测试。
内容的提问来源于stack exchange,提问作者erik
相关产品推荐
相关产品推荐

