微信小程序实现蓝牙打印


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 相关文章推荐
jquery选择器排除某个DOM元素的方法(实例演示)
Apr 25 Javascript
JS实现网页表格自动变大缩小的方法
Mar 09 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
Mar 03 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
浅谈Vue.use到底是什么鬼
Jan 21 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
php新建文件的方法实例
2019/09/26 PHP
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python实现八大排序算法(1)
2017/09/14 Python
深入浅析Python的类
2018/06/22 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
Python如何读取文件中图片格式
2020/01/13 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
银行批评与自我批评
2014/02/10 职场文书
《草原》教学反思
2014/02/15 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
捐书仪式主持词
2015/07/04 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python