微信小程序实现蓝牙打印


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通过Ajax提交表单并返回结果
Jul 31 Javascript
javascript内存管理详细解析
Nov 11 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
js实现进度条的方法
Feb 13 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
jQuery网页右侧广告跟随滚动代码分享
Apr 20 Javascript
iview table render集成switch开关的实例
Mar 14 Javascript
Express之托管静态文件的方法
Jun 01 Javascript
Javascript 之封装(Package)
Sep 14 Javascript
JavaScript模拟实现网易云轮播效果
Apr 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
python标准库os库的函数介绍
2020/02/12 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
学生打架检讨书
2014/02/14 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle