基于微联小智SDK构建Web端智能设备控制

物联框架 智能设备 ESP8266 | 2017-02-04 10:16:25

摘要:基于ESP8266快速实现WEB端智能设备控制;通过微联小智实现远程智能控制LED灯亮灭、快闪、慢闪,并将结果反馈至控制界面...

一、构建准备工作

1、免费帐号申请:点这里 获得相关通信KEY
2、其次技术指标:HTML, JS
2、下载SDK库 welinker.js
3、开发工具:Notepad, Visual Studio 2015, Notepad 这里用的是 Visual Studio 2015,如果你对Html JS熟可以用任何ide来开发。
4、硬件ESP8266开发板点这里购买, 每个开发板都会有一个id 如:00000064000E0001具体的硬件的程序烧入id生成 等我们另一篇再讲述。

二、实现


1、先去申请免费帐号获得相关通信KEY。



获得KEY: BF1E8F637B804C73A936EDC9B349EE26
此KEY为我们的SDK 跟设备云通信的KEY



2、代码部分

引入Juqery和SDK
jquery.min.js / welinker.js

Welinker.js


              配置sdk的 loginKey 为前面注册申请的key
              此开发板有4个led灯
              比如需要控制 LED1 灯的开与硬件端对商定的协议命令为:
              LED1=N LED2=O LED3=O LED4=O  ok控制灯的命令我们已经知道,下面就通过sdk下发命令
                

 
                var cmdStr = "LED1=N LED2=O LED3=O LED4=O";  
                //命令字符串 其于不同的设备只需改动此命令即可现实控制,前提命令是跟硬件层沟通好的
                  var out = new ArrayBuffer(cmdStr.length);   //创建一个buffer
                  var u8a = new Uint8Array(out);    
                //通过buffer 建立一个数组 注意数据必须是Uint8Array的 sdk通过全部采用字节通信
                  var o = 0;
                  var strs = cmdStr.split("");
                  for (var k = 0; k < strs.length; k++) {
                        u8a[o++] = strs[k].charCodeAt(); //把命令封装到数组当中
                   };
                //调用sdk下发控制命令
                var deviceid = 0x10010000;  //不同设备类型id不一样。
                var thid = "00000064000E0001"; //设备id
                var returnNum = 0;  //此次命令是否需要硬件回数据的条数控制默认可以不用回
                var returnWait=1000*3   //命令下达超时时间  默认3秒
                welinker.DeviceControl(thid, deviceid, 0, 3000, out);
                
                至此控制命令已经完成
                
                如果我们界面上需要显示设备的时时状态数据,那我们就需要注册回调涵数来处理
                
                welinker.CallBackonMessage(message);  //注册信息回调函数 一句话。简单吧
                
                //自己申请的函数。处理设备云回发的数据  
                  function message(type, result, data) {
                             ///参数说明
                            ///type 回发的数据类型  login
                            ///result 状态
                            ///data数据  为字节
                            if (type == "Login") {
                                deviceAutoReadState = false;
                                if (result == 0) {
                                //当登录成功后 调用下读取设备的数据
                                    SmartHomeDeviceMonitoringInformation();
                                } else {                    
                                 alert("当前网络不可用,请检查你的网络设置!");                  
                                }
                                return;
                            }
                           
                            if (type == "DeviceAutoRead") {
                                //判断是否要重启DeviceAutoRead机制
                                if (result == 0) {
                                    deviceAutoReadState = true;
                                } else {
                                    deviceAutoReadState = false
                                }
                            }
                            if (result == -13) {  //结果是-13说明设备离线了               
                                alert("你的设备已离线,请检查设备网络!");                
                            }
                            var length = 0; //获取设备上来的数据长度
                            length |= data[8] << 8;
                            length |= data[9] << 0;
                            //从那个开始 到那个结束  把纯设备数据取出来
                            var resultData = data.slice(10, data.length);
                
                            if (result == 0) {
                                var val = "";  //转换出来后的字符串
                                for (var i = 0; i < resultData.length; i++) {
                                    val += String.fromCharCode(resultData[i]);
                                }
                                alert("String :" + val);              
                                //处理灯的状态显示 判断是否有LED1灯的状态				
                                if (val.indexOf("LED1=") >= 0) {
                                    var index = val.indexOf("LED1=") + 5;
                                    var value = val.substr(index, 1);  //取到值 
                                    alert(“LED1灯的状态:”+value);
                                };
                                //判断是否有LED2灯的状态			
                                if (val.indexOf("LED2=") >= 0) {
                                    var index = val.indexOf("LED2=") + 5;
                                    var value = val.substr(index, 1);
                                  alert(“LED2灯的状态:”+value);
                                };
                                //判断是否有LED3灯的状态	
                                if (val.indexOf("LED3=") >= 0) {
                                    var index = val.indexOf("LED3=") + 5;
                                    var value = val.substr(index, 1);
                                  alert(“LED3灯的状态:”+value);
                                };
                                //判断是否有LED4灯的状态	
                                if (val.indexOf("LED4=") >= 0) {
                                    var index = val.indexOf("LED4=") + 5;
                                    var value = val.substr(index, 1);
                                alert(“LED4灯的状态:”+value);                 
                                };
                            };
                        };
                
                    var deviceAutoReadState = false;
                        function SmartHomeDeviceMonitoringInformation() {
                            //此为读设备状态命令
                            if (deviceAutoReadState == false) {         
                                welinker.DeviceAutoRead(thid, deviceid, "LedState", 3000);
                            }            
                        };
                
                        //errno 状态表示说明
                        //#define SBC_ERR_OK           0
                        //#define SBC_ERR_NOTHING     -1
                        //#define SBC_ERR_NODEVICE    -2
                        //#define SBC_ERR_LOCKED      -3
                        //#define SBC_ERR_TIMEOUT     -4
                        //#define SBC_ERR_INTASK      -5
                        //#define SBC_ERR_CRC         -6
                        //#define SBC_ERR_APPKEY      -7
                        //#define SBC_ERR_INVARG      -8
                        //#define SBC_ERR_NOMEM       -9
                        //#define SBC_ERR_ISSLAVE     -10
                        //#define SBC_ERR_OUTSERVICE  -11
                        //#define SBC_ERR_UNKNOW      -12
                        //#define SBC_ERR_OFFLINE     -13

                
Demo 点击下载 | 在线体验
相关文章