Web蓝牙如何连接低功耗设备?
一分耕耘,一分收获!既然打开了这篇文章《Web蓝牙API如何连接低功耗设备?》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!
Web Bluetooth API可在支持的浏览器中实现网页与BLE设备通信,需满足Chromium内核、安全上下文、蓝牙4.0+等条件,通过requestDevice选择设备并建立GATT连接,获取服务与特征值后可读写数据或监听通知,同时需处理错误与断开连接,适用于智能硬件控制等场景。

Web Bluetooth API 允许网页在用户授权的前提下,与附近的低功耗蓝牙(BLE)设备进行通信。这项功能主要支持现代浏览器如 Chrome 和 Edge,适用于开发无需原生应用即可控制 BLE 外设的网页应用,比如智能手环、传感器或物联网设备。
启用和使用 Web Bluetooth 的前提条件
要使用 Web Bluetooth API,需满足以下条件:
- 浏览器必须支持 Web Bluetooth(目前主要是 Chromium 内核浏览器,如 Chrome 56+)
- 运行环境必须是安全上下文(即 HTTPS 或 localhost)
- 用户设备需支持蓝牙 4.0 及以上,并已开启蓝牙功能
- 用户必须主动触发操作(例如点击按钮)来发起设备扫描
请求连接 BLE 设备
通过 navigator.bluetooth.requestDevice() 方法可以弹出系统级设备选择框,让用户从附近设备中选择目标设备。需要指定过滤条件,例如服务 UUID。
navigator.bluetooth.requestDevice({
filters: [{ services: ['battery_service'] }], // 按服务过滤
optionalServices: ['device_information'] // 需要访问其他服务时声明
})
.then(device => {
console.log('已选择设备:', device.name);
return device.gatt.connect(); // 建立 GATT 连接
})
.then(server => {
console.log('GATT 服务器已连接');
// 接下来可读写特征值
});
常见服务名称可使用标准 UUID 字符串或 16/128 位格式,例如 '0x180F' 表示电池服务。
读取和写入特征值
连接 GATT 服务器后,可通过 getPrimaryService() 和 getCharacteristic() 获取具体特征,进而进行数据交互。
- 读取数据:调用 characteristic.readValue() 获取当前值
- 写入数据:使用 characteristic.writeValue() 向设备发送指令
- 监听通知:调用 characteristic.startNotifications() 并监听 'characteristicvaluechanged' 事件
server.getPrimaryService('battery_service')
.then(service => service.getCharacteristic('battery_level'))
.then(characteristic => {
// 读取电量
return characteristic.readValue();
})
.then(value => {
const batteryLevel = value.getUint8(0);
console.log(`当前电量: ${batteryLevel}%`);
});
// 开启通知以实时接收更新
characteristic.addEventListener('characteristicvaluechanged', event => {
const value = event.target.value;
console.log('电量变化:', value.getUint8(0));
});
characteristic.startNotifications();
处理错误和断开连接
蓝牙操作容易受信号、权限或设备状态影响,建议对每个异步步骤添加 catch 处理。
.catch(error => {
console.error('蓝牙操作失败:', error);
});
当不再使用时,应主动调用 device.gatt.disconnect() 释放资源。也可监听设备断开事件:
device.addEventListener('gattserverdisconnected', () => {
console.log('设备已断开');
});
基本上就这些。只要设备兼容、权限允许,Web Bluetooth 能实现轻量高效的 BLE 通信,适合快速原型开发和简单控制场景。
到这里,我们也就讲完了《Web蓝牙如何连接低功耗设备?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!
Youtu-GraphRAG开源,图检索技术新突破
- 上一篇
- Youtu-GraphRAG开源,图检索技术新突破
- 下一篇
- Win11图标白底方块怎么修复
-
- 文章 · 前端 | 5分钟前 |
- JavaScript代理对象是什么?如何用Proxy自定义对象操作?
- 273浏览 收藏
-
- 文章 · 前端 | 7分钟前 |
- CSS图标随文字颜色变化技巧
- 482浏览 收藏
-
- 文章 · 前端 | 7分钟前 |
- CSS制作带遮罩图片展示,绝对定位与透明度应用
- 361浏览 收藏
-
- 文章 · 前端 | 10分钟前 | HTML5
- HTML5用hr标签或CSS画直线分隔内容块
- 433浏览 收藏
-
- 文章 · 前端 | 16分钟前 |
- 反引号让JS多行文本更简洁易读
- 313浏览 收藏
-
- 文章 · 前端 | 16分钟前 |
- JavaScript WeakSet详解及使用场景
- 419浏览 收藏
-
- 文章 · 前端 | 19分钟前 |
- Hook规则是什么?Hook使用限制详解
- 390浏览 收藏
-
- 文章 · 前端 | 22分钟前 |
- Safari Gap兼容问题,媒体查询改用Margin解决
- 240浏览 收藏
-
- 文章 · 前端 | 24分钟前 |
- JavaScript 如何用 fetch 获取笑话数据
- 245浏览 收藏
-
- 文章 · 前端 | 30分钟前 |
- WebVitals库如何提升生产性能监控
- 204浏览 收藏
-
- 文章 · 前端 | 40分钟前 |
- Vue Slots在Markdown组件中的扩展应用
- 395浏览 收藏
-
MyBrand
- 文章 · 前端 | 43分钟前 | 常见HTML属性兼容性问题有哪些
- MyBrand
是的,translate 属性会影响 Google Translate 的自动翻译行为。1. translate="no"如果一个 HTML 元素或页面设置了 translate="no",Google Translate 会跳过该元素或整个页面,不进行翻译。适用于不需要翻译的内容,比如品牌名称、专有名词、代码片段等。示例:

