微信小程序蓝牙打印以及打印二维码

方式一:

通过微信与机器建立连接之后然后通过指定指令去进行打印

方式二:

不使用指令,使用微信api进行打印,先要进行转码,打印中文会有一个乱码的情况可以看一下下面的链接,

乱码情况: https://blog.csdn.net/qq_38188047/article/details/105240273

指令打印步骤具体步骤

  • 用户打开定位信息:wx.getLocation
  • 初始化蓝牙模块:wx.openBluetoothAdapter
  • 搜寻附近的蓝牙外围设备:wx.startBluetoothDevicesDiscovery
  • 获取已搜到的蓝牙设备:wx.getBluetoothDevices
  • 蓝牙连接:wx.createBLEConnection
  • 获取相关服务列表:wx.getBLEDeviceServices
  • 循环判断服务是否支持打印
  • 拿到可进行打印服务id
  • 进行指令转换:使用 encode64gb2312
  • 拿到转换后的指令信息进行打印:wx.writeBLECharacteristicValue

上面的步骤不能乱,否则可能搜索不到蓝牙打印设备

简单效果展示
在这里插入图片描述

获取到数据渲染到列表,然后建立链接

  connect(e) {
    const _that = this;
    wx.showToast({
      title: '打印机连接中',
    });
    wx.createBLEConnection({
      deviceId: e.target.dataset.deviceid, //上面选择蓝牙设备的deviceId,例:连接第一个设备devices[0].deviceId
      success(res) {
        wx.showToast({
          title: '连接成功',
        });
        //已连接停止搜索
        wx.stopBluetoothDevicesDiscovery({
          success(res) {
            console.log(res)
          }
        })
        if (res.errCode == 0) {
          _that.getServeice(e.target.dataset.deviceid)
        }
      },
      fail(err) {
        console.log(err, 'err');
      }
    })
  },

连接之后获取服务信息,判断是否可以支持打印

  getServeice(deviceId) { //获取服务列表
    const _that = this;
    var nowType = false;
    wx.getBLEDeviceServices({
      deviceId, //已连接的蓝牙设备ID
      success: async function (res) {
        for (let index = 0; index < res.services.length; index++) {
          const item = res.services[index];
          if (nowType === false) {
            const serviceType = await _that.decideCharacteristics(item, deviceId);
            if (serviceType) { //可以打印,进行打印相关指令
              nowType = true;
              //指令转码
              _that.valueToBuffer(serviceType.deviceId, serviceType.uuid, serviceType.characteristicsId);
            } else {
              nowType = false;
            }
          }
        }
      },
      fail(err) {
        wx.showToast({
          title: err.errMsg,
        });
      }
    })
  },
  //判断当前服务是否可以进行打印值,可以打印返回相应的值,
  decideCharacteristics(services, deviceId) {
    let useSVtype = false; //判断当前服务有没有可进行打印
    return new Promise((resolve, reject) => {
      wx.getBLEDeviceCharacteristics({
        deviceId,
        serviceId: services.uuid,
        success(data) {
          for (var i = 0; i < data.characteristics.length; i++) {
            var charData = data.characteristics[i];
            if (charData.properties.write) { //判断打印属性
              useSVtype = true;
              resolve({
                deviceId,
                uuid: services.uuid,
                characteristicsId: charData.uuid
              });
            }
          };
          if (useSVtype === false) { //当前服务不可打印
            resolve(false)
          }
        }
      })
    })
  },

完成之后把指令换成字buffer

  valueToBuffer(deviceId, serviceId, characteristicId) {
    let bufferData = new Promise((resolve, reject) => {
      //这个 _t.printData就是你的指令!例如 :!! 0 200 200 670 1\r\nCENTER\r\nSETMAG 2 2\r\nTEXT 55 7 0 0 运单号:620058136\r\n...
      resolve(this.cutCommand(this.data.printData));
    });
    bufferData.then(buffer => {
      this.writeBLECharacteristicValue(deviceId, serviceId, characteristicId, buffer, 1);
    });
  },
    cutCommand(data) { //指令转换
    var sendData64 = [];
    var packageLength = 10;
    var byData = wx.base64ToArrayBuffer(ToBase64.encode64gb2312(data)); //指令转码转码
    for (let i = 0; i < Math.ceil(byData.byteLength / packageLength); i++) {
      var ble_end = packageLength * (i + 1);
      var ble_begin = i * packageLength
      if (ble_end > byData.byteLength) {
        //从begin(包括),到end(不包括)。
        const newBuffer = byData.slice(ble_begin); // 从哪个开始到那个结束
        sendData64[i] = newBuffer
      } else {
        const newBuffer = byData.slice(ble_begin, ble_end); // 从哪个开始到那个结束
        sendData64[i] = newBuffer
      }
    }
    return sendData64;
  },

进行打印

  writeBLECharacteristicValue(deviceId, serviceId, writeId, buffer, times) {
    var _that = this;
    var sendData64 = buffer;
    if (sendData64.length >= times) {
      wx.writeBLECharacteristicValue({
        deviceId: deviceId,
        serviceId: serviceId,
        characteristicId: writeId,
        value: sendData64[times - 1],
        // value: wx.base64ToArrayBuffer(sendData64[times - 1]),
        success: function (res) {
          wx.showLoading({
            title: '打印中...',
            mask: true
          });
          _that.writeBLECharacteristicValue(deviceId, serviceId, writeId, buffer, ++times);
        },
        fail: function (res) {
          _that.showMyModel('提示', '传输失败');
        }
      })

    } else {
      wx.hideLoading();
      _that.showMyModel('提示', '传输完成');
    }
  },
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: UIApp微信小程序蓝牙批量打印设置提供了简便的方式来配置和管理蓝牙打印设备。通过这个设置,用户可以轻松地连接和操作多个蓝牙打印机。 首先,在UIApp微信小程序中,用户可以点击设置菜单进入蓝牙打印设置页面。在该页面上,用户可以看到已经连接的蓝牙打印机列表,并可以选择连接新的打印机。 用户可以通过点击搜索按钮来扫描周围的蓝牙设备。一旦找到了需要连接的打印机,用户可以点击该设备并输入密码(如果需要)进行连接。连接成功后,打印机将会在已连接设备列表中显示。 在已连接设备列表中,用户可以选择默认打印机。默认打印机将是用户首选的打印设备,在用户不指定打印机时将自动选择该设备进行打印。 UIApp提供了多种打印设置选项供用户选择。用户可以根据需要设置打印机的纸张大小、页面方向、打印质量等参数。此外,用户还可以选择打印多份、打印双面等功能。 通过这个蓝牙批量打印设置,用户可以方便地管理和配置多个蓝牙打印设备,提高打印效率。无论是在家庭环境还是办公场所,UIApp微信小程序蓝牙批量打印设置都将为用户提供便捷的打印操作体验。 ### 回答2: 要在UIapp微信小程序中设置蓝牙批量打印,首先需要确保小程序已经获取了蓝牙权限。接下来,我们需要使用微信小程序提供的蓝牙接口进行相关设置。 首先,我们需要调用`wx.getBluetoothAdapterState`方法来获取蓝牙适配器的状态。通过判断蓝牙适配器状态中的`available`字段来确定当前设备是否支持蓝牙功能。如果支持蓝牙功能,则可以继续进行下一步设置。 接下来,我们需要使用`wx.openBluetoothAdapter`方法来打开蓝牙适配器。在蓝牙适配器打开后,我们可以调用`wx.startBluetoothDevicesDiscovery`方法来开始搜索附近的蓝牙设备。 搜索到蓝牙设备后,可以调用`wx.getBluetoothDevices`方法来获取搜索到的设备列表。可以通过遍历设备列表来找到需要连接的蓝牙设备。找到目标设备后,可以使用`wx.createBLEConnection`方法来与设备建立蓝牙连接。 连接成功后,我们可以使用`wx.getBLEDeviceServices`方法来获取设备的服务列表。通过遍历服务列表,找到需要使用的服务,然后使用`wx.getBLEDeviceCharacteristics`方法获取服务中的特征值列表。 接下来,我们可以调用`wx.writeBLECharacteristicValue`方法来向特征值写入数据。这样可以实现向蓝牙设备发送打印指令。 最后,当不再需要与蓝牙设备通信时,可以调用`wx.closeBLEConnection`方法来断开蓝牙连接。同时,为了节约设备电量,也可以调用`wx.stopBluetoothDevicesDiscovery`方法停止蓝牙设备的搜索。 以上就是在UIapp微信小程序中设置蓝牙批量打印的步骤。实现这些功能可以通过使用微信小程序蓝牙接口,并通过正确的参数和方法调用来完成。 ### 回答3: uiapp微信小程序蓝牙批量打印设置是指在使用uiapp微信小程序时,通过蓝牙连接多个打印设备,实现批量打印的设置操作。 首先,在uiapp微信小程序中,我们需要打开蓝牙设备的权限,并搜索附近的可连接打印设备。在搜索到设备后,可以选择其中一个设备进行连接。 连接成功后,可以进行打印设置的操作。首先,可以选择要打印的文件或内容,可以是文本、图片等。然后,可以设置打印的方式,比如单面打印还是双面打印、横向打印还是纵向打印等。还可以设置打印的质量,比如打印的分辨率、图像的色彩等。 除了基本的打印设置,还可以进行高级设置。比如可以设置打印的页码范围,只打印指定的页码或者打印全部页。还可以设置打印份数,指定需要打印的份数。还可以设置打印的排版方式,比如页面的边距、页眉页脚等。 在设置完成后,可以点击打印按钮,开始批量打印。此时,uiapp微信小程序会将要打印的内容发送给已连接的蓝牙设备,并开始打印操作。可以对打印过程进行监控,等待打印完成。打印完成后,可以查看打印结果,并根据需要选择是否继续打印其他内容或关闭连接。 总之,uiapp微信小程序蓝牙批量打印设置包括打开蓝牙权限、搜索设备、连接设备、选择打印内容、设置打印方式和质量、高级设置、打印操作监控等步骤。通过这些设置,用户可以方便地在uiapp微信小程序中实现蓝牙批量打印
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值