Estoy tratando de obtener el nombre del dispositivo central donde central es una aplicación web basada en Javascript y periférico es Nano ble 33.
Estoy usando la API web-bluetooth y puedo obtener el nombre del dispositivo periférico siguiendo esta descripción del enlace de ingreso aquí
y, por otro lado, puedo obtener la dirección central usando central.address() pero no obtengo nada cuando uso central.deviceName() o central.localName().
Me pregunto dónde debo configurarDeviceName() en central. ¿Es obligatorio?
Gracias por adelantado.
Según el ejemplo de arduino en https://docs.arduino.cc/retired/archived-libraries/CurieBLE#example-1 , parece que debería poder obtener el BLECentral con el siguiente código:
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()); } }Sin embargo, BLECentral no le permite obtener la información del nombre del dispositivo central según 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 ... Le sugiero que use la dirección y use "Central 00:11:22:33:44:55" para el nombre si es necesario para usted.
Para ser claros, Web Bluetooth no le permite obtener el nombre del dispositivo Central. Permite que las páginas web que se ejecutan en el rol central se conecten a los servidores GATT a través de una conexión Bluetooth.
Habiendo dicho eso, nada le impide tener una característica de Bluetooth personalizada en su periférico BLE que devuelve la dirección del dispositivo de la Central como un valor para que pueda acceder a ella desde la página web. Vea el ejemplo de JS a continuación:
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)}"`);