比如我们利用机智云 Demo APP 同时单独控制开发板的 2个LED灯,那么我们首先就要创建一个有多路数据节点的设备,这里我们可以直接创建,也可以在原来的设备基础上加几个数据节点,方法都一样,这里选择重新建立新设备,怎么创建就不再赘述,可参考第一步:如何在机智云上创建自己的第一个设备,创建成功的设备如下图所示:
3 G; O9 t. d) @0 p
( v6 I, h2 O: a+ Z. P. S
+ Q( S6 W6 s W9 s6 D6 q6 j- e" P% L- X" b6 G
因为都属于开关控制,所以各数据点的类型我们都使用布尔类型
# j& ]# u k2 c* o! ^! ~3 y3 c s( F" l9 Q" d
0 k" r( T5 D2 O
8 p7 g' I4 e! Y, b. ] }2 h7 ^, [
同样的办法,生成其他平台代码并移植好,这里也不再赘述,请参考前面章节,因为添加了一个LED灯,所以LED就得对多的LED进行初始化代码如下:
( U+ C4 a; l. S- G6 ^8 k6 W* p3 F" N) Z( l
. \. s; N8 u( |: E! c( S# O+ p
* {2 x+ U! G U: V4 B2 O. Z6 M3 u我们点击 main.c 文件下设备状态结构体 currentDataPoint,结构体定义. h* \ C0 y6 c* L. I$ U9 E+ F
, t! C1 ^# N; F) p0 C& J7 |
9 j- _3 g" @( L+ k4 ~& q9 ^. @
2 f6 s/ Q h' l* z2 n- v o从图dataPoint_t 定义可以看到,数据类型和我们在创建的数据是一样的。
/ `! A, E- R1 O2 B `2 x/ s0 ~7 N! B* O
在gizwits_product.c 文件,在 gizwitsEventProcess()事件处理接口函数中,系统也自动将接口给我写好了,我们只需要在对应的数据点添加事件控制即可:* Y) I; U* y& M! k, T
4 b: B' ^* y+ E9 D a$ h1 M3 {7 b$ v* z
+ l+ N1 y; m* q" j2 |
E5 H& Z" V4 z7 z, U' A
将LED灯的代码添加进去就可以了,我们这里还是只用到了控制,没有数据采集,所以userHandle函数不要管他。% g. n6 O5 U! t1 j! W
+ U" ^' g- W! F7 D0 T0 p+ O加入main.c的代码进行下载验证,main.c代码如下:+ l' Y/ ~! F" K9 P. x' e
) D& n! s6 h/ W3 Y7 W. ?- \
- #include "led.h"2 f7 I5 \9 _ W4 }
- #include "delay.h"
" ^8 y7 Z) v) e8 ~: O5 t2 |' w* ~ - #include "key.h"
6 P( S/ ^5 P" E" K" W - #include "sys.h"" l/ t0 h5 ?8 b3 h+ _
- #include "usart.h"$ E8 |+ d- P9 w0 P3 O
- #include "timer.h"4 M/ P+ l4 B2 y; M) { i4 F# ?, \# @
- #include "usart3.h"
& h% X1 m& E9 U4 g4 T$ d/ O - #include "gizwits_product.h"
7 p, t& @% [: w& @# @8 w* l3 C - ; h5 R8 [! ]& J* t; z( P- T3 n
- u8 wifi_sta;
u$ `4 B7 `. {% t! o - 5 B' O' {! W! d+ p8 u2 J
- dataPoint_t currentDataPoint;
0 f/ Z+ ~% A+ Z5 D( J- [ - 0 X2 \4 d0 P6 {8 @1 Q
- void Gizwits_Init(void)
$ x( k z! {! o+ j5 z( t& s - {) i/ H2 _1 J! }7 s h" ?2 [
- TIM3_Int_Init(10-1,8400-1); //1MS( I+ S1 \ v8 d
- usart3_init(9600);//WIFI
: [7 E9 Y! w* l0 n" ~! V - memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));; ?8 Y- k4 b& m: t$ C% _1 B) d3 K
- gizwitsInit();//
3 ]! i' M1 f* {( @( G A - }1 ?6 J% P0 Q; l
! z6 T/ a( b& j( P- void userHandle(void){8 U2 Y9 P! q* P1 v. [
- }" ]% `0 W* H2 E
8 n; J* b1 B2 I/ C0 |$ }3 i7 p- int main(void)
9 O) Y! V, D* f- x - {8 f, U# O$ v& W2 f! U6 J |
- int key;
- y6 n3 n$ I" e' Q8 N6 p - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
; ?8 U- \. i3 z5 y4 [ - delay_init(168); , }9 @3 J3 i- U3 s+ |- R! N' b
- uart_init(115200); 7 w, Q% [& ^4 p7 q o
- LED_Init(); # J& w }+ M" U) z+ y9 F5 \8 N/ O
- KEY_Init();
: w' J2 K# k9 Y- h2 [- X - Gizwits_Init();* L0 Z1 T. T Z% L1 w, O# T" S6 M
- printf("------------------\r\n");
& A; Y! a- `: E) t, I' M - printf("KEY1:AirLink\t KEY_UP:¸复位\r\n\r\n"); / ?0 s1 c, e# F. s3 a# Z+ W7 a
-
# s# W7 P- O9 v# W3 d - while(1): G1 y% j4 p2 {& Z
- {
. X4 A- c- Q8 e L6 @) C | - userHandle();//上行处理
3 o5 M' b2 O4 d2 o- q
z4 ]: K: t5 T0 d, P- gizwitsHandle((dataPoint_t *)¤tDataPoint);//Ð协议处理! i& I$ d0 C) T) O# U4 l
- key = KEY_Scan(0);& e9 d3 b( d* M. r2 w
- if(key==KEY1_PRES)//KEY1
% Q0 B# f2 B x; A - {5 d" q' @/ E# l7 { D
- printf("WIFI进入AirLink模式\r\n");, Z6 g; ?5 t* |2 z$ g* c) s
- gizwitsSetMode(WIFI_AIRLINK_MODE);//Air-link 9 E& I, P& ?8 `# [
- }% B# W3 Z9 x \5 F
- if(key==WKUP_PRES)//KEY_UP
, [. {# Z) G- n6 m+ _ - {
+ i( A2 w# R1 L, F- H9 V8 {) V! R+ y -
$ c2 R- t W* w6 z/ ]( i - printf("WIFI¸请重新配置\r\n");
$ _5 W% u, A9 c, s( J# Q - gizwitsSetMode(WIFI_RESET_MODE);//WIFI
) _, U9 J) K3 k, ?/ n. ~$ y' }% y - }
# U% ~5 \% [. ^% _, K; d+ p - delay_ms(200);1 D3 O( ]+ O) C+ M6 p& g% k3 e1 A2 |4 W
- }* m( I8 J# b( F" ^+ ~
- }$ V" b0 _& s& d! Y5 }8 t8 E; J5 \
复制代码
5 _) a+ q& q2 J- N配置过程如下图所示:
# D$ p4 @9 O& a: ~( }
" A n# X% T1 x4 u4 f6 f1 q
U3 ~- F+ n' g
, i1 F9 A6 Y' T; D4 P# v
: C5 V* a' S7 s8 F" H( g) F+ }
+ Q I; o; c3 f e, k$ P9 b& y( B
# [* f2 u, o v2 W9 l# w |