Ejemplo de Web Bluetooth
Usa WebBluetoothProvider para comunicarse con módulos BLE UART a través del Nordic UART Service (NUS) sobre GATT.
Hardware compatible
Cualquier dispositivo que anuncie el UUID del servicio NUS 6e400001-b5a3-f393-e0a9-e50e24dcca9e:
- nRF52840 / nRF52832 con firmware NUS
- ESP32 con sketch Arduino BLE UART
- Módulos BLE-to-UART HC-08, AT-09, HM-10
Configuración
ts
import { AbstractSerialDevice, createBluetoothProvider } from "webserial-core";
AbstractSerialDevice.setProvider(createBluetoothProvider());Ejemplo completo
ts
import {
AbstractSerialDevice,
delimiter,
createBluetoothProvider,
} from "webserial-core";
AbstractSerialDevice.setProvider(createBluetoothProvider());
class BleDevice extends AbstractSerialDevice<string> {
constructor() {
super({
baudRate: 9600, // Ignorado sobre BLE — mantenido por compatibilidad de interfaz
dataBits: 8,
stopBits: 1,
parity: "none",
flowControl: "none",
bufferSize: 255,
commandTimeout: 3000,
parser: delimiter("\n"),
autoReconnect: false, // La reconexión BLE requiere interacción del usuario
handshakeTimeout: 2000,
});
}
protected async handshake(): Promise<boolean> {
return true;
}
}
const device = new BleDevice();
device.on("serial:connecting", () => console.log("Abriendo selector BLE..."));
device.on("serial:connected", () => console.log("Conectado via BLE!"));
device.on("serial:disconnected", () => console.log("BLE desconectado."));
device.on("serial:data", (line) => console.log("←", line));
device.on("serial:error", (err) => console.error(err.message));
// Abre el selector de dispositivos Web Bluetooth
await device.connect();
// Los envíos se fragmentan automáticamente al MTU BLE de 20 bytes
await device.send("HELLO\n");Nota sobre fragmentación
El MTU BLE para writeValueWithoutResponse es típicamente 20 bytes. El proveedor divide automáticamente cada llamada a send() en chunks de 20 bytes, con un retardo de 10 ms entre chunks para evitar saturar el stack BLE.
Para mensajes de menos de 20 bytes, no hay división ni retardo.
Soporte de navegadores
| Navegador | Plataforma | Soporte |
|---|---|---|
| Chrome 56+ | macOS, Windows, Linux (BlueZ) | ✅ |
| Chrome for Android | Android 6.0+ | ✅ |
| Edge 79+ | Windows | ✅ |
| Firefox | Todos | ❌ |
| Safari | Todos | ❌ |
Demo interactivo
Prueba este ejemplo directamente en tu navegador:
O ejecuta el demo localmente:
bash
npm run dev
# Luego abre http://localhost:5173/demos/web-bluetooth/Código fuente: demos/web-bluetooth/