利用机智云 Demo APP 同时控制开发板的 2个LED灯,那么我们首先就要创建一个有多路数据节点的设备,这里我们可以直接创建,也可以在原来的设备基础上加几个数据节点,方法都一样,这里选择重新建立新设备,怎么创建就不再赘述,创建成功的设备如下图所示:
) O# y* K s3 O- d1 L
( @- n2 @" M( s3 ?+ `2 t7 V
9 U( a5 k8 p* u2 I
j) L* E7 u+ }6 ? F2 d
注意数据节点的数据类型:- G4 `" P0 q3 Q. |
+ @, l, q- s/ X! p7 s6 z/ S
9 l/ x" a+ p y! O+ m- H! Z
9 _, F' q. g N) L2 P7 p m把复制工程的机智云协议替换掉,然后在按照移植过程添加部分代码,工程移植完成后,添加我们DHT11的代码:* }0 x# L8 {6 e0 _4 \9 \
$ B# s; y- |) N# Q3 t/ o
. s+ H9 s! d& c; ]$ P
/ E. R' V; J! J D2 M( R+ n+ S
在刚移植好的工程中,我们点击gizwits_protocol.h 文件下设备状态结构体 currentDataPoint,结构体定义如下图:- k. n- f# p. ]' ^% |: \( g' {8 C
& E6 s4 j b+ @. e9 [( V
+ U. O; m* e. f5 J
3 M$ H. z; ~, wDHT11 温湿度数据的上传,我们可以利用 wifi 的状态事件去触发采集,同样我们像获取NTP时间一样,定义一个wifi_sta标志位变量,在WIFI连接成功时将 wifi_sta变量标记为 1,如下图:
! W& c& s% h4 ?" ^# {& U
# }. [7 D; c! P" ]
5 y4 s; S% V0 P. H; v; I8 i' t1 \3 s
然后在我们的userHandle函数中实现上行(数据采集)处理,代码如下:
$ Z# h$ k2 r0 n$ a9 O
" `- O8 ]; y4 v8 o! w5 T- void userHandle(void)! W1 J& A) }2 q3 |; s0 d
- {
8 T8 c, D- ]* Q( _4 {4 ^ - static u8 t=0;
, N2 s. G; T( y" N: H9 s% O4 A - u32 temp= 0, hum = 0 ;//温湿度数据0 w% I. T8 y. k, O" R4 ^- k7 Y
- static uint32_t temp_num=0;% R B; k( _1 I% \$ c u y
- static uint32_t humi_num=0;
7 C4 { s6 @% w% } - . p% E5 P* G& g+ J3 U; v6 W; i
- if(wifi_sta)
7 x( E# ^/ Y) z - { c) V- t9 k3 {3 t3 T2 c
- if(t==10)//每2S读取一次4 L( ~* x) Y6 ?
- {
) A9 ?8 N( }3 |! f" e4 \' i - t=0;/ _6 j+ D2 q4 j! \2 a( i
- get_temp_humi(&temp,&hum);//读取温湿度
* @2 d- m8 k F1 @5 K$ ] - printf("temp = %d/hum = %d\r\n",temp,hum);5 y, ^4 d) P' [& J3 k+ }
- currentDataPoint.valueHT_11_T = temp ;//温度数据
% P4 a- m2 H; F2 S - currentDataPoint.valueHT_11_H = hum;//湿度数据$ O+ k1 w, d# e) o- O
- if(temp>=Temp_alarm)//温度>阈值
! ?7 d5 W( o. s2 a! C& j - {
* ?5 F- I* @3 G" o) R - temp_num=0;8 X8 t! ]5 R& ~# X% ~3 \
- currentDataPoint.valueTemp_alarm=1;//温度上限报警
+ K6 c2 f7 m+ I( B& Q0 n - printf("temp warning\r\n");, U$ L& y3 M1 ~4 }2 s% W5 E
- }( F$ z" D8 I$ a1 ?+ t5 g
- else: E3 I! j+ D1 _, h! l1 v M
- {
; Z0 S' Q1 E, a! D5 r - currentDataPoint.valueTemp_alarm=0;
, P4 ~& G6 q4 c# b9 d - printf("temp ok\r\n");, \+ L ?2 G9 I' ~
- }
6 ^! q7 W* l8 l6 ~ -
: ^" ~) x- w. M* V: t R - if(hum>=Humi_alarm)//湿度>阈值
4 h2 P4 \6 q2 p3 k - {
! B8 ]) v' H$ \) P) g - currentDataPoint.valueHumi_alarm=1;//湿度上限报警! G/ j" J+ e8 p& t# m+ i/ v0 h
- printf("humi warning\r\n");
! s1 w1 r1 Q4 `0 R* E - }0 |+ \; T4 y% @: L) @4 f. ?' I( M+ a
- else @$ {6 X' q" m1 S
- {
) E# M5 `; ]% _) J; r5 b - currentDataPoint.valueHumi_alarm=0;( m: g/ h0 b' N% k, I7 N. H
- printf("humi ok\r\n");# y$ p: _4 {1 n! p. H: r* F
- }
$ x5 l0 H, U |3 C( j - }
# S' K' @. m* P - if(t%2) LED0=!LED0;! C; u3 H( _! X# x3 D6 r* }
- t++;7 T4 B1 u/ Q; o$ e1 i* Q7 ^
- }! f% ~+ F7 |1 s5 c5 J7 ?* \
- else
/ t, s$ c$ a, ], f" l @ - {
- }' ~8 u7 w0 x' T" E - if(temp_num!=0||humi_num!=0), J5 I1 k1 h# N5 Y$ s5 `
- {& d/ C' |/ e* d/ U/ C5 c- Z
- temp_num=0;humi_num=0;
5 M5 t2 t9 |6 c' L* Z+ K' O - }
! [. \( _. z: Q4 R - }
7 _& H, K) o4 }' f. m0 T1 U4 E - }, t+ y: D/ Q, K0 g+ u
- , d# L# c0 d' G) N* F3 @
复制代码
1 J" @% F) B3 A5 M& }- s2 Z
. ]; N6 x) `- w |