| .. | ||
| docs | ||
| miniprogram | ||
| .gitignore | ||
| project.config.json | ||
| README.md | ||
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. 导入项目
- 下载并安装 微信开发者工具
- 打开微信开发者工具,选择「导入项目」
- 项目目录选择
yack-mini - AppID 使用测试号或填写正式 AppID
2. 配置环境
编辑 miniprogram/env.config.js,配置 yack 平台地址:
// 开发环境
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- 应用 Logodevice.png/device-active.png- TabBar 图标device-empty.png- 空状态图ble-scan.png- 扫描页图标default-avatar.png- 默认头像
4. 真机调试
蓝牙功能必须在真机上测试:
- 点击「真机调试」
- 使用手机扫码预览
- 确保手机蓝牙已开启
核心功能
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 设备数据以十六进制字符串上报:
// 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 调试
- 使用真机调试
- 查看 Console 日志,前缀
[BLE] - 使用 nRF Connect 等工具验证 BLE 设备
MQTT 调试
- 查看 Console 日志,前缀
[MQTT] - 使用 MQTT 客户端工具验证连接
- 确保
wxs://域名已在微信公众平台配置
注意事项
- 蓝牙权限:iOS 无需额外授权,Android 可能需要位置权限
- MQTT 协议:微信小程序必须使用
wxs://协议(端口 8084) - 数据格式:BLE 数据需转换为十六进制字符串上报
- 包体积:主包控制在 1.5MB 以内
相关文档
License
MIT