집 >위챗 애플릿 >미니 프로그램 개발 >WeChat 애플릿에서 Bluetooth 연결을 구현하는 방법은 무엇입니까? (코드 예)
WeChat 애플릿에서 블루투스 연결을 구현하는 방법은 무엇입니까? 이 기사에서는 WeChat 애플릿을 사용하여 Bluetooth 연결을 구현하는 방법(단계)을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
최근 프로젝트에서는 애플릿의 블루투스 기능을 이용해 하드웨어 장치와 연결해 서로 데이터 명령을 전송해야 하는데, 공동 디버깅 과정에서 몇 가지 문제점이 발견되어 기록해 볼까 생각했습니다. 나중에 참고할 수 있도록!
1. 블루투스 기기 초기화
일반적으로 블루투스 기능을 사용하려면 특정 블루투스 기기이므로 블루투스 기기의 이름을 알아야 합니다. 일반적으로 QR 코드를 스캔하여 연결합니다. 그런 다음 이 기기의 QR 코드를 스캔하면 휴대폰의 블루투스 모듈을 초기화해야 합니다. 🎜🎜#
/** * 初始化蓝牙设备 */ initBlue:function(){ var that = this; wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口 success: function (res) { // console.log(res) wx.showToast({ title: '初始化成功', icon: 'success', duration: 800 }) that.findBlue();//2.0 }, fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户 wx.showToast({ title: '请开启蓝牙', icon: 'fails', duration: 1000 }) } }) },#🎜 🎜#
2. 블루투스 장치 검색휴대폰 블루투스가 성공적으로 초기화된 후 검색됩니다. 주변 블루투스 기기
/** *开始搜索蓝牙设备 */ findBlue(){ var that = this wx.startBluetoothDevicesDiscovery({ allowDuplicatesKey: false, interval: 0, success: function (res) { wx.showLoading({ title: '正在搜索设备', }) that.getBlue()//3.0 } }) },
3. 블루투스 기기 정보 얻기 블루투스 기기 검색 후 검색된 Bluetooth 장치 정보를 얻어야 합니다. 프로그램은
검색된 Bluetooth 장치 정보를 얻는 두 가지 방법을 제공합니다. 해당 방법은
wx.onBluetoothDeviceFound입니다. :Listen to find new 장치의 이벤트는 새 Bluetooth 장치가 발견되는 한 이 메서드가 한 번 호출된다는 의미입니다.
wx.getBluetoothDevices:블루투스 모듈이 적용되는 동안 이미 기기에 연결된 장치를 포함하여 검색된 모든 블루투스 장치를 가져옵니다. #🎜🎜 # 두 가지 방법의 소개를 보면 차이점을 알 수 있는데, 차이점을 이해하지 못한다면 어떤 문제가 발생할까요?
처음 wx.onBluetoothDeviceFound 메서드를 공동 디버깅에 사용했을 때 모든 것이 정상임을 확인했습니다. 디버깅하는 동안 장치가 하나뿐이었기 때문에 Bluetooth 장치를 다시 검색했을 때 발견했습니다. 두 번째로 이 장치를 찾을 수 없습니다. 이 방법의 경우 새 장치가 아니고 이전에 연결한 적이 있거나 어떤 이유로 Bluetooth를 통해 데이터 명령을 전송할 때 오류가 발생하여 다시 연결해야 하기 때문입니다. 같은 이유로 현재 장치를 찾을 수 없습니다. 현재 장치는 이 방법의 새 장치가 아니기 때문입니다그래서 wx.getBluetoothDevices 방법을 사용했습니다/** * 获取搜索到的设备信息 */ getBlue(){ var that = this wx.getBluetoothDevices({ success: function(res) { wx.hideLoading(); for (var i = 0; i < res.devices.length; i++){ /*that.data.inputValue:表示的是需要连接的蓝牙设备ID,简单点来说就是我想要连接这个蓝牙设备,所以我去遍历我搜索到的蓝牙设备中是否有这个ID*/ if (res.devices[i].name == that.data.inputValue || res.devices[i].localName == that.data.inputValue){ that.setData({ deviceId: res.devices[i].deviceId, consoleLog: "设备:" + res.devices[i].deviceId, }) that.connetBlue(res.devices[i].deviceId);//4.0 return; } } }, fail: function(){ console.log("搜索蓝牙设备失败") } }) },4. 블루투스 기기 연결
이전 단계를 통해 해당 블루투스를 찾은 후, 해당 블루투스 기기의 ID를 통해 블루투스 연결을 해주세요. 블루투스 장치
/** * 获取到设备之后连接蓝牙设备 */ connetBlue(deviceId){ var that = this; wx.createBLEConnection({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: deviceId,//设备id success: function (res) { wx.showToast({ title: '连接成功', icon: 'fails', duration: 800 }) console.log("连接蓝牙成功!") wx.stopBluetoothDevicesDiscovery({ success: function (res) { console.log('连接蓝牙成功之后关闭蓝牙搜索'); } }) that.getServiceId()//5.0 } }) },5. 서비스 uuid
을(를) 가져옵니다. Bluetooth 장치의 서비스 uuid#을 가져옵니다. 🎜🎜#
6 id으로 Bluetooth 장치의 특성 값을 봅니다. 블루투스 기기의 경우 데이터를 쓰고 전송하려면 특정 특성값이 있어야 하므로 위의 단계를 통해 얻은 ID를 사용하여 현재 블루투스 장치의 특성값을 볼 수 있습니다#🎜 🎜#getServiceId(){
var that = this
wx.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId: that.data.deviceId,
success: function (res) {
var model = res.services[0]
that.setData({
services: model.uuid
})
that.getCharacteId()//6.0
}
})
},
7. 백그라운드 서버에서 얻은 지침
getCharacteId(){ var that = this wx.getBLEDeviceCharacteristics({ // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, 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({ notifyId: model.uuid//监听的值 }) that.startNotice(model.uuid)//7.0 } if (model.properties.write == true){ that.setData({ writeId: model.uuid//用来写入的值 }) } } } }) },
8. 백그라운드 서비스에서 얻은 지침을 Bluetooth 장치에 기록합니다#🎜 🎜#
startNotice(uuid){ var that = this; wx.notifyBLECharacteristicValueChange({ state: true, // 启用 notify 功能 // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: uuid, //第一步 开启监听 notityid 第二步发送指令 write success: function (res) { // 设备返回的方法 wx.onBLECharacteristicValueChange(function (res) { // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串 var nonceId = that.ab2hex(res.value) //拿到这个值后,肯定要去后台请求服务(当前步骤根据当前需求自己书写),获取下一步操作指令写入到蓝牙设备上去 wx.request({ method: "POST", data: { xx:nonceId }, url: url, success: (res) => { //res.data.data.ciphertext:我这边服务返回来的是16进制的字符串,蓝牙设备是接收不到当前格式的数据的,需要转换成ArrayBuffer that.sendMy(that.string2buffer(res.data.data.ciphertext))//8.0 // 服务器返回一个命令 我们要把这个命令写入蓝牙设备 } }) } }) },참고: 다음은 두 형식을 서로 변환하는 방법입니다
sendMy(buffer){ var that = this wx.writeBLECharacteristicValue({ // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取 deviceId: that.data.deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取 serviceId: that.data.services, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取 characteristicId: that.data.writeId,//第二步写入的特征值 // 这里的value是ArrayBuffer类型 value: buffer, success: function (res) { console.log("写入成功") }, fail: function () { console.log('写入失败') }, complete:function(){ console.log("调用结束"); } }) },#🎜 🎜#참고: 위는 블루투스 연결의 전체 과정이지만 실제 사용에서는 확실히 그렇게 원활하지는 않을 것이며 블루투스를 통해 명령을 보내는 장치에는 특성이 있습니다. 즉, 누군가가 현재 블루투스 장치에 연결한 후입니다. , 다른 사람이 이 블루투스 기기를 검색할 수 없으므로 특정 개인이 특별한 상황에서 코드를 적극적으로 블루투스 연결을 끊고 다른 사용자가 사용할 수 있도록 기기를 해제해야 하는지 고려해야 합니다. Bluetooth 장치에 명령을 작성할 때 문제가 발생하기 쉽기 때문에 성공하려면 콜백을 여러 번 작성해야 합니다. 요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. . 추천 관련 비디오 튜토리얼:
전체 WeChat 미니 프로그램 방향성 심층 분석 영상 튜토리얼
위 내용은 WeChat 애플릿에서 Bluetooth 연결을 구현하는 방법은 무엇입니까? (코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!