微信小程序实现蓝牙打印


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 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 Javascript
json原理分析及实例介绍
Nov 29 Javascript
javascript函数定义的几种区别小结
Jan 06 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
Jun 15 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
js方法数据验证的简单实例
Sep 17 Javascript
js实现登录验证码
Dec 22 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
JavaScript console的使用方法实例分析
Apr 28 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/06/05 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
Python文件处理
2016/02/29 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python简单实现插入排序实例代码
2020/12/16 Python
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
Delphi CS笔试题
2014/01/04 面试题
电大毕业生自我鉴定
2013/11/10 职场文书
体育教师求职信
2014/05/24 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年导购员工作总结
2015/04/25 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
vue 给数组添加新对象并赋值
2022/04/20 Vue.js