一个基于 Web Bluetooth API 的渐进式 Web 应用(PWA),用于扫描、连接和管理蓝牙设备。
- 🔍 扫描蓝牙设备:扫描并列出所有可见的蓝牙设备
- 🔗 设备连接:与选定的蓝牙设备进行配对和连接
- 📊 设备信息展示:显示已连接设备的详细信息,包括:
- 设备名称和 ID
- 可用的 GATT 服务
- 服务特征及其属性
- 可读特征的实时数值
- 📱 PWA 支持:可以安装到桌面或移动设备主屏幕
- 🎨 现代化界面:响应式设计,支持移动端和桌面端
- HTML5
- CSS3(响应式设计)
- JavaScript(ES6+)
- Web Bluetooth API
- Service Worker(离线支持)
- Web App Manifest
该应用需要浏览器支持 Web Bluetooth API,目前支持的浏览器包括:
- ✅ Chrome 56+(桌面版和 Android)
- ✅ Edge 79+
- ✅ Opera 43+
- ❌ Firefox(目前不支持 Web Bluetooth API)
- ❌ Safari(目前不支持 Web Bluetooth API)
由于 Web Bluetooth API 需要在 HTTPS 环境下运行(localhost 除外),您可以使用以下方式运行:
- 克隆或下载此项目
- 使用任何静态文件服务器运行,例如:
# 使用 Python 3
python -m http.server 8000
# 使用 Node.js (需要先安装 http-server)
npx http-server -p 8000
# 使用 PHP
php -S localhost:8000- 在浏览器中打开
http://localhost:8000
将所有文件部署到支持 HTTPS 的 Web 服务器(如 GitHub Pages、Netlify、Vercel 等)。
-
扫描设备:
- 点击"扫描设备"按钮
- 浏览器会弹出设备选择对话框
- 选择您想要连接的蓝牙设备
-
查看设备信息:
- 成功连接后,应用会自动显示设备的详细信息
- 包括设备名称、ID、可用服务和特征
- 对于可读的特征,会显示其当前值
-
断开连接:
- 点击"断开连接"按钮可以断开当前设备
-
安装应用:
- 在支持的浏览器中,会显示"安装应用"按钮
- 点击后可以将应用添加到主屏幕
bluetooth-pwa/
├── index.html # 主 HTML 文件
├── styles.css # 样式文件
├── app.js # 主应用逻辑
├── sw.js # Service Worker
├── manifest.json # PWA 配置文件
├── icon-192.png # 应用图标(192x192)
├── icon-512.png # 应用图标(512x512)
└── README.md # 本文件
应用使用 Web Bluetooth API 进行蓝牙设备通信:
navigator.bluetooth.requestDevice():请求蓝牙设备访问device.gatt.connect():连接到设备的 GATT 服务器server.getPrimaryServices():获取设备的主要服务service.getCharacteristics():获取服务的特征characteristic.readValue():读取特征值
实现了基本的缓存策略,支持离线访问:
- 首次加载时缓存所有静态资源
- 后续访问优先使用缓存
- 网络失败时回退到缓存
- Web Bluetooth API 仅在 HTTPS(或 localhost)环境下可用
- 用户必须手动选择要连接的设备(浏览器强制要求)
- 不支持自动扫描或后台连接
- 需要用户手动触发扫描(出于安全考虑)
- 某些设备可能需要配对才能访问特定服务
- 读取某些特征可能需要特定权限
Q: 为什么无法扫描到设备? A: 确保:
- 设备的蓝牙已开启
- 设备处于可发现模式
- 使用支持 Web Bluetooth 的浏览器
- 网站运行在 HTTPS 或 localhost
Q: 为什么连接后看不到某些服务? A: 某些服务可能需要设备配对或特定权限才能访问。
Q: 能否在 iOS Safari 上使用? A: 目前 iOS Safari 不支持 Web Bluetooth API。
本项目采用 MIT 许可证。
欢迎提交问题和拉取请求!