微信小程序实现蓝牙打印


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 相关文章推荐
使用Post提交时须将空格转换成加号的解释
Jan 14 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
JS继承之借用构造函数继承和组合继承
Sep 07 Javascript
移动端界面的适配
Jan 11 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
vue实现单选和多选功能
Aug 11 Javascript
express如何使用session与cookie的方法
Jan 30 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
Apr 17 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 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
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
composer.lock文件的作用
2016/02/03 PHP
php查询操作实现投票功能
2016/05/09 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
js实现倒计时时钟的示例代码
2013/12/17 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
高中体育教学反思
2014/01/29 职场文书
高校教师自荐信范文
2014/03/13 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
北京爱情故事观后感
2015/06/12 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技