uniapp 低功耗蓝牙BLE分包

ble.js

javascript 复制代码
  // 分包写入蓝牙
  async sendWriteBLECharacteristicValue(
    deviceId,
    serviceId,
    writeCharacteristicId,
    readCharacteristicId,
    buffer,
    success, // 成功回调
    failure, // 失败回调
  ) {
    const offset = 500; // 偏移量
    let pos = 0; // 位置
    let bytes = buffer.byteLength; // 总字节
    let that = this;
    while (bytes > 0) {
      let endPos = bytes > offset ? pos + offset : pos + bytes;
      const tempBuffer = buffer.slice(pos, endPos);
      pos += offset;
      bytes -= offset;
      // 延迟发送
      await that.sendDelay(150, tempBuffer).then((buffer) => {
        that.writeBLECharacteristicValue(
          deviceId,
          serviceId,
          writeCharacteristicId,
          buffer,
          (res) => {
            if (buffer.byteLength < offset) {
              success(res);
            }
          },
          (err) => {
            failure(err);
          }
        );
      });
      if (readCharacteristicId) {
        console.log(readCharacteristicId, "读文件");
        uni.readBLECharacteristicValue({
          deviceId: deviceId,
          serviceId: serviceId,
          characteristicId: readCharacteristicId,
        });
      }
    }
  }

  sendDelay(delay, buffer) {
    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(buffer), delay);
    });
  }

  writeBLECharacteristicValue(
    deviceId,
    serviceId,
    characteristicId,
    buffer,
    success,
    failure
  ) {
    plus.bluetooth.writeBLECharacteristicValue({
      deviceId: deviceId,
      serviceId: serviceId,
      characteristicId: characteristicId,
      value: buffer,
      success(res) {
        success(res);
      },
      fail(err) {
        if (res.errCode == "10006") {
          //当前连接已断开,清空连接数据
        }
        console.log("发送失败", res);
        failure(err);
      },
    });
  }

index.vue使用分包

javascript 复制代码
this.$ble.sendWriteBLECharacteristicValue(
        deviceId, // 蓝牙地址ID
        serveiceId, // ABF0
        writeCharId, // 写入蓝牙通道 此处用ABF3
        readCharId,// 读取蓝牙返回数据通道 此处用ABF4
        buffer, // 要写入蓝牙的数据 Uint8Array
        (res) => {
          console.log("打印完成: " + JSON.stringify(res));},
        (err) => {
          console.log("打印失败: " + JSON.stringify(err));
        }
    );
相关推荐
X1A0RAN几秒前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
涛涛ing20 分钟前
2026年最值得关注的前端变化,藏在“默认值”里
前端
量化分析码农1 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
亿元程序员2 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice3 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
用户0829773260053 小时前
RTX 5500 MIG 踩坑记录:切分之后模型跑不起来,排错整整一下午
前端
byte轻骑兵3 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
Lank_M3 小时前
AI 放大后的图更清楚,但它不能当原图入库
前端
Swot3 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
用户4147679304153 小时前
Windows 触摸屏上 Swiper 轮播滑不动?可能是内部滚动容器抢走了你的手势
前端