利用机智云 Demo APP 同时控制开发板的 2个LED灯,那么我们首先就要创建一个有多路数据节点的设备,这里我们可以直接创建,也可以在原来的设备基础上加几个数据节点,方法都一样,这里选择重新建立新设备,怎么创建就不再赘述,创建成功的设备如下图所示:
4 L* m. N5 j" y1 H7 f5 s% m& T) t% o+ L' u( f* @
/ q; | e. Z/ V9 C. a1 X* Z& }% J/ X, E; ]/ n
注意数据节点的数据类型:% U( b" a# l- X* l9 g- a) C6 `+ j
0 y% H. m4 p' ~/ D
0 {* S# Q- `. d
" c8 [' g( [) k8 G1 t1 g# v K
把复制工程的机智云协议替换掉,然后在按照移植过程添加部分代码,工程移植完成后,添加我们DHT11的代码:
1 h7 `1 O2 b9 h! j! v6 o/ L; K" f q! J0 q9 V8 Z2 u$ ~
. ~3 Z: R* {% y1 M* n1 E; y, _
/ X- g; p; ?. Q5 q在刚移植好的工程中,我们点击gizwits_protocol.h 文件下设备状态结构体 currentDataPoint,结构体定义如下图:7 O: l1 P, j% t* F+ F
- o$ l7 `$ Q- I7 R/ @8 Q3 Q
! g6 b- s% \9 U7 F
, ~- a9 m( r/ @/ EDHT11 温湿度数据的上传,我们可以利用 wifi 的状态事件去触发采集,同样我们像获取NTP时间一样,定义一个wifi_sta标志位变量,在WIFI连接成功时将 wifi_sta变量标记为 1,如下图:
- D. b y! r, U2 @( }% o" w( Y( C& C$ O6 q1 c4 S
! g& g% J! v9 A n0 }0 H+ s+ B5 z J( j: p! O( ?
然后在我们的userHandle函数中实现上行(数据采集)处理,代码如下:8 z+ J" D b7 @
, ^. ^+ g4 V4 X' _3 p& C- n& |2 n# h- void userHandle(void)+ j! K# |" E$ ?: L9 _
- {4 \0 h8 J/ _8 a6 h8 I$ B/ M
- static u8 t=0;
& I8 g% N% M# L* U! I3 }* [. W% }7 s - u32 temp= 0, hum = 0 ;//温湿度数据) c& p; B/ v4 S8 C8 _6 C. d/ g9 v
- static uint32_t temp_num=0;
6 a7 w. v2 H4 w# `3 k! S1 K - static uint32_t humi_num=0;
) K" M Y" j3 s6 g - " w1 R, \8 }$ H$ \
- if(wifi_sta)5 O# t& G3 p7 [! ?3 z7 l3 u4 G
- {3 h# o5 n F% G3 }; F4 `# ]
- if(t==10)//每2S读取一次$ Z9 I. M6 T4 j
- {
& N8 b2 z# ]3 y% f - t=0;! ]% l) ~9 r# u9 E$ G7 B! _
- get_temp_humi(&temp,&hum);//读取温湿度
) e. i$ U7 H% B9 b - printf("temp = %d/hum = %d\r\n",temp,hum);
! f$ `+ d$ G& D+ a8 s% A8 N - currentDataPoint.valueHT_11_T = temp ;//温度数据! D }% |/ v) H. X1 m) T- Y
- currentDataPoint.valueHT_11_H = hum;//湿度数据
* _! U8 x [: A0 ~; u1 ] - if(temp>=Temp_alarm)//温度>阈值
. M% C& b7 Q4 E2 F5 u0 ?" X% q - {
4 q! o3 ^8 E. ^( ^7 V* X) x - temp_num=0;
2 n7 s- _' _, g0 o - currentDataPoint.valueTemp_alarm=1;//温度上限报警8 q7 ^2 j: \& e$ V3 k
- printf("temp warning\r\n");
# L+ C+ g) G# G( }2 y7 ?+ m& v2 l" P - }
& G* {' G: ]8 u$ ? - else/ w- b& C: u# ]" s% \9 |; ^- N! I
- {' J3 X( i/ u$ `5 p- ]5 h
- currentDataPoint.valueTemp_alarm=0;) q. @4 V* w3 c
- printf("temp ok\r\n");
! t# r3 I: M# N% J, X! O - }
, r1 |0 t+ }& c# \ - 2 q# G* F6 b5 P$ o6 s* f6 |
- if(hum>=Humi_alarm)//湿度>阈值
X' v1 x. I8 H* R, Y5 L+ _ - {
, A6 X. t2 A; {! B9 Q - currentDataPoint.valueHumi_alarm=1;//湿度上限报警" j& o6 {! g* \5 k4 ^% K
- printf("humi warning\r\n");" M& m) r, f, F8 E$ m" h) m$ i' H
- }
; M/ z% o$ h- M% V - else
3 z: j3 y8 h7 V/ D - {
+ j. {2 Y# B0 Y V X) L, k - currentDataPoint.valueHumi_alarm=0;: _7 \" y: Y) ~, x3 l+ G- W
- printf("humi ok\r\n");3 W$ k' Q+ E, o8 V
- }0 ]5 Y0 o7 }+ E! j
- }
/ F6 K$ @5 o" e4 Q - if(t%2) LED0=!LED0;
! Q" _7 ]0 ~2 H1 h - t++;# M5 X- [1 i$ A" `
- }
% q/ `$ R! B$ W; T) T4 x - else
- R$ ?: s, B( Q4 Y( V0 w. d: d. S - {+ C) x! @3 m+ z! S7 G- Z
- if(temp_num!=0||humi_num!=0)
* m z/ k2 z$ h9 G @: N - {
f; i5 N6 B4 ?' ], t0 z6 O4 F1 H2 z - temp_num=0;humi_num=0;) i4 w6 B3 c: C5 X
- }4 S6 n! s0 L& |2 @4 p1 @1 z
- }
0 l) x8 {" R9 G" M L9 o/ w$ K - }
& U' i$ s0 p4 n s: i1 v% l# G - $ e8 m- K/ G1 |, X
复制代码 ' M' ~) x) u$ z- `8 i+ i* o
3 N; x1 v. o, {' C2 x2 T |