您的位置:首页 > 移动开发 > 微信开发

微信公众号--设备功能----微信硬件数据上传

2018-02-09 16:48 441 查看
1、

js代码

<!DOCTYPE html>
<html>

<script type="text/javascript" src="../../js/jquery-1.9.1.js"></script>
<!-- 微信jssdk -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

<script type="text/javascript">
function base64_to_bytes_array(base64String) {
var result = new Array();
if (base64String.length % 4 != 0 || base64String.length == 0) {
return result;
}
var b64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
// 先将后面的字段转换成原来的Byte数组
var len = base64String.length;
var endBytes = new Array();
if (base64String.charAt(len - 1) == "=") {
if (base64String.charAt(len - 2) == "=") { // 有两个等号的情况
var s1 = base64String.charAt(len - 4); // 后面的第一个字符
var s2 = base64String.charAt(len - 3); // 后面的第二个字符
var v1 = ((b64Chars.indexOf(s1) << 2) & 0xFF) +
(b64Chars.indexOf(s2) >> 4); //这个就是最后面的一个字节
endBytes[0] = v1;
} else { // 只有一个等号的情况
var s1 = base64String.charAt(len - 4); // 后面的第一个字符
var s2 = base64String.charAt(len - 3); // 后面的第二个字符
var s3 = base64String.charAt(len - 2); // 后面的第三个字符
var v1 = ((b64Chars.indexOf(s1) << 2) & 0xFF) +
(b64Chars.indexOf(s2) >> 4); //这个就是最后面的第一个字节
var v2 = ((b64Chars.indexOf(s2) << 4) & 0xFF) +
(b64Chars.indexOf(s3) >> 2); //这个就是最后面的第二个字节
endBytes[0] = v1;
endBytes[1] = v2;
}
}

var times = base64String.length / 4;
for (var i = 0; i < times - (endBytes.length == 0 ? 0 : 1); i++) {
var startIndex = i * 4;
var V1 = base64String.charAt(startIndex + 0);
var V2 = base64String.charAt(startIndex + 1);
var V3 = base64String.charAt(startIndex + 2);
var V4 = base64String.charAt(startIndex + 3);
result[i * 3 + 0] = ((b64Chars.indexOf(V1) << 2) & 0xFF) +
(b64Chars.indexOf(V2) >> 4);
result[i * 3 + 1] = ((b64Chars.indexOf(V2) << 4) & 0xFF) +
(b64Chars.indexOf(V3) >> 2);
result[i * 3 + 2] = ((b64Chars.indexOf(V3) << 6) & 0xFF) +
b64Chars.indexOf(V4);
}
return result.concat(endBytes);
}

wx.ready(function() {
var DEVICEID = '';
var SENDSTR = '';
//初始化设备库 需填写参数 公众号的原始ID
wx.invoke(
'openWXDeviceLib', {
'brandUserName': 'gh_d0a3'//公众号的原始ID 需要修改
},
function(res) {
// alert("openWXDeviceLib|err_msg:"+res.err_msg);
if (res.err_msg == 'openWXDeviceLib:ok') {
if (res.bluetoothState == 'on') {
if (res.isSupportBLE == 'yes') {
//获取到设备信息
wx.invoke(
'getWXDeviceInfos', {
'brandUserName': 'gh_d0a3'//公众号的原始ID 需要修改
},
function(res) {
if (res.err_msg == 'getWXDeviceInfos:ok') {
//alert('获取设备信息成功');
for (var i = 0; i < res.deviceInfos.length; i++) {
var did = res.deviceInfos[i].deviceId;
var dstate = res.deviceInfos[i].state;
if (dstate == 'connected') {
DEVICEID = did;
}
}
if (DEVICEID == '') {
//  	alert('没有设备信息');
//window.location.href = 'qrcode.html?v=1.0.3';
// wx.invoke('startScanWXDevice', {}, function(res){
// 	alert("扫描设备返回:"+res.err_msg);
//  });
$.toast("还未绑定设备", "text");
return false;
}
} else {
alert('获取设备信息失败');
return false;
}
});

} else if (res.isSupportBLE == 'no') {
alert('手机不支持BLE');
return false;
}

} else if (res.bluetoothState == 'off') {
alert('手机蓝牙没有打开');
return false;

} else if (res.bluetoothState == 'unauthorized') {
alert('用户没有授权微信使用蓝牙功能');
return false;
}

} else if (res.err_msg == 'openWXDeviceLib:fail') {
alert('初始化设备库失败');
return false;
}

});

//手机蓝牙状态改变时触发 (这是监听事件的调用方法,注意,监听事件都没有参数)
wx.on('onWXDeviceBluetoothStateChange', function(res) {
//把res输出来看吧
alert("onWXDeviceBluetoothStateChange:" + res.err_msg);
});

//设备绑定状态改变事件(解绑成功,绑定成功的瞬间,会触发)
wx.on('onWXDeviceBindStateChange', function(res) {
//把res输出来看吧
alert("onWXDeviceBindStateChange:" + res.err_msg);
});

//设备连接状态改变
wx.on('onWXDeviceStateChange', function(res) {
//有3个状态:connecting连接中,connected已连接,unconnected未连接
//每当手机和设备之间的状态改变的瞬间,会触发一次
//alert("onWXDeviceStateChange:"+res.err_msg);
});
// 接收到设备数据
wx.on('onReceiveDataFromWXDevice', function(res) {
alert("res.base64Data:"+res.base64Data);

var Bytes = base64_to_bytes_array(res.base64Data);
alert("Bytes:"+Bytes);

});

});

wx.config({
beta:true,                  //坑:这个很重要,必须配置这个为true,才能调用微信的硬件API
debug: false,               //是否开启调试模式,会自动弹一些消息框显示微信返回的数据
appId: '${appId}',
timestamp:'${timestamp}',
nonceStr: '${nonceStr}',
signature: '${signature}',
jsApiList: [                //需要调用的接口,都得在这里面写一遍
"openWXDeviceLib",//初始化设备库(只支持蓝牙设备)
"closeWXDeviceLib",//关闭设备库(只支持蓝牙设备)
"getWXDeviceInfos",//获取设备信息(获取当前用户已绑定的蓝牙设备列表)
"sendDataToWXDevice",//发送数据给设备
"startScanWXDevice",//扫描设备(获取周围所有的设备列表,无论绑定还是未被绑定的设备都会扫描到)
"stopScanWXDevice",//停止扫描设备
"connectWXDevice",//连接设备
"disconnectWXDevice",//断开设备连接
"getWXDeviceTicket",//获取操作凭证
//下面是监听事件:
"onWXDeviceBindStateChange",//微信客户端设备绑定状态被改变时触发此事件
"onWXDeviceStateChange",//监听连接状态,可以监听连接中、连接上、连接断开
"onReceiveDataFromWXDevice",//接收到来自设备的数据时触发
"onScanWXDeviceResult",//扫描到某个设备时触发
"onWXDeviceBluetoothStateChange"//手机蓝牙打开或关闭时触发
]
});

</script>

</html>


2、上面的代码需要修改的部分

①   'brandUserName': 'gh_d0a3'//公众号的原始ID ,2处需要修改

②   微信jssdk需要准备参数,在之前的文章中有提到,这里不再解释

3、注意,设备接收的数据根据相应硬件传输的格式解析。

// 接收到设备数据
wx.on('onReceiveDataFromWXDevice', function(res) {
alert("res.base64Data:"+res.base64Data);

var Bytes = base64_to_bytes_array(res.base64Data);
alert("Bytes:"+Bytes);

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐