微信小程序实现蓝牙打印


Posted in Javascript onSeptember 23, 2019

最近刚好完成了一个打印标签的项目,其中就涉及到了小程序的蓝牙功能。所以写下这篇粗略的文章记录一下,同时也是给即将做相关项目的亲们提供一个参考,也希望有什么描述不恰当或者技术上不正确的地方大家可以指出,一起进步。

蓝牙打印只要按这九个步骤(前六个步骤连接蓝牙,后三个步骤打印数据)就可以搞定啦!步骤如下:

第一步:初始化蓝牙模块 wx.openBluetoothAdapter

wx.openBluetoothAdapter({
 success (res) {
 console.log(res)//res:{errMsg: "openBluetoothAdapter:ok"}
 }
})

第二步:开始搜寻附近的蓝牙外围设备 wx.startBluetoothDevicesDiscovery

wx.startBluetoothDevicesDiscovery({
 //services: ['FEE7'],只搜索主服务 UUID 为 FEE7 的设备,如果明确知道主服务UUID可以用此项做筛选
 success (res) {
 console.log(res)//res:{errCode: 0, errMsg: "startBluetoothDevicesDiscovery:ok", isDiscovering: true}
 }
})

第三步:获取已搜素到的蓝牙设备列表 wx.getBluetoothDevices

wx.getBluetoothDevices({
 success: function (res) {
 console.log(res)//res:{errMsg: "getBluetoothDevices:ok", devices: Array(3)}
 }
})

第四步:监听寻找到新设备的事件 wx.onBluetoothDeviceFound(有时候会第三步会搜不到所以需要使用监听器去随时监听搜索到的蓝牙设备并返回给你)

wx.onBluetoothDeviceFound(function(res) {
 console.log(res)//res:{devices: Array(1)}
})

第五步:连接蓝牙设备 wx.createBLEConnection

wx.createBLEConnection({
 deviceId,//上面选择蓝牙设备的deviceId,例:连接第一个设备devices[0].deviceId
 success (res) {
 console.log(res)//{errCode: 0, errMsg: "createBLEConnection:ok"}
 }
})

第六步:停止搜寻附近的蓝牙外围设备 wx.stopBluetoothDevicesDiscovery(可以写在第五步成功回调之后,或者是

onUnload()函数里)
wx.stopBluetoothDevicesDiscovery({
 success (res) {
 console.log(res)
 }
})

第七步:获取蓝牙设备所有服务 wx.getBLEDeviceServices

wx.getBLEDeviceServices({
 deviceId,//已连接的蓝牙设备ID
 success (res) {
 console.log(res)//{errMsg: "getBLEDeviceServices:ok", services: Array(5), errCode: 0}
 }
})
//这边获取到了5个服务

第八步:获取蓝牙设备中某一个服务的所有特征值 wx.getBLEDeviceCharacteristics

var characteristics="";
wx.getBLEDeviceCharacteristics({
 deviceId,
 serviceId,//第七步的服务ID,
 success (res) {
 //res:{errMsg: "getBLEDeviceCharacteristics:ok", characteristics: Array(4), errCode: 0}
 //characteristics[0].properties: {read: true, write: false, notify: false, indicate: false}
 //特征值有好几种类型,我们这边打印需要的是item.properties.write为true的特征值
 for (var i = 0; i < res.characteristics.length; i++) {
 var item = res.characteristics[i];
 if (item.properties.write) {
 characteristics = item.uuid;
 }
 }
 //保存特征值
 }
})

第九步:向蓝牙设备特征值中写入数据 wx.writeBLECharacteristicValue

wx.writeBLECharacteristicValue({
 deviceId,
 serviceId,
 characteristicId,//上面保存的特征值
 value: buffer, // 这里的value是ArrayBuffer类型,中间层传过来的打印数据前端自己做转换,转换过程我这边就不描述了;
 success (res) {
 console.log('writeBLECharacteristicValue success', res.errMsg)
 }
})
//特别提醒建议每次写入的buffer不超过20字节,超过会有写入错误的风险,所以一个打印的内容可能要拆成N个20字节的buffer去循环writeBLECharacteristicValue,这样就能打印成功啦。

附:

微信小程序官方文档

示例代码(uniapp实现小程序蓝牙打印简易流程)

另注:无论是原生、WePY、mpvue或uniapp、调用步骤都是一样的,不过调用API的前缀需要改成对应的就OK了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node.js中的console.error方法使用说明
Dec 10 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
js经验分享 JavaScript反调试技巧
Mar 10 Javascript
详解vuex状态管理模式
Nov 01 Javascript
微信小程序实现带缩略图轮播效果
Nov 04 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
基于javascript原生判断DOM是否加载完毕
Oct 14 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 #Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 23 #Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 #Javascript
layui加载数据显示loading加载完成loading消失的实例代码
Sep 23 #Javascript
ES10的13个新特性示例(小结)
Sep 23 #Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 #Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 #Javascript
You might like
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
跟老齐学Python之数据类型总结
2014/09/24 Python
python实现中文分词FMM算法实例
2015/07/10 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
女士鞋子、包包和服装在线,第一款10美元:ShoeDazzle
2019/07/26 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
法学专业毕业生自荐信
2014/06/11 职场文书
关于旅游的活动方案
2014/08/15 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
环卫工作个人总结
2015/03/04 职场文书
现货白银电话营销话术
2015/05/29 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
python数字图像处理:图像简单滤波
2022/06/28 Python