你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MiCOKit微信控制综合开发实例(下)

[复制链接]
micolover2015 发布时间:2015-7-30 11:13
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 @
详细代码见附件代码包,部分代码解释如下:
, y9 F5 U# i2 I' e7 M<script>
' q' B+ S2 ]5 ]    // 从url中获取某个参数的值" R2 ]. R' h1 n! ^6 i
    function getParameterByName(name) {
3 ?9 }1 k$ C3 A. T$ G5 H' I0 b        var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
5 T: D' I' n( x4 s        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的操作
. f2 ?$ g0 ?( D* `8 Z" y6 ]8 T    if ( device_id !== null ){
  B4 o6 y4 g' R; e        ez_connect(device_id);
) }  ~- v3 e9 [6 u    }
. r6 K/ P# h" p, M9 o2 {    // 连接MQTT服务
6 j" F) v5 d' H6 g5 U, V    function ez_connect(device_id) {5 F! Q2 g/ F/ u
        // 获取access_token
9 x; f: P! \. r2 \1 q        // access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。
6 G  Q% V8 ?1 j, X( Y) |* j+ n        // 正常情况下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连接
; |* w7 b1 q$ f7 y        // wsbroker:host! D2 d) I7 j& p) d+ p
        // wsport:端口 默认1983
* l1 n/ H0 Y6 _4 ^9 q        // 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
) x* ~/ P1 @# s: B        var client = new Paho.MQTT.Client(wsbroker, wsport, "v1-web-" + parseInt(Math.random() * 1000000, 12));
+ `; E8 T0 v$ E' M! L" p, W        // 基本参数配置$ 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;
4 `7 T. O9 k: {' O0 w& W/ V        // 连接成功所对应的callback函数        
9 }3 N3 X9 C! I        client.connect({onSuccessnConnect});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/#';
) f) m/ [3 E: r8 w! ]) E. i  F/ _* _9 c            // Once a connection has been made, make a subscription and send a message.0 I. U8 q) E9 K2 h6 \9 z* U% u
            // 向某个通道发送指令
! I1 g" B& ?# J" w' c& l            // topic:通道
6 q" _* b/ g9 l/ s5 G            // commond:指令
: F7 m+ x) w5 C$ Q1 e* }; S            client.publish = function(topic, commond) {
  r5 C% B; [) z  ?* o) P$ Y                // console.log("现在执行-->:"+commond);
% \* S0 m4 R2 ?5 p7 q' m8 i                message = new Paho.MQTT.Message(commond);
9 U* x, N" z+ n( i                message.destinationName = topic;/ W* q1 J2 {/ Y6 `
                client.send(message);( }( v- D; I: X8 s  ?
            }
5 @$ \5 ]0 R9 q( ?8 I            // console.log("device_id:"+device_id);
3 R/ {. `& J1 t! X& c" s            console.log("onConnect");
1 i% S2 ~+ |  U" J9 y. A/ _            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);
) C; O; H* k0 K) [        }0 b0 M& O8 |) Z
        // 消息到达
/ z% Q) d: G' l  i6 _8 j        // 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);
7 w% X" Z1 s" a4 j) B( |5 P            var tempval = msgjson.dht11_temperature;
0 J5 J5 d2 `- W) ?) L2 E: Q            if("undefined" != typeof(tempval)){
8 C/ x) R, o- {8 w, s                // 显示温度# F5 d5 w- {3 U* o! p) V8 m( ]
                $("#tempid").text(tempval+"℃");
9 {0 o% x; h' ^* v  z                // 显示湿度
. I. o. A  z9 I( @& b                $("#humiid").text(msgjson.dht11_humidity+'%');5 e* ^) ?3 ^% D- c0 C
                // 温度超过29则红灯亮,20-29之间则绿灯亮,低于20黄灯亮
( n  A9 C4 R: L8 m                if(tempval > "29"){, o' ^8 R7 H- _1 C
                    led_red();
9 n4 `2 x2 X& n& ~4 r# I9 x                    $("#rgbimgid").attr("src", "./image/02-red.svg");( y7 o0 `; o* C8 A
                }else if(tempval < "30" && (tempval > "19")){
, p. g( n* p; M0 t) l' T. l                    led_green();* R& h1 \; @1 ^: w+ g
                    $("#rgbimgid").attr("src", "./image/02-green.svg");
  |% m- P2 m4 B1 \/ I+ Y) K                }else if(tempval < "20"){
. ~# r+ r/ I8 L, @                    led_yellow();
3 m% S/ H! l' C0 b) J/ ]                    $("#rgbimgid").attr("src", "./image/02-yellow.svg");
* S9 u+ G) ]! d! V" q$ |                }9 G7 o2 }0 P7 W" R  A
            }
1 M$ ~8 k5 {9 w' G- }  Z        }
3 M- R$ `5 |4 ^        // 控制按钮显示的事件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';
! ?( d' X& D9 z* E% W& E            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}';
4 `3 T* x/ {& K% J3 z                $("#switchbtn").attr("src", "./image/03-turn-off.svg");
' [0 Z) y% S" a* w                $("#switchspan").text("关");# W. F. L3 t) d' k; P9 V# ?
            }else{/ j0 H, R% y' ]! K2 R$ W* m
                commond = '{"device_switch":true}';
# _8 S9 F0 u' x! h9 `                $("#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
        });
: n5 p  k7 g  {5 U3 L1 A( N7 T6 E        function led_red() {
  V( ?5 D0 T5 ^4 m8 f7 j* t            var topic = device_id+'/in';
6 m( F8 W6 O9 S3 H# h            var commond = '{"rgbled_switch":true,"rgbled_hues":0, "rgbled_saturation":100, "rgbled_brightness":100}';
# L% z6 g+ P( S6 g8 [: w; d' |/ F' O            client.publish(topic, commond);
. Z9 X" r6 D) q( R6 S  r' h0 {" G3 s        }/ F+ s. Y: t5 D! R( D
        function led_green() {
; r" z2 L3 Z8 O2 N0 ]            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}';
# u/ U8 ~% Q+ E6 m            client.publish(topic, commond);) j8 {+ E# E/ G# y; g! F' D; O
        }
; L7 F; z% F* p- b& R! b6 x        function led_yellow() {
2 j- A  |. }0 e* J            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
        }
8 @# `3 o. c' A9 f% B}. x& U, L' ^% G! _8 @5 s* q8 O" G
</script>) U) G- m- T" b7 |, Q1 [
修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。
2 Q1 w  v  W- O0 D! D# H. l  Z' a3 Q; }
4.10.        FogCloud上生成设备二维码. M) V  _6 F8 x8 V
(1)创建新设备
) F7 d9 ]6 U' ~6 G) H(2)填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串口工具查看)接口创建设备。
6 h! |0 T* f+ [* _8 B9 t(3)为设备生成微信二维码
$ V5 k- I) }: d4 k9 j, S" y6 ~/ l2 i( k点击“同步到微信”按钮,选择创建的产品和要使用的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问题。解决方法:
% e  i# q+ _* ^2 ?3 i6 N% l; B(1)确认步骤4.6节中微信测试号已开通所有测试功能。$ p' X$ q2 `1 t
(2)因为微信公共平台具有“延时”的问题,等待几分钟后重试。0 x6 ~5 r# k7 p

& ^0 y3 y+ I' d2 ^/ ^. t1 V4.11.        使用手机微信扫码,测试“Airkiss”配网功能以及设备控制功能
# S; \( A- @" Z3 y(a) Airkiss配网+ }7 u5 P9 o! w: Q' j
Airkiss技术可以帮助你的设备在没有人机交互的情况下智能配置当前Wi-Fi环境的SSID及密码。(假如你的智能设备是一颗灯泡,总没有屏幕和按键让你输入SSID及密码吧)
) t# t3 e, x4 c! v' K+ l按设备上的Easylink按钮进入配网模式,底板上的LED(D1)灯快速闪烁;
3 W, S; t8 R6 H: x" k& p( K- Z+ ]手机输入当前所在环境的wifi密码,点击连接,成功或超时会自动跳出该页面。
  d0 i0 P0 W" v(b) 设备控制3 m' N7 i. }; X: I, J) R: `9 j
Airkiss配网成功后会跳转到设备列表,红色圆点表示设备不在线,蓝色圆点表示设备在线。
. p  d9 m& ~7 B$ n/ |; F2 [注意:
0 S4 W( A6 V. H9 q9 E) G* r$ F8 l(1)若配网成功后,没有自动跳转至设备列表页面,请确认步骤4.9节中设备页面html文件名已改为FogCloud中的产品ID。, G7 E9 x6 L% {+ V" M
(2)若配网成功后,设备依然显示设备不在线,可点击右上角刷新按钮。
- i3 z" a* y! E- T  R点击列表进入设备控制界面,点击控制按钮,控制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灯成红色。
  ]  c+ s8 p" R! I      
0 o7 t9 Q/ Y/ g8 `, s" ]$ a/ X5 @      
5 y9 ~3 i/ T6 {5 p0 T       3 `# u0 v( x# H0 G
如果您完成到此步骤,那么恭喜您又通关啦!!
% t0 s2 ]# d/ K' [& t通过本案例主要向大家展示了MiCOKit上下行通信的功能。
' w1 C, R+ b) e. Z- i没有完成也不要灰心,仔细参照本文检查之前的步骤,如果还有问题,请移步至MiCO社区http://mico.io
. z0 ^4 |) T$ N+ IGood Luck!
  b& Y3 @4 R1 z7 w$ y7 ~. M. V- ~) I3 n+ m5 p6 I3 t+ f% k3 D
5.        版本更新
0 Q2 y: O4 U! K2 c4 j  q: i4 H( q- O% I' B
/ F: S2 [) g( H9 V1 ^! M8 y
- K9 i1 N# V4 d6 Y6 Z2 A

* \+ v# J1 J/ H; C6 p# d# h0 o6 s/ }5 v: N6 E$ ^% a" W9 v
MiCO.io  Wiki 下载页面
' d  Z/ s/ _9 D$ {& ]http://mico.io/wiki/doku.php?id=micokit_sdk# Q- m& v/ I8 v/ {8 G
赞 收藏 1 评论6 发布时间:2015-7-30 11:13

举报

6个回答
戏如人生 回答时间:2015-7-30 14:47:39
谢谢分享!!!!
micolover2015 回答时间:2015-7-30 17:13:30
戏如人生 发表于 2015-7-30 14:47
! q# ]1 P7 ^! m谢谢分享!!!!
: n' @% k$ K% R% `& O
好东西当然大家一起分享哈~
戏如人生 回答时间:2015-7-30 20:50:17
micolover2015 发表于 2015-7-30 17:13* c9 `- H6 ?. G) m  j
好东西当然大家一起分享哈~
3 `5 z7 j/ K: s# R( m; ^( q/ E- J$ F/ \( `
什么时候可以申请到板卡啊!好期待啊,底板最好是STM32单片机的哦
chifen 回答时间:2015-7-30 21:40:18
帮顶一下                    
你好我好大家好! 回答时间:2015-7-30 21:45:27
谢分享     
JZZGB 回答时间:2018-3-20 22:46:37
谢谢分享!!!!!!!!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版