微信硬件平台蓝牙设备开发(二)

微信硬件平台蓝牙设备开发——控制

JSAPI:微信JSAPI是网页javascript的接口,通过JSAPI可以对支持该接口的蓝牙设备进行操作。例如扫描设备,连接设备,收发数据,绑定设备等。
其与JS-SDK的关系:微信硬件JSAPI接口属于微信JS-SDK的一部分,所以硬件JSAPI的使用首先需要遵循微信JS-SDK的使用规范。
1、绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。域名配置有误会报错 “invalid url domain”。
2、引入JS文件
新建html页面,并引入如下JS文件:http://res.wx.qq.com/open/js/jweixin-1.0.0.js
3、config接口配置

wx.config({
    beta:true,   //设置为true ,会在注入wx.invoke方法来调用还未开放的jsapi方法。
    debug: true,  //开启调试模式,
    appId:'wxf74686d92b161ff7',        //登录公众号平台可见
    timestamp: <%=timestamp%>,          
    nonceStr: '<%=nonceStr%>',        
    signature: '<%=signature%>',           
    jsApiList: [                //需要使用的JS接口列表,需要调用的方法都在此声明一下
        "openWXDeviceLib",//初始化设备库
        "closeWXDeviceLib",//关闭设备库
        "getWXDeviceInfos",//获取设备信息(已绑定的蓝牙设备列表)
        "sendDataToWXDevice",//发送数据给设备
        "startScanWXDevice",//扫描设备
        "stopScanWXDevice",//停止扫描
        "connectWXDevice",//连接
        "disconnectWXDevice",//断开连接
        "getWXDeviceTicket",//获取操作证书
        "onWXDeviceBindStateChange",//设备绑定状态被改变时触发
        "onWXDeviceStateChange",//监听连接状态
        "onReceiveDataFromWXDevice",//接收来自连接设备所发送的数据
        "onScanWXDeviceResult",//扫描到设备时会被触发
        "onWXDeviceBluetoothStateChange",//蓝牙开/关切换时触发
    ]
    
});


签名算法获取signature(附录1中)


需要参数:noncestr(随机字符串)、timestamp(时间戳)、jsapi_ticket(临时票据)、url(当前网页的URL)。

示例代码:http://demo.open.weixin.qq.com/jssdk/sample.zip


 
   
4、 初始化库
config 初始化配置成功执行,则会自动调用wx.ready(function(){});所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
wx.ready(function () {

	wx.invoke("openWXDeviceLib", {"brandUserName":"gh_248e6ca70bbb"}, function (res) {
		alert("openWXDeviceLib" + JSON.stringify(res));
	});
	wx.on("onWXDeviceBluetoothStateChange", function (res) {
		alert("onWXDeviceBluetoothStateChange::" + JSON.stringify(res));
	});
	wx.on("onWXDeviceBindStateChange", function (res) {
		alert("onWXDeviceBindStateChange::" + JSON.stringify(res));
	});
	wx.on("onWXDeviceStateChange", function (res) {
		alert("onWXDeviceStateChange::" + JSON.stringify(res));
	});
	wx.on("onReceiveDataFromWXDevice", function (res) {
  
		console.log("onReceiveDataFromWXDevice:: " + str);
	});
	});


5、扫描设备


需要绑定设备时则需先扫描设备,当到某个设备的时候,html会收到事件回调(onScanWXDevicesResult)。

function staScanWXDevice() {
		alert("staScanWXDevice");
//监听扫描结果
	wx.on("onScanWXDeviceResult", function (res) {
	    //解析res,获取deviceid,绑定设备需传人此字段 
	});

//开始扫描
	wx.invoke("startScanWXDevice", {"btVersion":"ble"}, function (res) {
	});
}


6、绑定设备

/绑定设备
//先获取操作凭证(type为获取的操作凭证类型,1:绑定设备 2:解绑设备)deviceId  是扫描设备时解析出
wx.invoke('getWXDeviceTicket',{"deviceId":"gh_248e6ca70bbb_5aab93a29ec00965","type":1},function(res){
    if(res.err_msg !="getWXDeviceTicket:ok"){
            alert("获取操作凭证失败,请重试");  
            return;
    }else{
                alert("获取操作凭证成功");  
    
        //2. 绑定操作应有后台完成,此处将deviceID和操作凭证传给后台进行绑定   
        //绑定操作需传入用户对应的openid,后台数据库应存储此字段
		// 获取openid 需进行网页授权
//https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html }
});
        


7、收发数据

当前用户绑定设备成功后,再次打开公众号时将尝试自动连接所绑定的设备,android 微信连接成功如图,当连上设备之后,即可对设备进行收发数据。收发数据前需进行base64的编解码。

发送数据:

wx.invoke('sendDataToWXDevice', {'deviceId':'gh_248e6ca70bbb_5aab93a29ec0xxxx',"base64Data":base64encode('xxxx')}, function(res){
	   	alert("connectWXDevice"+JSON.stringify(res));

    if(res.err_msg =="sendDataToWXDevice:ok"){
            alert("数据发送成功");
    }else{
            alert("数据发送失败");
}});

接收数据:

//接收数据
    wx.on('onReceiveDataFromWXDevice',function(res){ 
	//base64解码
    });
以上实现了与蓝牙硬件设备间的信息交互,发送特定的指令到设备来实现对蓝牙硬件的控制。


你可能感兴趣的:(WeChat)