① 前端调用蓝牙接口怎么设置
我实现的小程序模块自动连接(根据需要,可改手动),是在小程序初始化完成时开始自动调用执行。
大致流程:
开启蓝牙适配;
获取蓝牙适配器状态,判断设备蓝牙是否可用;
判断蓝牙适配器可用时开启扫描蓝牙设备和开启获取已连接的蓝牙设备;
如果开启扫描蓝牙设备失败 5 s 后,自动再次开启扫描;
开启扫描蓝牙设备成功后,开启监听已扫描的设备;
如果已扫描到的新设备,包含特定名称规律,则开始连接档老腊该设备;
开启获取已连接蓝牙设备,成功后,连接包含特定名称规律的设备;
两者都无法搜索到相应设备,则等待 5 s,重新搜索;
开始连接某设备时停止扫描设备,停止循环获取已连接设备;
连接成功后停止扫描设备,停止循环获取已连接设备。
下面,我们一步步来完成这个流程。
开始连接蓝牙设备
1. 开启连接
app.js的onLaunch()方法里中,我们调用this.startConnect();来开启连接,弹出提示框,进行配对。如果失败,则提示设备蓝牙不可用,同时开启蓝牙适配器状态监听。
2. 获取本机蓝牙状态
调用this.getBluetoothAdapterState()获取本机蓝牙适配器状态,判断是否可用。若available为false,则为用户没有开启系统蓝牙。
同时,判断程序还没有开始搜索蓝牙设备,调用this.()开始扫描附近的蓝牙设备,以及this.getConnectedBluetoothDevices(),获取本机已配对的蓝牙设备。
3. 开始搜索新设备
开始搜索蓝牙设备(),提示蓝牙搜索。
4. 获取已配对的蓝牙设备
需要注意的是,参数services(Array)是必填的,但是官方示例中以及各种坑爹 demo 里从没见过有谁填写。不填写这个属性此方法,将无法获取到任何已配对设备。
如果要调用此方法,则代表需要连接特定设备,并且知道该设备的一个主服务serviceId。
如暂时不知道这个 ID,可以先手动连接一次想要连接的设备,然后获取service列表,记录属性primary为true的值至少一个。5. 处理搜索功能开启失败的情况
如果搜索功能启动失败,回到第 2 步,重新检查蓝牙适配器。如果可用,开启蓝牙搜索功能并开启发现附近蓝牙设备事件监听:this.onBluetoothDeviceFound()。
此方法可自定义过滤一些无效的蓝牙设备,比如name为空的,或是产品开发中,需要过滤设备名称不含有特定规律字符串的设备。
6. 自动配对设含枣备
在第 5 步中发现了某个想配对的设备,则获取到该设备的deviceId,然后用this.startConnectDevices()接口,开始配对该设备。
开启连接后,为了避免出现冲突,一旦开启连接,则需要终止扫描附近蓝牙设备、终止读取本机已配对设备
7. 连接成功后握手
连接成功后,使用this.getService(deviceId)接口,获取设备的所有服务。
8. 读取服务的特征值
9. 意外处理
如果扫描到的设备中没有想要连接的设备,可以尝试使用系统蓝牙手动配对,然后再小程序中调用getConnectedBluetoothDevices()获取本机已配对的蓝牙设备,然后过滤设备(可能获取多个已配对的蓝牙设备)。
然后,将已获取的蓝牙设备deviceId列表放入到一个数组中,然后调用自定义方法this.loopConnect();
思路:通过递归调用获取已配对蓝牙设备的,如果获取到了就去连接,如果devicesId[x]为空,说明上传调用时,获取到的已配对设备全部连接失败了。
这时候,我们需要则开启重新获取已配对蓝牙设行滑备,并开启扫描附近蓝牙设备。
10. 自动循环重试
startConnectDevices('loop', array)方法,是当获取已配对蓝牙设备进行连接时调用。
其中的处理逻辑上文已经贴出,意思就是在连接失败后fail方法里累加一个全局变量,然后回调loopConnect(array)方法。
11. 手动连接
上文介绍的方法是为了直接自动连接,如果不需要自动连接,可使用方法getBluetoothDevices(),获取已扫描到的蓝牙设备的列表。
开发者可以做个页面显示出设备名,用户点击某个设备后,才开始连接。
需要注意的事项
that.serviceId是在初始化时设置的,由于对需要连接设备的主服务serivceId和各种特征值都是已知的,因此可以这样做。如果不可知,可以做一个扫描方法自己检查特征值的用途。
连接成功后的writeBLECharacteristicValue和openNotifyService操作需要注意,如果同时开启这两项操作要先调用wirte再开启notify(原因未知,个人心得)。
3、经提醒,我发现还可以再完善一下在onBlueToothAdapterStateChange()监听蓝牙适配器状态,以此判断连接过程中、连接后用户开关了设备蓝牙。如果判断到关了蓝牙,发出开启蓝牙的提示;如果监听到开启了,就重新回到第 1 步。
② 小程序香氛怎么连接蓝牙音响
1、首先,请确保您的手机已经开启蓝牙功能,并且蓝牙音响已经正确连接到电源。
2、然后,打开小程序,点击“设备”,在页面中找到“蓝牙设备”,点击“搜索”,系统会自动搜索附近可用的蓝牙设备,搜索到后点击连接即可。
3、最后,在小程序中选择您想要播放的香氛,点击“播放”,即可将香氛播放到蓝牙音响上。
③ 断网了,如何让微信小程序,可以用蓝牙
微信小程序怎么实现蓝牙连接?(代码示例)
微信小程序 2022-03-13
微信小程序如何实现蓝牙连接?本篇文章给大家带来的内容是介绍微信小程序实现蓝牙连接的方法(步骤)。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
最近的项目需要使用小程序的蓝牙功能与硬件设备进行连接相互传送数据指令,联调过程中发现一些问题,于是想着记录下来,方便以后查看!
1、初始化蓝牙设备
一般使用蓝牙功能肯定是想连接某一个蓝牙设备,所以需要知道这个蓝牙设备的名称,一般来说都是扫描二维码连接,那么当你扫描这个设备二维码的时候,就需要去初始化你手机上的蓝牙模块了
/**
* 初始化蓝牙设备
*/
initBlue:function(){
var that = this;
wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口
success: function (res) {
// console.log(res)
wx.showToast({
title: '初始化成功',
icon: 'success',
ration: 800
})
that.findBlue();//2.0
},
fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户
wx.showToast({
title: '请开启蓝牙',
icon: 'fails',
ration: 1000
})
}
})
},
2、搜索蓝牙设备
手机蓝牙初始化成功之后,就会去搜索周边的蓝牙设备
/**
*开始搜索蓝牙设备
*/
findBlue(){
var that = this
wx.({
allowDuplicatesKey: false,
interval: 0,
success: function (res) {
④ 小米手机微信小程序蓝牙连接不上
可参考以下无法连接蓝牙设备处理步骤:1、确认蓝牙设备电量与连接范围确认蓝牙设备电量充足,蓝牙连接有效距离一般为10米左右,如果双方设备距离较远或中间存在障碍物,则可能搜索不到蓝牙设备。2、确认蓝牙设备连接状态确保没有其他手机连接此蓝牙设备。3、重新配对蓝牙设备请参考蓝牙设备说明书操作,确保设备处于可配对状态,并重新配对设备。4、进行对比测试同时使用两个无配对记录的手机搜索,如果其他手机也不能搜索到设备,则可能是蓝滑谨牙设备故障。5、重置网络设置进入设置--系统管理--备份与重置--重置网凳让键络设置--重置设置,再使用查看。6、升级系统版本请您将手枣巧机升级至最新版本使用查看。
⑤ 微信小程序蓝牙教程--完整版亲测
#使用mpvue 开发小程序过程中 简单介绍一下微信小程序蓝牙连接过程
#在蓝牙连接的过程中部分api需要加定时器延时1秒到2秒左右再执行,原因为何不知道,小程序有这样的要求
#1.首先是要初始化蓝牙:openBluetoothAdapter()
```js
if (wx.openBluetoothAdapter) {
wx.openBluetoothAdapter({
success: function(res) {
/* 获取本机的蓝牙状态 */
setTimeout(() => {
getBluetoothAdapterState()
}, 1000)
},
fail: function(err) {
// 初始化失败
}
})
} else {
}
```
#2.检测本机蓝牙是否可用:
# 要在上述的初始化蓝牙成功之后回调里调用
```js
getBluetoothAdapterState() {
var that= this;
that.toastTitle= '检查蓝牙状态'
wx.getBluetoothAdapterState({
success: function(res) {
()
},
谈祥 fail(res) {
console.log(res)
}
})
}
```
#3. 开始搜索蓝牙设备:
```js
() {
var that= this;
setTimeout(() => {
wx.({
success: function(res) {
/* 获取蓝牙设备列表 */
that.getBluetoothDevices()
},
纳亩 fail(res) {
}
})
}, 1000)
}
```
#4. 获取搜索到的蓝牙设备列表
# /* that.deviceName 是获取到的蓝牙设备的名称, 因为蓝牙设备在安卓和苹果手机上搜到的蓝牙地址显示是不一样的,所以根据设备名称匹配蓝牙*/
```js
getBluetoothDevices() {
var that= this;
setTimeout(() => {
wx.getBluetoothDevices({
services: [],
allowDuplicatesKey: false,
interval: 0,
success: function(res) {
if (res.devices.length> 0) {
if (JSON.stringify(res.devices).indexOf(that.deviceName) !== -1) {
for (let i = 0; i < res.devices.length; i++) {
if (that.deviceName === res.devices[i].name) {
/* 根据指定的蓝牙设备名称匹配到deviceId */
that.deviceId = that.devices[i].deviceId;
含茄搏 setTimeout(() => {
that.connectTO();
}, 2000);
};
};
} else {
}
} else {
}
},
fail(res) {
console.log(res, '获取蓝牙设备列表失败=====')
}
})
}, 2000)
},
```
#5.连接蓝牙
# 匹配到的蓝牙设备ID 发送连接蓝牙的请求, 连接成功之后 应该断开蓝牙搜索的api,然后去获取所连接蓝牙设备的service服务
```js
connectTO() {
wx.createBLEConnection({
deviceId: deviceId,
success: function(res) {
that.connectedDeviceId = deviceId;
/* 4.获取连接设备的service服务 */
that.getBLEDeviceServices();
wx.stopBluetoothDevicesDiscovery({
success: function(res) {
console.log(res, '停止搜索')
},
fail(res) {
}
})
},
fail: function(res) {
}
})
}
```
#6. 获取蓝牙设备的service服务,获取的serviceId有多个要试着连接最终确定哪个是稳定版本的service 获取服务完后获取设备特征值
```js
getBLEDeviceServices() {
setTimeout(() => {
wx.getBLEDeviceServices({
deviceId: that.connectedDeviceId,
success: function(res) {
that.services= res.services
/* 获取连接设备的所有特征值 */
that.getBLEDeviceCharacteristics()
},
fail: (res) => {
}
})
}, 2000)
},
```
#7.获取蓝牙设备特征值
# 获取到的特征值有多个,最后要用的事能读,能写,能监听的那个值的uuid作为特征值id,
```js
getBLEDeviceCharacteristics() {
setTimeout(() => {
wx.getBLEDeviceCharacteristics({
deviceId: connectedDeviceId,
serviceId: services[2].uuid,
success: function(res) {
for (var i = 0; i < res.characteristics.length; i++) {
if ((res.characteristics[i].properties.notify || res.characteristics[i].properties.indicate) &&
(res.characteristics[i].properties.read && res.characteristics[i].properties.write)) {
console.log(res.characteristics[i].uuid, '蓝牙特征值 ==========')
/* 获取蓝牙特征值 */
that.notifyCharacteristicsId = res.characteristics[i].uuid
// 启用低功耗蓝牙设备特征值变化时的 notify 功能
that.()
}
}
},
fail: function(res) {
}
})
}, 1000)
},
```
#8.启动notify 蓝牙监听功能 然后使用 wx.用来监听蓝牙设备传递数据
#接收到的数据和发送的数据必须是二级制数据, 页面展示的时候需要进行转换
```js
() { // 启用低功耗蓝牙设备特征值变化时的 notify 功能
var that= this;
console.log('6.启用低功耗蓝牙设备特征值变化时的 notify 功能')
wx.({
state: true,
deviceId: that.connectedDeviceId,
serviceId: that.notifyServicweId,
characteristicId: that.notifyCharacteristicsId,
complete(res) {
/*用来监听手机蓝牙设备的数据变化*/
wx.(function(res) {
/**/
that.balanceData += that.buf2string(res.value)
that.hexstr += that.receiveData(res.value)
})
},
fail(res) {
console.log(res, '启用低功耗蓝牙设备监听失败')
that.measuringTip(res)
}
})
},
/*转换成需要的格式*/
buf2string(buffer) {
var arr = Array.prototype.map.call(new Uint8Array(buffer), x => x)
return arr.map((char, i) => {
return String.fromCharCode(char);
}).join('');
},
receiveData(buf) {
return this.hexCharCodeToStr(this.ab2hex(buf))
},
/*转成二进制*/
ab2hex (buffer) {
var hexArr = Array.prototype.map.call(
new Uint8Array(buffer), function (bit) {
return ('00' + bit.toString(16)).slice(-2)
}
)
return hexArr.join('')
},
/*转成可展会的文字*/
hexCharCodeToStr(hexCharCodeStr) {
var trimedStr = hexCharCodeStr.trim();
var rawStr = trimedStr.substr(0, 2).toLowerCase() === '0x' ? trimedStr.substr(2) : trimedStr;
var len = rawStr.length;
var curCharCode;
var resultStr= [];
for (var i = 0; i < len; i = i+ 2) {
curCharCode = parseInt(rawStr.substr(i, 2), 16);
resultStr.push(String.fromCharCode(curCharCode));
}
return resultStr.join('');
},
```
# 向蓝牙设备发送数据
```js
sendData(str) {
let that= this;
let dataBuffer = new ArrayBuffer(str.length)
let dataView = new DataView(dataBuffer)
for (var i = 0; i < str.length; i++) {
dataView.setUint8(i, str.charAt(i).charCodeAt())
}
let dataHex = that.ab2hex(dataBuffer);
this.writeDatas = that.hexCharCodeToStr(dataHex);
wx.writeBLECharacteristicValue({
deviceId: that.connectedDeviceId,
serviceId: that.notifyServicweId,
characteristicId: that.notifyCharacteristicsId,
value: dataBuffer,
success: function (res) {
console.log('发送的数据:' + that.writeDatas)
console.log('message发送成功')
},
fail: function (res) {
},
complete: function (res) {
}
})
},
```
# 当不需要连接蓝牙了后就要关闭蓝牙,并关闭蓝牙模块
```js
// 断开设备连接
closeConnect() {
if (that.connectedDeviceId) {
wx.closeBLEConnection({
deviceId: that.connectedDeviceId,
success: function(res) {
that.closeBluetoothAdapter()
},
fail(res) {
}
})
} else {
that.closeBluetoothAdapter()
}
},
// 关闭蓝牙模块
closeBluetoothAdapter() {
wx.closeBluetoothAdapter({
success: function(res) {
},
fail: function(err) {
}
})
},
```
#在向蓝牙设备传递数据和接收数据的过程中,并未使用到read的API 不知道有没有潜在的问题,目前线上运行为发现任何的问题
#今天的蓝牙使用心得到此结束,谢谢
⑥ 微信小程序无法连接蓝牙打印机
方法指州如下:
1、打开微信小程序,点击设置,选择蓝牙开放拍侍。
2、打开蓝牙打印机,点击蓝牙开放。
3、用微信搜索附近蓝牙即可连接到蓝牙打印机。打印机(Printer)是计算机的输出设备之一,用于将计算机处理结果打印在相关介袭逗吵质上。
⑦ 微信小程序说请打开蓝牙但开着蓝牙
重新连接。
有时候在显示过程中打开蓝牙,小程序未能及时接收到信息,握亏从而出现打开仍旧提醒的情况。
具体步雹亏骤:设置---权限管理段肆神--微信--开启蓝牙--允许“。
⑧ 满天星小程序怎样与设备链接
满天星小程序支持通过蓝牙、WIFI、二维码等方式与设备链接:
1、通过蓝牙:在满天星小程序中,点击“设备”,选择“添加设备”,按照提示开启蓝牙,打开设备的蓝牙功能后会自动搜索到附近的设备,点击确认连接即可完成设备与小程序的连接。
2、通过WIFI:在满天星小程序敬扰中,点击“设备”,选早态择“WIFI连接”,再输入设备的WIFI信息,根据提示完成设备的配置,即可完成小程序与设备的配对连接。
3、通过二维码:在满天星小程序中,点击“亮睁旦设备”,选择“扫码添加”,对准设备的二维码,便可完成小程序与设备的连接。
⑨ 小程序 蓝牙连接
//初始化蓝牙
initBlue() {
var that = this;
wx.openBluetoothAdapter({ //调用微信小程序api 打开蓝牙适配器接口
success: function (res) {
console.log('1.初始化蓝牙成功')
},
//监听手机蓝牙的开关
monitorTheBlue:function(){
var that =this;
wx.onBluetoothAdapterStateChange(function(res){
})
},
//开始获取附近的蓝牙设备
//. 获取到附近的蓝牙数组 通过蓝牙特定的名称获取自己想要连接的蓝牙设备
//. 获取附近蓝牙设备的数组
findBlue() {
console.log(new Date())
var that = this
wx.({
allowDuplicatesKey: false,
interval: 0,
success: function (res) {
console.log('2.正在搜索设备.............')
if (that.data.isFirestShow) {
wx.showLoading({
title: '正在搜索设备'
})
}
},
//搜索获取附近的所有蓝牙设备 获取附近所有的蓝牙设备的相关信息 获取需要连接蓝牙设备的deviceID
//. 通过bluetoothDeviceName 和 localName 来确定制定蓝牙
//. 一般根据制定亏毕设备的名漏空局字去连接 设备的名字 是出产厂家设定
getBlue() {
var that = this
wx.getBluetoothDevices({
success: function (res) {
console.log('3.找到设备列表........')
wx.hideLoading()
// return false
var index = 10
for (var i = 0; i < res.devices.length; i++) {
if (res.devices[i].name && res.devices[i].localName) {
var arr = res.devices[i].name.split("-")
var secArr = res.devices[i].localName.split("-")
if (arr[0] == that.data.bluetoothDeviceName || secArr[0] == that.data.bluetoothDeviceName) {
},
//连接蓝牙设备
//通过deviceId 连接蓝牙
/**
},
/返让/6 连接上需要的蓝牙设备之后,获取这个蓝牙设备的服务uuid
//获取设备的uuid
getServiceId() {
var that = this
wx.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
success: function (res) {
var model = res.services[1]
that.setData({
servicesUUID: model.uuid
})
console.log('7.获取设备 uuid 成功....')
that.getCharacteId() //6.0
}
})
},
//7 如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值
//notify write read 当只有 notify为true的时候才能 接收蓝牙设备传来的数据,
//write 为true 才能传入数据
//read 为true 才能读取设备数据
getCharacteId() {
var that = this
wx.getBLEDeviceCharacteristics({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: that.data.servicesUUID,
success: function (res) {
for (var i = 0; i < res.characteristics.length; i++) { //2个值
var model = res.characteristics[i]
if (model.properties.notify == true) {
that.setData({
characteristicId: model.uuid //监听的值
})
console.log('8.model.properties.notify == true')
that.startNotice(model.uuid) //7.0
}
// if (model.properties.read == true) {
// that.readData(model.uuid)
// }
// if (model.properties.write == true) {
// that.setData({
// writeId: model.uuid//用来写入的值
// })
// }
}
}
})
},
fordateTime1(){
let now = new Date(),hour = now.getHours()
console.log(hour)
let str = ''
if(hour < 7){str = '早餐前'}
else if ((7< hour) && (hour<= 9)){str = '早餐后'}
else if ((9< hour) && (hour<= 11)){str = '午餐前'}
else if ((11< hour) && (hour<= 13)){str = '午餐后'}
else if ((13< hour) && (hour<= 17)){str = '晚餐前'}
else if ((17< hour) && (hour<= 19)){str = '晚餐后'}
else if ((19< hour) && (hour<= 24)){str = '睡觉前'}
return str
},
//8 如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值
//开启设备数据监听 监听蓝牙设备返回来的数据
startNotice(uuid) {
var that = this;
wx.({
state: true, // 启用 notify 功能
deviceId: that.data.deviceId,
serviceId: that.data.servicesUUID,
characteristicId: uuid, //第一步 开启监听 notityid 第二步发送指令 write
success: function (res) {
// that.closeConnect(that.data.deviceId)
// 设备返回的方法
let tip = 0
wx.(res1 => {
},
/**
//监听蓝牙设备是否会异常断开
() {
},
// 断开设备连接
closeConnect: function(v) {
var that = this
if (v) {
wx.closeBLEConnection({
deviceId: v,
success: function(res) {
console.log("蓝牙断开连接")
that.closeBluetoothAdapter()
},
fail(res) {
}
})
} else {
that.closeBluetoothAdapter()
}
},
// 关闭蓝牙模块
closeBluetoothAdapter:function () {
wx.closeBluetoothAdapter({
success: function(res) {
console.log("关闭蓝牙模块")
},
fail: function(err) {
}
})
},
⑩ 7ma小程序怎么开启蓝牙
可以在程序里的设置里进行开启。
打开设置找到蓝牙选项即可开启。