fastbee/yack-mini/README.md
2026-09-05 10:19:07 +08:00

205 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# yack-mini
yack 蓝牙网关微信小程序,采集 BLE 设备数据透传上报至 yack 平台。
## 项目定位
- **技术栈**:原生微信小程序
- **目标**:轻量化蓝牙网关,透传数据至 yack
- **与 yack-app 区别**:yack-app 是全功能移动端(UniApp),yack-mini 是轻量蓝牙网关(原生小程序)
## 架构概览
```
┌─────────────┐ BLE ┌──────────────────┐ wxs ┌─────────────────┐
│ BLE 设备 │ ←──────→ │ yack-mini │ ←──────→ │ yack 平台 │
│ (传感器) │ │ (微信小程序) │ MQTT │ (数据存储) │
└─────────────┘ └──────────────────┘ └─────────────────┘
```
## 目录结构
```
yack-mini/
├── project.config.json # 项目配置
└── miniprogram/ # 小程序源码
├── app.js # 应用入口
├── app.json # 全局配置
├── app.wxss # 全局样式
├── env.config.js # 环境配置(API/MQTT 地址)
├── sitemap.json # 站点地图
│
├── pages/ # 页面
│ ├── login/ # 登录页
│ ├── index/ # 首页(设备列表)
│ └── device/
│ ├── scan/ # 扫描设备页
│ └── detail/ # 设备详情/实时数据页
│
├── services/ # 核心服务模块
│ ├── ble.js # 蓝牙采集模块
│ └── mqtt-client.js # MQTT 连接模块
│
├── utils/ # 工具函数
│ ├── hex.js # 十六进制转换
│ ├── storage.js # 本地存储
│ ├── auth.js # MQTT 凭证获取
│ └── request.js # HTTP 请求
│
├── components/ # 公共组件
│ └── device-card/ # 设备卡片组件
│
├── libs/ # 第三方库
│ └── mqtt.min.js # mqtt.js (4.3.7, 支持微信小程序)
│
└── assets/ # 静态资源
└── images/ # 图片
```
## 快速开始
### 1. 导入项目
1. 下载并安装 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)
2. 打开微信开发者工具,选择「导入项目」
3. 项目目录选择 `yack-mini`
4. AppID 使用测试号或填写正式 AppID
### 2. 配置环境
编辑 `miniprogram/env.config.js`,配置 yack 平台地址:
```javascript
// 开发环境
const DEV_CONFIG = {
baseUrl: 'http://localhost:8080',
mqttServer: 'wxs://localhost:8084/mqtt',
};
// 生产环境
const PROD_CONFIG = {
baseUrl: 'https://your-domain.com/prod-api',
mqttServer: 'wxs://your-domain.com/mqtt',
};
```
### 3. 替换图片资源
`miniprogram/assets/images/` 目录下的图片为占位图,请替换为实际图片:
- `logo.png` - 应用 Logo
- `device.png` / `device-active.png` - TabBar 图标
- `device-empty.png` - 空状态图
- `ble-scan.png` - 扫描页图标
- `default-avatar.png` - 默认头像
### 4. 真机调试
蓝牙功能必须在真机上测试:
1. 点击「真机调试」
2. 使用手机扫码预览
3. 确保手机蓝牙已开启
## 核心功能
### 1. 登录认证
- yack 账号密码登录
- 获取 Token 和用户信息(含 userId)
- 登录态持久化存储
### 2. BLE 设备扫描
- 初始化蓝牙适配器
- 扫描周边 BLE 设备
- 支持按 Service UUID 过滤
### 3. 设备配置
配置设备参数:
- 设备名称
- 设备编号(SN)
- 产品 ID
- 产品密钥(用于 MQTT 认证)
- BLE 服务 UUID(可选)
### 4. 实时数据采集
- BLE 连接与数据监听
- 十六进制数据展示
- 自动/手动上报到 yack
### 5. MQTT 数据上报
- 连接 yack MQTT Broker(`wxs://` 协议)
- 发布属性数据到 `/{productId}/{sn}/property/post`
- 支持订阅下发指令
## MQTT 认证说明
设备连接 yack MQTT Broker 的凭证格式:
| 参数 | 格式 | 示例 |
|:---|:---|:---|
| clientId | `S&{设备编号}&{产品ID}&{用户ID}` | `S&BLE001&1&100` |
| username | `{设备编号}` | `BLE001` |
| password | `{产品密钥}` | `abc123` |
## 数据上报格式
BLE 设备数据以十六进制字符串上报:
```javascript
// Modbus 帧示例
mqttClient.publish('/1/BLE001/property/post', '010304009A005B8B7C');
// 私有协议示例
mqttClient.publish('/1/BLE002/property/post', '009A005B');
```
yack 平台通过规则脚本或 Modbus 配置解析数据。
## 微信小程序配置
### 服务器域名
在微信公众平台配置:
- **socket 合法域名**:`wxs://your-domain.com`
- **request 合法域名**:`https://your-domain.com`
### 权限说明
- `scope.bluetooth`:蓝牙权限(部分设备需要用户授权)
- `scope.userLocation`:部分 Android 设备扫描 BLE 需要位置权限
## 开发调试
### BLE 调试
1. 使用真机调试
2. 查看 Console 日志,前缀 `[BLE]`
3. 使用 nRF Connect 等工具验证 BLE 设备
### MQTT 调试
1. 查看 Console 日志,前缀 `[MQTT]`
2. 使用 MQTT 客户端工具验证连接
3. 确保 `wxs://` 域名已在微信公众平台配置
## 注意事项
1. **蓝牙权限**:iOS 无需额外授权,Android 可能需要位置权限
2. **MQTT 协议**:微信小程序必须使用 `wxs://` 协议(端口 8084)
3. **数据格式**:BLE 数据需转换为十六进制字符串上报
4. **包体积**:主包控制在 1.5MB 以内
## 相关文档
- [微信小程序蓝牙 API](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth/wx.openBluetoothAdapter.html)
- [mqtt.js 文档](https://github.com/mqttjs/MQTT.js)
- [yack 文档](../CLAUDE.md)
## License
MIT