更新记录
1.0.0(2026-08-13)
- 首版:Android BLE + 经典蓝牙 SPP;iOS / 鸿蒙 / 微信小程序 BLE
- 可配置协议档:
yaohua_stx(STX…CR)、ascii_ww、template(正则) - RX 组帧:帧头/帧尾/定长/分隔符、缓冲区防爆
- 连接后连续输出命令(默认
RN1)与无数据重试 - 去皮 / 置零 / 切单位 / 原始命令发送(命令串可配)
onWeight节流与onlyStable;getLastWeight;autoReconnectOnce- BLE UUID 与
discoverDelayMs可配;nameHints扫描过滤 - 统一错误码 907xxxxx;App-nvue / uni-app x 声明
平台兼容性
uni-app(4.11)
| Vue2 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| × | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.0 |
| 微信小程序 | 微信小程序插件版本 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2.22.0 | 1.0.0 | × | × | × | × | × | × | × | × | - | × | × |
uni-app x(4.11)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 | 微信小程序插件版本 |
|---|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | × | 2.22.0 | 1.0.0 |
breao-bleweight 使用说明
蓝牙电子秤接入插件,适用于收银、计件、巡检等连续称重场景。
当前版本:1.0.0
- Android:BLE 与经典蓝牙 SPP
- iOS / 鸿蒙 / 微信小程序:BLE
- 能力:可配置协议档与组帧;连续称重回调;去皮 / 置零 / 切单位 / 原始命令
- 不做 USB/RS232 有线秤、不做通用 BLE 调试器、不做多秤并行连接池
建议调用顺序:init → startScan / connect → 接收 onWeight 或发控制命令 → disconnect / destroy。各异步方法均支持 success / fail / complete;fail 含 errCode / errMsg。插件为单例连接语义:再次 init 会销毁上一实例。
1. 环境要求
- HBuilderX 4.11 及以上
- uni-app Vue3(App-vue / App-nvue)或 uni-app x(App;微信能力与 uni-app 一致)
- 支持:App-Android、App-iOS、App-鸿蒙(仅 uni-app)、微信小程序
- 不支持:H5 及其它小程序;uni-app x 下鸿蒙不支持
- Android 最低 API:21;iOS 最低 12;鸿蒙最低 API:12;微信小程序基础库建议 2.22.0 及以上
- App 真机调试须制作自定义基座;正式发版须购买授权后走云端传统打包
- 授权绑定唯一 appid + 包名
2. 安装与引入
将插件目录放入工程的 uni_modules/breao-bleweight,或从插件市场导入后同步。
import {
init,
destroy,
startScan,
stopScan,
connect,
disconnect,
getConnectionState,
tare,
zero,
toggleUnit,
sendRaw,
getLastWeight,
} from '@/uni_modules/breao-bleweight'
3. API
3.1 init / destroy
init({
transport: 'ble', // Android 老秤可设 'spp',详见 §4
protocolProfile: 'yaohua_stx',
onWeight(res) {
console.log(res.weight, res.unit, res.stable)
},
onDisconnected(res) {
console.log('disconnected', res)
},
success() {},
fail(err) {
console.error(err.errCode, err.errMsg)
},
})
destroy({ success() {}, fail(err) { console.error(err.errCode, err.errMsg) } })
3.2 扫描与连接
startScan({
timeout: 10000,
success(res) {
// res.devices: [{ name, address, rssi?, bonded? }]
},
fail(err) { console.error(err.errCode, err.errMsg) },
})
connect({
address: 'XX:XX:XX:XX:XX:XX',
success() {},
fail(err) { console.error(err.errCode, err.errMsg) },
})
disconnect({ success() {}, fail() {} })
stopScan({ success() {}, fail() {} })
iOS 侧请先扫描再连接;Android SPP 建议系统已配对。参数默认值见 §4。
3.3 控制命令
tare({ success() {}, fail() {} })
zero({ success() {}, fail() {} })
toggleUnit({ success() {}, fail() {} })
sendRaw({ data: 'RN1', success() {}, fail() {} })
命令内容取自 init 中的 tareCommand / zeroCommand / toggleUnitCommand;亦可用 sendRaw 发送任意 ASCII 串。
3.4 状态与最近称重
getConnectionState({
success(res) {
// res.state: disconnected | connecting | connected
},
})
getLastWeight({
success(res) {
// res.sample 为最近一次解析结果;尚无数据时为 null
},
})
3.5 onWeight 字段
| 字段 | 类型 | 说明 |
|---|---|---|
| weight | number | 主重量数值 |
| unit | string | 单位,如 kg、g、lb |
| stable | boolean | 是否稳定 |
| zero | boolean | 是否零位 |
| overload | boolean | 是否超载 |
| gross | number | 毛重;协议含则解析,否则可能缺省 |
| net | number | 净重;协议含则解析,否则可能缺省 |
| tare | number | 皮重;协议含则解析,否则可能缺省 |
| raw | string | 原始帧文本 |
4. 可配置项
| 字段 | 位置 | 默认 | 说明 |
|---|---|---|---|
| transport | init | ble | ble 或 spp;spp 仅 Android;其它端选 spp 返回 9070009 |
| protocolProfile | init | yaohua_stx | 协议档:yaohua_stx、ascii_ww、template |
| debug | init | false | 调试日志 |
| bleServiceUuid | init | 无 | BLE 服务 UUID;无则遍历服务 |
| bleNotifyUuid | init | 无 | 通知特征 UUID;无则宽松匹配首个可通知特征 |
| bleWriteUuid | init | 无 | 写入特征 UUID;无则宽松匹配可写特征 |
| bleChunkSize | init | 端默认 | BLE 分片写字节数;经典 SPP 忽略 |
| bleWriteInterval | init | 端默认 | BLE 分片写间隔毫秒;经典 SPP 忽略 |
| discoverDelayMs | init | 300 | 连接成功后延迟再发现服务/开通知,单位毫秒 |
| continuousCommand | init | RN1 | 连接成功后发送的连续输出命令串;空串表示不自动发送 |
| continuousRetryCount | init | 3 | 连接后若暂无称重数据,重发连续命令的次数 |
| continuousRetryIntervalMs | init | 2000 | 无数据重试间隔,单位毫秒 |
| tareCommand | init | ST07 | 去皮命令 ASCII 串,由 tare 发送 |
| zeroCommand | init | SZ09 | 置零命令 ASCII 串,由 zero 发送 |
| toggleUnitCommand | init | SU06 | 切单位命令 ASCII 串,由 toggleUnit 发送 |
| frameHeader | init | 0x02 | 组帧帧头;yaohua_stx 默认 STX |
| frameTrailer | init | 0x0d | 组帧帧尾;yaohua_stx 默认 CR |
| frameDelimiter | init | 无 | 分隔符组帧;非空时按分隔符切帧 |
| frameFixedLen | init | 0 | 定长组帧字节数;大于 0 时按定长切帧 |
| maxBufferSize | init | 4096 | RX 缓冲区上限,防止粘包堆积占满内存 |
| templateRegex | init | 无 | protocolProfile=template 时使用的正则,须能捕获重量 |
| templateWeightGroup | init | 1 | template 正则中重量所在捕获组序号(从 1 起) |
| weightThrottleMs | init | 0 | onWeight 最小回调间隔毫秒;0 表示不节流 |
| onlyStable | init | false | true 时仅在 stable 为 true 时触发 onWeight |
| autoReconnectOnce | init | false | 意外断线后自动重连一次 |
| nameHints | init / startScan | 内置关键字 | 扫描名称过滤;默认含 SCALE、WEIGHT、YAOHUA 等 |
| onWeight | init | 无 | 解析成功后的称重回调 |
| onDisconnected | init | 无 | 被动断开回调 |
| timeout | startScan | 10000 | 扫描超时毫秒 |
| includeBonded | startScan | true | 是否合并系统已配对设备(Android SPP 常用) |
| address | connect | 必填 | 设备地址:Android 多为 MAC;iOS/微信为 BLE deviceId |
| timeout | connect | 15000 | 连接超时毫秒 |
| data | sendRaw | 必填 | 自定义 ASCII 命令串,按字节原样写出 |
不传参即用默认值。
4.1 协议档说明
| 档名 | 说明 |
|---|---|
| yaohua_stx | 以 STX(0x02)开头、CR(0x0D)结尾的帧;解析重量、单位及稳定/零位/超载等位(协议含则填) |
| ascii_ww | 文本中含 ww/wn 等连续输出关键字的行式帧;ww 等视为稳定,wn 等视为未稳定 |
| template | 使用 templateRegex / templateWeightGroup 从帧文本提取重量;其它状态位按匹配结果尽力填充 |
5. 完整示例
import {
init,
startScan,
connect,
tare,
getLastWeight,
disconnect,
destroy,
} from '@/uni_modules/breao-bleweight'
init({
transport: 'ble',
protocolProfile: 'yaohua_stx',
continuousCommand: 'RN1',
weightThrottleMs: 200,
onWeight(res) {
console.log('weight', res.weight, res.unit, 'stable=', res.stable)
},
onDisconnected() {
console.log('scale disconnected')
},
success() {
startScan({
timeout: 8000,
success(scanRes) {
const dev = scanRes.devices && scanRes.devices[0]
if (!dev) return
connect({
address: dev.address,
success() {
tare({
success() {
getLastWeight({
success(last) {
console.log('last', last.sample)
disconnect({ success() { destroy({}) } })
},
})
},
})
},
})
},
})
},
fail(err) {
console.error(err.errCode, err.errMsg)
},
})
6. 权限
请在应用 manifest / 隐私弹窗中按需声明,并说明用于连接电子秤与接收称重数据。
| 平台 | 权限 | 说明 |
|---|---|---|
| Android | android.permission.BLUETOOTH | 蓝牙基础访问(API≤30) |
| Android | android.permission.BLUETOOTH_ADMIN | 蓝牙管理(API≤30) |
| Android | android.permission.BLUETOOTH_SCAN | 蓝牙扫描(Android 12+) |
| Android | android.permission.BLUETOOTH_CONNECT | 蓝牙连接(Android 12+) |
| Android | android.permission.ACCESS_FINE_LOCATION | 蓝牙扫描辅助定位 |
| Android | android.permission.ACCESS_COARSE_LOCATION | 蓝牙扫描辅助定位 |
| iOS | NSBluetoothAlwaysUsageDescription | 始终访问蓝牙 |
| iOS | NSBluetoothPeripheralUsageDescription | 蓝牙外设访问 |
| 鸿蒙 | ohos.permission.ACCESS_BLUETOOTH | 蓝牙访问 |
| 鸿蒙 | ohos.permission.DISCOVER_BLUETOOTH | 蓝牙发现 |
| 鸿蒙 | ohos.permission.MANAGE_BLUETOOTH | 蓝牙管理 |
| 微信 | openBluetoothAdapter | 初始化蓝牙适配器 |
| 微信 | startBluetoothDevicesDiscovery | 扫描蓝牙设备 |
| 微信 | createBLEConnection | 建立 BLE 连接 |
| 微信 | getBLEDeviceServices | 获取 BLE 服务 |
| 微信 | getBLEDeviceCharacteristics | 获取 BLE 特征 |
| 微信 | writeBLECharacteristicValue | 写入 BLE 特征 |
| 微信 | notifyBLECharacteristicValueChange | 订阅 BLE 通知 |
| 微信 | onBLECharacteristicValueChange | 接收 BLE 通知数据 |
7. 错误码(907)
| 码 | 含义 |
|---|---|
| 9070001 | 成功 |
| 9070002 | 失败(忙碌、连接失败等) |
| 9070003 | 未初始化或配置缺失 |
| 9070004 | 蓝牙未开启或不可用 |
| 9070005 | 未连接 |
| 9070006 | 参数非法 |
| 9070007 | 当前平台不支持 |
| 9070008 | 驱动不匹配或创建失败 |
| 9070009 | 传输方式不支持(如非 Android 选 spp) |
| 9070010 | 尚未实现(预留) |
| 9070011 | 帧解析错误 |
8. 平台注意
- Android 默认
transport: 'ble';老式经典蓝牙秤请设transport: 'spp',建议系统先配对 - Android 12+ 扫描通常需要定位权限;请在运行时申请并引导用户开启蓝牙
- iOS / 微信几乎只能 BLE;iOS 请先
startScan再connect,以便缓存外设 - 鸿蒙本期为 BLE GATT 通知读,不支持 spp
- 耀华类秤连上后若无数据,插件会按配置发送
continuousCommand(默认RN1)并重试 - BLE UUID 留空时自动匹配可通知 / 可写特征;特殊机型请在 init 填写厂商 UUID
template档须提供能捕获重量的正则,并用templateWeightGroup指定组号- 切换
transport或彻底释放资源时,请destroy后再重新init

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 2
赞赏 0
下载 12502586
赞赏 1941
赞赏
京公网安备:11010802035340号