2 l8 ^5 m! a* G7 z 编译/连接:1 `! ~5 I4 @' B) N) }' L6 m; A. e
: }& M$ u) P3 K: u7 L: A7 H7 m
[url=http://mico.io/ask/uploads/article/20150723/14ee93da638bb344905c2f6c7a8481ef.png]) I3 W& D. U) t! j: ~( s
9 F2 J* A, M# }8 G% x 5 P/ b/ R" ^ U 烧录/下载: 1 X* z5 a M- g/ b" l9 T : Y! \7 F0 V! S y+ c# d5 H[/url]! k2 F* d: L2 f: w' r/ r1 ~* d2 W
2 @0 X+ ?! K* t% s: n6 R
, @0 E: S7 Q) R5 s; {; z. z第八式:用网页编辑工具(sublime等)开发微信APP代码 9 H' M& A* H2 q4 u以下为核心代码及其注释 * A9 |8 x$ P+ ~2 l! c//应用程序入口在application_start(void),一系列动作(如配网、连接云等)以后,用户程序入口在这里。" e! N9 B- X3 |
OSStatus user_main( mico_Context_t * const mico_context $ L9 r7 j6 f0 s
{ 9 u: B: [) j/ G& E0 B5 r //user_log_trace();9 c$ }/ l9 n0 D* `" w! T# p6 }
OSStatus err = kUnknownErr;8 h) D c8 T2 T$ k( L8 g& i
fogcloud_msg_t *recv_msg = NULL;//接收数据结构体$ o9 w6 m Q0 X7 ~
json_object *recv_json_object = NULL;//结构体内包含json数据格式/ @( C8 H2 h7 ~/ _" `4 C6 S
/* rgb灯的色彩模式采取h***色彩模式(色相、饱和度、亮度) */' e- f( W2 q: ~, p( v
bool led_switch = false;//rgb灯开关1 K. z& M9 F) Y9 C% z
int led_hues = 0;5 g; X5 }7 Q; F4 F; z$ y6 i, w' A2 R! E
int led_saturation = 0;# `* [6 e$ u- m8 M: \
int led_brightness = 0; ! J4 M4 I$ t# P2 v require(mico_context, exit); ' Z; e. i5 X7 y h***2rgb_led_init(); // RGB_LED初始化 / w( ?* `$ M) I4 C9 K while(1){ : ?0 y/ u* m9 s+ y; x8 M mico_thread_msleep(100); //延时100ms P) F3 t C6 s# H9 U5 E/ V
// 检测 fogcloud 连接状态 ' m5 m7 f: b- A' @! m" r if(!mico_context->appStatus.fogcloudStatus.isCloudConnected){% q5 N1 c- ^- c, g* I
continue;( X1 ^: ?$ @& T! g6 O
}) K" S5 P" T+ g$ ?7 q! g4 ~0 C7 f
/* 1 u! S% @8 |% r3 y1 }/ T6 s, b
接收来自云端的数据 ! c m" j' H. ~# D recv_msg->data = +: |9 T; y, R8 x. }" {2 L
topic表示模块订阅的MQTT通道名,data表示云端返回的数据 7 x. j, V( ~ ^ */' j% i) i ~" O
err = MicoFogCloudMsgRecv(mico_context, &recv_msg, 100); ; y$ H+ `5 h- f: @ if(kNoErr == err){. t! G+ V5 t/ h) u8 @
// 打印 例://user_logtopic[30]=[de54a8ea/c8934691816b/in/write]data[23]=[{"rgbled_switch":false}]% M' M) e6 s0 K* h/ s$ C/ U+ s
user_log("Cloud => Module: topic[%d]=[%.*s]tdata[%d]=[%.*s]", . l" _# x O; N7 H3 J/ R) L% Z recv_msg->topic_len, recv_msg->topic_len, recv_msg->data, ) p. Q1 W5 }4 |7 hrecv_msg->data_len, recv_msg->data_len, recv_msg->data + recv_msg->topic_len); 8 G* I4 |; P5 d. n% X* t4 P* A) F// json格式的字符串数据转成json对象6 I7 f( w h4 f9 I" ]
recv_json_object = json_tokener_parse((const char*)(recv_msg->data + recv_msg->topic_len)); 4 r6 [! w& K8 J1 N+ f/ P- o if (NULL != recv_json_object) 6 v. I/ S4 {# V+ M8 e f: C3 a3 j4 m { 8 a5 y v* n# E& F; O/ e* f //根据键值对遍历 8 J2 `( ^" {2 o+ z json_object_object_foreach(recv_json_object, key, val) { D M; k! q3 X/ ]9 q if(!strcmp(key, "rgbled_switch")){+ o% v+ R7 i! q9 E. g" T9 U. z) ]
//如果键为"rgbled_switch",提取值“开关值” 5 u4 E6 a6 T) H6 e1 G; w led_switch = json_object_get_boolean(val); / H5 I& I& h4 Y
} 5 ^& l @! g6 s7 l/ q0 [& y else if(!strcmp(key, "rgbled_hues")){' `' Y) l4 C1 f
//如果键为"rgbled_hues",提取值“色相值" $ L9 W1 M5 W: H# n led_hues = json_object_get_int(val); # T; t. N* Q) ^ x. j* H }) d. c, \' p/ T: L( h7 [* i/ }
else if(!strcmp(key, "rgbled_saturation")){ . Y; p) u2 ~. U \3 b //如果键为"rgbled_saturation",提取值“饱和度值"" j3 N, e4 ^4 @9 r
led_saturation = json_object_get_int(val); 9 d$ {* f! C/ O% Z } t7 D6 @1 k) N7 s
else if(!strcmp(key, "rgbled_brightness")){0 p9 e5 U/ O2 [
//如果键为"rgbled_brightness",提取值“亮度值"4 o% ?+ b" C+ i. e
led_brightness = json_object_get_int(val);1 _, h) ^) y* x! U% j
} % |* E/ b, j4 O, k* m1 }/ } }4 E4 r6 l$ Z; l3 y
// 控制LED ' Q U8 Y1 G4 F) X, b! F if(led_switch){ 5 ^7 ^2 f1 d! |% ~: [9 l2 ^8 \# M h***2rgb_led_open(led_hues, led_saturation, led_brightness); 1 R; U, B0 ` i+ q9 y4 X' B }else{; K" Q# @2 f" @
h***2rgb_led_close(); // 关闭& k6 U9 y7 L( h
} L; c w6 }% O! |" r; A8 p1 ?, o
// json对象内存释放 2 U) K! ]8 i/ C7 M6 O: m( ~* o json_object_put(recv_json_object);; f* ?6 @9 ]" F* w) @( k l1 Q
recv_json_object = NULL; $ y7 P# N: Y5 e1 {' K }/ X- _4 ]8 n4 y% @; [5 ]+ s
// 结构体内存释放 & ~1 F& Q0 x0 T! ~0 x7 f1 n7 ~6 E% U if(NULL != recv_msg){ : s7 j+ E$ ]6 U6 d# G0 W* L free(recv_msg);5 T% g2 X1 |) U. U( V* W( f& ~
recv_msg = NULL; 9 k: \0 {% k; U# Q* i% m4 ` } : }% c/ E# [" O) C$ p }8 r+ o2 z* b! n- R% K: T/ n
}1 ^" ?9 E _7 B3 X
exit:0 h8 S% V0 j9 d5 }( S8 j1 H
user_log("ERROR: user_main exit with err=%d", err); % e# Y/ X" K. |$ O1 ^! O, X7 f return err;+ b V% o- P6 s* l
} 5 }: h: m/ l2 t2 I; J" f' {! a) ~, A* J; Z) |
! W5 v K" j7 t" Z! r, ?第九式:使用Github工具托管APP代码4 @0 K+ j6 j7 o% j8 _" D) b) u
在例程包中(MiCOKit SDK的APP目录下),找到微信APP控制页面代码(index.html和yourID.html),将yourID.html.重命名为你的产品ID,如cabca380.html。拷贝这两个文件到本地git仓库,再同步到git服务器。同步方法详见附件——上传文件到GitHub.zip。 4 W: E, Y4 V9 n0 A) t( D( Y8 Y6 J' u5 w) ~$ e+ R% O |3 q [* g
[url=http://mico.io/ask/uploads/article/20150723/97411f3674d23cb747a33172ee9c1284.png] S+ Z4 D0 M9 M3 s& g l! Z$ P9 V1 I) f. ~+ r$ H1 f
* p- } u p+ t: f9 N index.html —— OAuth按钮跳转到该页面(一般为设备列表页面,可不做改动) ; h' Z8 R6 O- P1 M1 \) o+ d% @, w8 j: R" O* w' K% a }( I [/url] + C9 z! t3 F9 d* X& V" e) l! m3 Y: `7 e: L6 ~! z- a
, m; Q; e. \9 @ i8 ~$ f xxxx.html —— 设备控制页面(其中xxxx为FogCloud上创建的产品id)8 @* L7 s/ v0 N. [2 U7 ~
& p% P2 {6 c8 j
5 Q# \- w$ w5 i- K8 `4 |
[url=http://mico.io/ask/uploads/article/20150723/bdd3e767bff5fdcf06f16b6ee478f57e.png]' j$ `. d1 }, U
9 ]" A0 g: ^- @7 t J9 b9 B# d _% _ 详细代码见附件代码包,部分代码解释如下: 0 `1 v9 b) f: q" c9 `* [, _. l5 W; b " g4 Q1 f4 u5 s 2 x% C# {, R: K: { c[/url] Q3 S7 `# l$ z _5 E' ?9 |
0 U8 s7 }- K* Y2 ~8 ~ E
- {( S4 ^/ z4 S# c- b: P
[url=http://mico.io/ask/uploads/article/20150723/041017556fe9d8bf147cab201e4055c6.png] ( L5 g2 M9 v7 c, g9 Q* y0 Y* _* {! d; E! @! W
' U' [$ i- `) ]% M3 ^2 y
* s `# A6 M, E+ o1 m
修改、并提交代码后,如果没有配置WebHook让FogCloud自动更新代码,则需要到FogCloud上手动点击“发布”按钮更新代码,并通过git提交记录确认是否更新成功。 # I8 J+ N+ U& ]$ `8 \& h4 s1 E( E3 r/ } p+ L# U+ ^
0 m, K- Y3 d$ l* C5 Y
第十式:FogCloud上生成设备二维码8 z* ^8 S1 Z2 }" ^; O; G/ f
(a) 创建新设备' b+ x* |9 N$ V# Z! s- _& F! b
, \- L% P' `; K[/url] # I( N5 _, Z" G* N. Q + `) _2 I! }" z ; c- h7 x1 d! D! a
(b)填写设备MAC地址(由小写字母和数字构成,设备上电后会向串口发送MAC地址及其他数据,可用串口工具查看)接口创建设备。 . ^7 v. r; d6 z: w ! J$ n B/ _- Y. |& `, n5 I3 d3 P$ [: d2 V% l: u! M8 L
[url=http://mico.io/ask/uploads/article/20150723/60addb425f19b481c3d2ea9346bbd71f.png] ! w& _" U# c. Y# C9 ` 7 f# a# I Y4 f8 E . U; s+ X6 s' F. {( A; K7 V# t2 A- d- x0 n( q
(c) 为设备生成微信二维码 F; O5 D/ a3 @/ H: u 点击“同步到微信”按钮: / Y6 n" Q7 N# v2 p2 M: y2 `
1 N, P [0 ]; e6 C. p& A+ h5 r [/url] - k: O; u' G9 X( L8 \. ?, U4 Q8 |' `; T k" u% p1 }
2 e" L* g- U/ A7 g% h 选择创建的产品和要使用的APP后点击同步按钮。 1 Z% H8 _& N5 ]8 Y F4 m' D# k! A$ @9 J9 d
[url=http://mico.io/ask/uploads/article/20150723/8391b8371fe9a3cf4338e65240989bf1.png] W; e' N5 J7 m& k6 d& {7 m4 q0 }7 W" Z