利用机智云 Demo APP 同时控制开发板的 2个LED灯,那么我们首先就要创建一个有多路数据节点的设备,这里我们可以直接创建,也可以在原来的设备基础上加几个数据节点,方法都一样,这里选择重新建立新设备,怎么创建就不再赘述,创建成功的设备如下图所示:
+ \0 m4 O3 S% B" C5 p% K) k! h! c; G5 p% X1 n/ O
* H7 e" ?/ i- _& I+ l9 o+ S0 Y& z. U5 R
2 O5 I8 [0 z8 T3 m% t注意数据节点的数据类型:
6 U2 K+ [* A7 z7 K1 @9 a$ f6 r- s2 T; n3 u, {* u m# ]: p" r5 @# x# a
! i- T7 z k4 Q$ W$ Z' j8 H: B
2 F* \! }* e+ d/ L- Q把复制工程的机智云协议替换掉,然后在按照移植过程添加部分代码,工程移植完成后,添加我们DHT11的代码:
) V' u3 Q, d% y; K3 w( D$ }; G- c& j3 j5 o
9 I7 r0 K% \9 c( }
! E* \, J1 f. I$ g+ J# O在刚移植好的工程中,我们点击gizwits_protocol.h 文件下设备状态结构体 currentDataPoint,结构体定义如下图:0 |" ?8 J7 P j
: m4 S, X r9 c( T
/ l7 L% ]) f) ~+ V v- c" q1 W( _/ H0 k) j" S7 I m
DHT11 温湿度数据的上传,我们可以利用 wifi 的状态事件去触发采集,同样我们像获取NTP时间一样,定义一个wifi_sta标志位变量,在WIFI连接成功时将 wifi_sta变量标记为 1,如下图:; {7 \8 c% S1 ~3 z3 |1 @, q
& S2 p/ c- e$ [5 i. _" E: h
! G+ I: ^7 m% j
9 H E& ]# |" ~0 @6 J然后在我们的userHandle函数中实现上行(数据采集)处理,代码如下:
" Z4 u' f8 B+ L0 y- D1 x$ C I) p# O7 t0 e, c; G2 Y7 B/ z- T" R
- void userHandle(void)$ f. r4 `5 [8 m: j0 i7 S" m; a
- {
& x. M: O, n5 d( A - static u8 t=0;# o+ z7 r8 e9 d- ?* z- I3 O- C- |
- u32 temp= 0, hum = 0 ;//温湿度数据
7 V$ h# \- L! ? x4 D# p. \ - static uint32_t temp_num=0;0 p* R- G# J; o! i
- static uint32_t humi_num=0;
2 q' d0 V9 m: B6 { - 8 u) X: ?9 M9 a1 } y( d0 {/ M
- if(wifi_sta)
5 c9 B$ R3 d: v+ t' q6 s5 C! U0 E - {
- r; z/ o7 P \. t - if(t==10)//每2S读取一次 c8 v3 j' J; ?0 N
- {6 O- P9 u& l4 p O# P) D
- t=0;2 V) P$ ]* \1 h: E; ]
- get_temp_humi(&temp,&hum);//读取温湿度
& I6 t, x* J- ]1 j1 S4 B: Q - printf("temp = %d/hum = %d\r\n",temp,hum);
3 N! J& J* E& M! V - currentDataPoint.valueHT_11_T = temp ;//温度数据& S9 P3 P, `, p4 @0 [8 k2 U
- currentDataPoint.valueHT_11_H = hum;//湿度数据9 G& N' o% G. k* H# n; U, z1 o
- if(temp>=Temp_alarm)//温度>阈值$ Z/ L/ [9 Z: I, ]5 R: f
- {2 I; R- n/ h! y6 S; m3 t
- temp_num=0;. M. x' W' ^* F! J! s: A
- currentDataPoint.valueTemp_alarm=1;//温度上限报警
( P+ p( G1 x9 Y; d, w - printf("temp warning\r\n");
1 P2 d0 |2 B" d2 G - }
4 r! L, w( i/ r - else
5 t( r. |! i" k/ @3 }3 Y - {
' | x7 v' b( {. m( T2 L R/ F - currentDataPoint.valueTemp_alarm=0;
5 @: @- A; {" y9 Y* u) Q, H - printf("temp ok\r\n");3 _( Q( g ~, p$ o7 y$ o
- }% v7 c" s, ~- j) u
-
7 Z/ _* K" o c! a; d+ W7 R& d5 e - if(hum>=Humi_alarm)//湿度>阈值
* k7 I6 T3 q9 m6 _* z9 x% o - {
7 a& e4 d, h3 ], J+ z2 H- F - currentDataPoint.valueHumi_alarm=1;//湿度上限报警
! S% S) L: I2 J6 \$ m1 f, F2 C - printf("humi warning\r\n");
; H8 D# B) ^5 a' |0 { - }8 S/ n% h3 B9 h, _- }% f f
- else
# h+ c. C! N8 t& L" L% ^6 g - {
x5 I" N! l9 K6 G, M$ E! d - currentDataPoint.valueHumi_alarm=0;
5 P! q$ v* W8 X& F7 \3 K - printf("humi ok\r\n");
' q2 c. N0 l# o+ Q" x( C/ ~, Y6 q - }; h1 n" o Z9 m& |; G; ^
- }
, |% m# n. j& m4 ^; D - if(t%2) LED0=!LED0;6 O- c$ t- O4 E0 B4 j, R$ `0 C
- t++;
7 Z1 }5 S1 X( N - }
8 u; }5 Z. ?; Y- x - else9 t3 R! {9 k8 Q% j
- {! T1 c# K c1 T( d9 E- y3 {0 m
- if(temp_num!=0||humi_num!=0)+ S# b2 t! k* H
- {9 A `' y( B5 D& n
- temp_num=0;humi_num=0;
' X" h/ B0 S! T - }$ H) M) c8 L4 ?+ A/ u7 x
- }
! P. v9 i' _' {6 Z% u' H2 V - }7 S. z5 F# X( ^4 b
6 [* i" l; Q( J+ e0 n1 y
复制代码 % \! p( m% `) ]' o
3 _4 s0 r: l) ~ |