|
4.9. 使用Github工具托管APP代码- m2 A n& D+ ^" l 在例程包中(MiCOKit SDK的APP目录下),找到微信APP控制页面代码(index.html和yourID.html),将xxxxx.html.重命名为你的产品ID,如cabca380.html。拷贝这两个文件到本地git仓库,再同步到git服务器。同步方法详见《上传文件到GitHub》。& Y d7 _ k/ F0 E, y. D# ^% W index.html —— OAuth按钮跳转到该页面(一般为设备列表页面,可不做改动)& Z. s9 Y m; j, [ xxxx.html —— 设备控制页面(将xxxx替换成FogCloud上创建的产品id)6 a! l- x& j. R/ E9 g7 @ 详细代码见附件代码包,部分代码解释如下: <script> // 从url中获取某个参数的值" R2 ]. R' h1 n! ^6 i function getParameterByName(name) { var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' '));3 [3 O; f' d5 {& I4 p }3 X3 [. G; S2 S5 k // 得到设备ID0 W; n; C7 C: w4 J9 T var device_id = getParameterByName('device_id');: m W% O0 \8 z // 如果设备ID不为空,则执行连接MQTT的操作 if ( device_id !== null ){ ez_connect(device_id); } // 连接MQTT服务 function ez_connect(device_id) {5 F! Q2 g/ F/ u // 获取access_token // access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。 // 正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效5 D3 N% M5 ~1 F- ^. A& ^ var access_token = getParameterByName('access_token')4 @9 Y3 E. o6 ]: `4 d, B: A2 F // websocket连接 // wsbroker:host! D2 d) I7 j& p) d+ p // wsport:端口 默认1983 // Client-ID : v1_web_[MAC] //版本号_app_手机MAC(必须是12位小写)7 W& W2 x- e8 @* t) w$ g+ |! r var wsbroker = "api.easylink.io"; //mqtt websocket enabled broker' Z, p: ?+ Q! y' }& V var wsport = 1983 // port for above var client = new Paho.MQTT.Client(wsbroker, wsport, "v1-web-" + parseInt(Math.random() * 1000000, 12)); // 基本参数配置$ s( @( K% H% C- V6 S K // 连接丢失所对应的callback函数/ O: |( x1 e1 d/ @/ n2 d client.onConnectionLost = onConnectionLost;. c; v/ [1 F) C* h" T5 q // 消息到达所对应的callback函数% w/ m5 }7 I8 ~& S1 Y& [9 G client.onMessageArrived = onMessageArrived; // 连接成功所对应的callback函数 client.connect({onSuccess nConnect});4 R2 g7 a! d D8 G// 连接成功( C* E$ a+ `. v function onConnect() { G4 N0 _5 F- O0 R. F var subtopic = device_id+'/out/#'; // Once a connection has been made, make a subscription and send a message.0 I. U8 q) E9 K2 h6 \9 z* U% u // 向某个通道发送指令 // topic:通道 // commond:指令 client.publish = function(topic, commond) { // console.log("现在执行-->:"+commond); message = new Paho.MQTT.Message(commond); message.destinationName = topic;/ W* q1 J2 {/ Y6 ` client.send(message);( }( v- D; I: X8 s ? } // console.log("device_id:"+device_id); console.log("onConnect"); client.subscribe(subtopic, {qos: 0});' u. {; x& _. f2 P }5 Y3 z$ i3 n" s# R- U% ^ // 连接丢失; J0 \5 ^7 h/ i6 h function onConnectionLost(responseObject) {! P6 `. G3 E% k if (responseObject.errorCode !== 0), H9 ^' p+ l7 B4 Q. A console.log("onConnectionLost:"+responseObject.errorMessage); }0 b0 M& O8 |) Z // 消息到达 // var msgindex = 1;+ u1 [& [8 a9 H$ ? var msgjson;: l6 A/ F3 W2 f2 P- F ` function onMessageArrived(message) {( X. m; L3 h& S) n msgjson = $.parseJSON(message.payloadString); var tempval = msgjson.dht11_temperature; if("undefined" != typeof(tempval)){ // 显示温度# F5 d5 w- {3 U* o! p) V8 m( ] $("#tempid").text(tempval+"℃"); // 显示湿度 $("#humiid").text(msgjson.dht11_humidity+'%');5 e* ^) ?3 ^% D- c0 C // 温度超过29则红灯亮,20-29之间则绿灯亮,低于20黄灯亮 if(tempval > "29"){, o' ^8 R7 H- _1 C led_red(); $("#rgbimgid").attr("src", "./image/02-red.svg");( y7 o0 `; o* C8 A }else if(tempval < "30" && (tempval > "19")){ led_green();* R& h1 \; @1 ^: w+ g $("#rgbimgid").attr("src", "./image/02-green.svg"); }else if(tempval < "20"){ led_yellow(); $("#rgbimgid").attr("src", "./image/02-yellow.svg"); }9 G7 o2 }0 P7 W" R A } } // 控制按钮显示的事件7 {+ s7 I8 e) h7 Y+ X C' V: o $("#switchbtn").click(function() {0 d+ L3 e N( ^( Z) x; K1 \ var topic = device_id+'/in'; var commond;+ H( G# X; a% K* w var swtimg = $("#switchbtn").attr("src");# }5 T, F* R) e8 _- m5 G if("./image/03-turn-on.svg" == swtimg){- Y. R8 G5 y' \0 p# y9 e commond = '{"device_switch":false}'; $("#switchbtn").attr("src", "./image/03-turn-off.svg"); $("#switchspan").text("关");# W. F. L3 t) d' k; P9 V# ? }else{/ j0 H, R% y' ]! K2 R$ W* m commond = '{"device_switch":true}'; $("#switchbtn").attr("src", "./image/03-turn-on.svg");# h2 a& F( W# k6 o) |5 }0 i $("#switchspan").text("开");# T; j* s5 {) }5 T8 E& e3 r }/ W. M& ]% n* A client.publish(topic, commond);( a, j& _7 {0 Z+ R1 c% u2 p }); function led_red() { var topic = device_id+'/in'; var commond = '{"rgbled_switch":true,"rgbled_hues":0, "rgbled_saturation":100, "rgbled_brightness":100}'; client.publish(topic, commond); }/ F+ s. Y: t5 D! R( D function led_green() { var topic = device_id+'/in';! D0 N4 f8 ~0 ^& a0 s* | var commond = '{"rgbled_switch":true,"rgbled_hues":120, "rgbled_saturation":100, "rgbled_brightness":100}'; client.publish(topic, commond);) j8 {+ E# E/ G# y; g! F' D; O } function led_yellow() { var topic = device_id+'/in';- M4 m. m4 g9 k1 F$ V3 W var commond = '{"rgbled_switch":true,"rgbled_hues":60, "rgbled_saturation":100, "rgbled_brightness":100}'; 2 X" D7 `& n! }6 r- l) K client.publish(topic, commond);4 J% x0 X0 c3 L2 p( c } }. x& U, L' ^% G! _8 @5 s* q8 O" G </script>) U) G- m- T" b7 |, Q1 [ 修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。 ! D# H. l Z' a3 Q; } 4.10. FogCloud上生成设备二维码. M) V _6 F8 x8 V (1)创建新设备 (2)填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串口工具查看)接口创建设备。 (3)为设备生成微信二维码 点击“同步到微信”按钮,选择创建的产品和要使用的APP后点击同步按钮。. I' c7 A4 }" x9 d g 成功后提示:{"result":200,"message":"success"}, v7 N1 ]; R5 b2 L# V! Y8 B 返回到产品界面,可看到你的新设备。; A+ p+ l9 g; D& T5 t. Z& ?; ^ 极少数情况会出现result:500问题。解决方法: (1)确认步骤4.6节中微信测试号已开通所有测试功能。$ p' X$ q2 `1 t (2)因为微信公共平台具有“延时”的问题,等待几分钟后重试。0 x6 ~5 r# k7 p 4.11. 使用手机微信扫码,测试“Airkiss”配网功能以及设备控制功能 (a) Airkiss配网+ }7 u5 P9 o! w: Q' j Airkiss技术可以帮助你的设备在没有人机交互的情况下智能配置当前Wi-Fi环境的SSID及密码。(假如你的智能设备是一颗灯泡,总没有屏幕和按键让你输入SSID及密码吧) 按设备上的Easylink按钮进入配网模式,底板上的LED(D1)灯快速闪烁; 手机输入当前所在环境的wifi密码,点击连接,成功或超时会自动跳出该页面。 (b) 设备控制3 m' N7 i. }; X: I, J) R: `9 j Airkiss配网成功后会跳转到设备列表,红色圆点表示设备不在线,蓝色圆点表示设备在线。 注意: (1)若配网成功后,没有自动跳转至设备列表页面,请确认步骤4.9节中设备页面html文件名已改为FogCloud中的产品ID。, G7 E9 x6 L% {+ V" M (2)若配网成功后,设备依然显示设备不在线,可点击右上角刷新按钮。 点击列表进入设备控制界面,点击控制按钮,控制MiCOKit-3288扩展板上的RGB LED灯。( @/ z! g4 o7 [5 ^6 @2 F6 j 7 x; W* X# z4 \/ X' `) G 已经配网成功的设备不需要再次进行Airkiss,只需点击测试公众号中的“Devices”按钮,进入设备列表,点击设备进入设备控制界面。此时能收到MiCOKit发上来的温湿度数据,也能控制LED的开关。在温度为20度以下时,LED灯成黄色;在温度为20到30度时,LED灯成绿色;在温度为20度以下时,LED灯成红色。 如果您完成到此步骤,那么恭喜您又通关啦!! 通过本案例主要向大家展示了MiCOKit上下行通信的功能。 没有完成也不要灰心,仔细参照本文检查之前的步骤,如果还有问题,请移步至MiCO社区http://mico.io Good Luck! ) I3 n+ m5 p6 I3 t+ f% k3 D 5. 版本更新 - K9 i1 N# V4 d6 Y6 Z2 A / }5 v: N6 E$ ^% a" W9 v MiCO.io Wiki 下载页面 http://mico.io/wiki/doku.php?id=micokit_sdk# Q- m& v/ I8 v/ {8 G |
微信公众号
手机版
好东西当然大家一起分享哈~
什么时候可以申请到板卡啊!好期待啊,底板最好是STM32单片机的哦