无法通过 Web 蓝牙获取中央设备名称 API

Unable to get central Device Name via Web-Bluetooth API

我正在尝试获取中央设备名称,其中中央设备是基于 Javascript 的网络应用程序,外围设备是 Nano ble 33。

我正在使用 web-bluetooth API 并且我能够在这个 enter link description here

之后获得外围设备名称

另一方面,我可以使用 central.address() 获取中心地址,但是当我使用 central.deviceName() 或 central.localName( ).

我想知道我应该在中央哪里设置设备名称()。是必须的吗?

提前致谢。

根据 https://docs.arduino.cc/retired/archived-libraries/CurieBLE#example-1 上的 arduino 示例,您似乎可以使用以下代码获得 BLECentral

void loop() {
  // listen for BLE peripherals to connect:
  BLECentral central = blePeripheral.central();

  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    Serial.println(central.address());
  }
}

但是BLECentral不允许您根据https://github.com/arduino/ArduinoCore-arc32/blob/master/libraries/CurieBLE/src/BLECentral.h

获取中心设备名称信息
class BLECentral {
  public:
    bool connected(void); // is the central connected
    
    const char* address(void) const; // address of the Central in string form

    bool disconnect(void); // Disconnect the central if it is connected
    void poll(void); // Poll the central for events
...

如果您需要,我建议您使用地址并使用 "Central 00:11:22:33:44:55" 作为名称。

需要说明的是,Web Bluetooth 不允许您获取中央设备名称。它允许处于中心角色的网页 运行 通过蓝牙连接连接到 GATT 服务器。

话虽如此,但没有什么能阻止您在 BLE 外围设备上拥有自定义蓝牙特性,即 returns Central 的设备地址作为值,以便您可以从网页访问它。请参阅下面的 JS 示例:

const yourServiceUuid = 0x1234;
const yourCharacteristicUuid = 0x5678;

const device = await navigator.bluetooth.requestDevice({
    // filters: [...] <- Prefer filters to save energy & show relevant devices.
    acceptAllDevices: true,
    optionalServices: [yourServiceUuid]});
const server = await device.gatt.connect();
const service = await server.getPrimaryService(yourServiceUuid);
const characteristic = await service.getCharacteristic(yourCharacteristicUuid);

const value = await characteristic.readValue();
const decoder = new TextDecoder('utf-8');
console.log(`> Central name: "Central ${decoder.decode(value)}"`);