初中有幸与蜜蜂结缘,但是由于要读书,或者平时没在家,而蜜蜂对生成环境计较苛刻,喜欢安静,干燥,并且在黑暗的环境中,如果管理不好就会造成蜜蜂逃的逃,跑的跑,不仅没有产量反而蜜蜂都跑完了,目前就在想有没有可以远程监控蜂箱的方法。( i4 p8 J/ m& G d B) Q0 r
" ]0 I# Z1 w$ W' @1 I2 ~
8 ^, N4 i+ }8 \# o我的方案使采用STM32F103C8T6作为主控,然后用涂鸦的三明治开发板VWXR2接入涂鸦云。
: u1 V, E3 W* K( T. ~+ [C:\Users\dell\Desktop\涂鸦
1 W& Y, s& ?4 x
" E5 R$ L' c3 `0 K0 U( s" g4 ?$ ?, h& u% B+ h
如果是新用户先注册一个账号( x2 d! ]6 j1 H& p' i2 M& s; B
; f/ _$ D6 ]5 h. n5 H* Q8 F
' q, a7 V5 P/ J5 }* Y9 t8 VC:\Users\dell\Desktop\涂鸦\涂鸦新建文件夹
8 {, P- J% g1 ]( H2 c7 Q' d+ T7 v& Z
9 U( I6 W- z# _
注册成功后登陆,然后点击创建产品,流程我上传来,产品创建成功后,下载全部文件,但我发现我做的蜂箱智能养殖系统,系统的功能和我的不符合,这时需要进入自定功能3 B$ L* j0 Z U7 x8 H
( p) T _- m5 i9 [
C:\Users\dell\Desktop\涂鸦\新建功能点- c( `2 R9 o' }0 W$ R
+ n! g) v* \4 t: W还有就是设备面板,如果不符合自己的要求,可以自定义0 o' c/ f O4 p" @0 P+ v0 k+ n
在开发途中,如果又不懂的,可以点击右上角的文档,进入涂鸦开发者,里面有特别详细的讲解,并且b站上也有视屏讲解,可谓是非常的仔细,非常适合初学者& j# ~& w' m: F2 }+ G& ]4 ?
接下就是移植sdk7 x. @- E; s& t' t
在原有的工程文件添加 sdk文件,并且把.c和.h文件加入4 X$ t3 b' }" F( n
- U$ s( S# w2 t+ o' X, N$ V% k" ] t5 @
C:\Users\dell\Desktop\涂鸦\sdk
& u2 H! j: \2 U! O* u6 Y' K& \3 n0 N
6 G/ q" `/ X% `. G. w4 S2 m
点击编译,并按照工程报错进行相应的更改,涂鸦在这里也是做的非常详细,只要双击错误,就会跳到错误那里,然后涂鸦在报错那里有中文提示6 b) t9 k5 ^3 o" u$ G
3 {4 }/ `# n( Z
[" J; ^5 h! [- I% Y: \C:\Users\dell\Desktop\涂鸦\错误
5 h ~' I& f9 }: s4 X& Q5 W; g
6 }3 O4 E0 l! d( z+ o1 v1 j) Z
5 ^8 J7 b: P- c, T% q后面的就接着操作,值得注意的是,改完过后会遇到
( u9 p6 y& `! B; E' ]# m X: `) O1 O7 B6 ?2 i+ N/ t( G9 j- K
! e5 F+ T$ x% V' o
..\USER\stm32f10x.h(522): error: #40: expected an identifier
( @( ?% C/ {' d2 d typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
% X" J0 G% I+ r- R% G( a) X( m; {6 z..\USER\stm32f10x.h(522): error: #40: expected an identifier
* |0 M" o5 O" Q. W m typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;6 w8 X2 s0 e9 p
..\USER\stm32f10x.h(525): error: #40: expected an identifier
" Y$ Q# x" H6 E2 }8 X; Z typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
! \% o) W# `+ }# \..\USER\stm32f10x.h(525): error: #40: expected an identifier
) ~9 k( T: O9 ]: w- W( V; [* N这时只需在WiFi.h中添加头文件 #include "stm32f1xx.h" 来解决
9 l/ w$ b' c$ p1 p0 H5 |* e2 I1 e+ J& R2 \; [, |
9 F0 Z3 R6 W4 V1 L7 p. rC:\Users\dell\Desktop\涂鸦\错误一2 I4 X4 o% u3 A% r) b/ Y( S
添加完成后,只需打开自己所需的功能点) o) S3 b8 t* P9 Y6 l
0 h2 p2 h! ]) }
: p% S0 I) e3 M- H& J3 {
C:\Users\dell\Desktop\涂鸦\功能点: t/ W H8 m2 ?5 M8 j: ^
/ F3 ?$ J7 r, s0 \' n' C/ |: j
% |! [$ r# D2 n6 V9 Q: x然后在主函数中调用wifi_uart_service();并且初始化wifi_protocol_init();,然后就是配网操作,这里可以用按键,首先调用重置函数,然后调用配网模式选择,根据自己的需求选择模式,下载程序,利用涂鸦小助手进行配网,小助手在下载的文件中有,配网成功后,只需把刚才调用的两个函数屏蔽就可以,这样不用按键也行,不过大家尽量使用按键,方便。6 ^# ^# V' L9 K
' B2 ]+ J1 F! i9 W* R. ^4 v6 S+ W. k* d$ b* j4 F8 s
C:\Users\dell\Desktop\涂鸦\配网) h* l, A% M4 ]. c! u
' K7 `# A* V2 h# d. t E
2 Y6 O+ E* d( L) \( A9 W+ V; r
接下来就是写自己所需功能的函数了,采用超声波检测蜂箱是否有巢虫,具体思想是,蜂箱的长度固定,我只需检测蜂箱底部的长度即可,只要检测的蜂箱长度小于蜂箱的实际长度,便可认为蜂箱有巢虫。当检测蜂箱有巢虫时,并用LED灯进行报警。
. Q7 R5 |3 F* } Y# \& ~3 P$ f) B2 p0 x; ]- `- p) V# Q& L
1 x6 }& s, Z- K然后蜂箱盖检测,检测蜜蜂是否处于黑暗的环境,采用光明电阻检测,当光敏电阻的值低于2600时,并用ledC13作为警报,可认为蜂箱的环境不是黑暗密闭的。. `9 B$ X; ]3 b& R) ?( e
接下来就是蜂箱内的温室度,这是一个很重要的组成部分,我采用的dht11,通过mcu读取,将温湿度实时上传客户端。
" p/ C1 O5 G: p+ I6 P. y( r- T- g& {; l( \/ e/ E
& ^4 \) t' I* \$ FC:\Users\dell\Desktop\涂鸦\全图, _0 {. r0 @% ]2 Q. x2 e
- ( K2 b2 N8 R. ]) h7 C4 U% L
- #include "dect.h"! l. J; f8 o5 J/ ~* G1 E
- #include "adc.h"! z; k0 ?3 ?" d5 ]/ q/ l
- #include "dht11.h"' U8 U2 z1 U$ u" b( s8 a
- #include "wifi.h"3 D H P: C2 h& D% O
- #include "led.h"
( U7 M7 C U* P5 I/ ] y - #include "UltrasonicWave.h"9 c8 R7 t `5 y
+ |6 C7 a) c: }! W! z" C* q- void Detect_Read(void)
% ^ W: T, G6 ?2 T/ n - {
# Y0 q5 M/ \6 o7 I# o8 o -
! @2 u, V5 ~3 s+ g2 I5 J. d# h6 r9 l - Dht11_read();) ?, a0 W7 S$ F% E( c# @
- get_voit_d();1 v3 q% `1 `" J; ]
- get_voit_g();+ [! U2 j8 B( O$ ^' ]% }7 t- G
- UltrasonicWave_StartMeasure();' J! Q+ |' J9 d3 r
- chaoshengbo();7 |; k$ m' p$ j( e
-
9 {5 |" O4 E& i5 g! L- b -
8 ?! z/ L9 R: U* n& a2 _2 ~ t j - }
( z7 j8 [) Y+ y. H+ P7 s3 u - //采集光敏电阻转换为亮度值 A1引脚0 U2 l: X- Q) E8 b# a1 i6 m& t
- void get_voit_d(void)
[' O8 P' r" p( i2 H; ] - {
; `$ M% C& C- L# t2 B" X$ s - float light;
: m; ?7 \8 o8 z- {) D6 e- ^/ P -
5 C5 r, L' {9 P; F" `3 Y- M - light =Get_Adc(1) ;
2 m. h* a2 D8 Q N - if(light<2600)% E4 l1 ~( ?% B [, y* H+ t
- {) c1 U* X" |" r' l1 N3 K
- mcu_dp_enum_update(DPID_COVER_STATE,0); //当前蜂箱盖状态枚举型数据上报;
/ E0 s7 i& J D1 B5 n - GPIOC ->BRR =GPIO_Pin_13; U/ O9 \/ z1 V+ u
- }3 p) l4 h; z' y& h$ f
- else
( S! ?2 }5 T; K1 ^2 m - {% [' Y3 L' T) `! Z0 Z
- mcu_dp_enum_update(DPID_COVER_STATE,1); //当前蜂箱盖状态枚举型数据上报;, ]8 b& ? b% _4 [6 n
- GPIOC ->BSRR =GPIO_Pin_13;
5 b/ ?# `; g' n+ @& x - } 8 T) B/ H& O- l4 r
- // printf ("%f\r\n",light);& g) t! }4 n1 G) K1 `
- }
, d( A8 R7 B+ S: B
) |' @" {& E* x! @ `- : l' o3 h$ ~7 O
% O' d' j5 z/ t7 i- //采集电源电压 A0引脚
! @, h9 z/ C% h6 y5 d8 G - void get_voit_g(void )4 }# }3 ~" B# J' Z( b; q
- {% y( V* N( s. b8 v4 P+ r
-
9 [. I, n8 U% z! c6 X w - float voit;
" v# h2 n/ u1 |7 A5 ?6 m$ @ - voit=Get_Adc(0) /4096.0*3.3;2 E, t9 ~! k' I: `/ ^4 z
- voit=voit/3.3*100;# ` D0 w4 I9 ~
- mcu_dp_value_update(DPID_BATTERY_PERCENTAGE,voit); //当前电池电量VALUE型数据上报;
* ]1 G: \: M- Y8 Q - // printf ("%f\r\n",voit);
2 O# R; ]. Q2 r6 e - }
/ ~/ z5 K. N, s% M& A& k3 ?2 _, s
1 J0 x& ]* x1 D, Z4 D- /**********************超声波距离计算***************************/# a, ^* y8 V3 y3 {8 O
- void chaoshengbo(void)
5 b$ I! c8 `* }1 j1 D" c$ [/ `% j9 w - { 9 _( u# a b# R. g1 N6 L5 O
- float juli;: U, Z# Z) `; V/ W* a- N `% e- {
- juli=TIM_GetCounter(TIM1)*5*34/200.0;
' S+ K% g+ W: C F9 p - if(juli<8&&juli!=0) % ^: q- q3 y. k+ M- I" ]
- {5 ?( Q1 o/ b, ]. [9 R ?
- mcu_dp_bool_update(DPID_CHECK,1); // 当前巢虫检测 BOOL型数据上报;
( z5 g1 _$ P" R$ Z2 i, \ - GPIOB ->BRR =GPIO_Pin_4; $ e# `, n; j* [2 S. o3 S( V; J( G
- }
4 o5 M4 M) n7 c- L- m: i( @. h - else! n, r) q8 H1 r8 P
- { & U0 J# w1 H3 c n" _! v" C
- mcu_dp_bool_update(DPID_CHECK,0); // 当前巢虫检测 BOOL型数据上报;
! u; q, r" c, h) e0 f1 U- q: F0 B - GPIOB ->BSRR =GPIO_Pin_4;5 x% s* F/ O! k- L( U# K* _
- }
& q8 y1 R3 ?; B$ Q X+ |6 S - }
' x4 {/ K1 e4 i! y* f f - void Dht11_read(void)+ @) X/ l, P# R7 E" ?# G% N7 x
- {
. A* ?6 H) Q) Y9 T6 F - u8 temperature; ' {5 F3 B* d) v D8 d+ Q1 K
- u8 humidity;6 O/ C: g5 o3 u$ S
- DHT11_Read_Data(&temperature,&humidity);
; {8 R9 ^- G8 U6 [7 { - mcu_dp_value_update(DPID_NOW_TEMP,temperature ); //当前温度检测VALUE型数据上报;
% j) C! K3 s& n6 v! i7 D - mcu_dp_value_update(DPID_HUM,humidity); //当前湿度检测VALUE型数据上报;
4 B% d) C, n/ D* L8 Q0 q% i! k! m - // printf("temperature=%d\r\n",temperature);
1 |3 U8 o) k6 ^" J% e5 [8 {$ e) p - // printf("humidity=%d\r\n",humidity); 4 Q# s2 l+ ]0 l: N+ V- ?+ M
- }
复制代码- #include "sys.h"0 A% k& V D: X g
- #include "usart.h"
2 k7 b! o) t) ~* U" @ - #include "usart2.h" + }) _5 c- r6 m- i1 P4 U. ]
- #include "led.h"4 `7 Z& z: N3 P- w
- #include "delay.h"2 \! ~9 J9 G+ U: I* C, x
- #include "wifi.h"- u) B! c$ G* G- R5 _# n% O
- #include "adc.h"4 D/ V# O+ h$ s
- #include "dht11.h"
4 @: x R8 o2 {% c3 w# g# j' y - #include "dect.h", `5 h" p2 [) z/ D: ?* [8 m7 H
- #include "timer.h"3 y3 O$ Z" O5 W5 l# G( {! |
- #include "UltrasonicWave.h"" G. Z# @* m) ~( v# G3 B* S
- int main(void)
6 p+ p/ k$ M! A1 j - {
- h8 O- l) Z0 M/ N5 u7 m' D6 s/ w8 A - : |4 a- @5 }; W, M j3 o
- delay_init(); //延时函数初始化
" G9 t# W. `4 @- F/ g' I - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2% c: D6 m0 r, d- N, z: E
- DHT11_Init();, }# n. ^6 ]: r# b/ V4 M
- uart_init(9600);//用于WiFi模块通信
1 l5 L# T5 k& U - uart2_init(115200);//用于串口通信
& O7 l7 @2 m% _5 n# c% S- L - LED_Init();//用于报警模拟
9 S2 O4 R7 i b& U d& W! A - Adc_Init();. G7 d6 x/ d7 \ G0 h
- Timerx_Init(5000,7199);7 j7 ]* w3 o: h9 W
- wifi_protocol_init();$ e9 {! C& C0 s8 _/ r
- UltrasonicWave_Configuration();
: r J5 x9 r, W0 P4 \ - // mcu_reset_wifi();
' _. { Y- A7 [/ B9 | - // delay_ms (10); P7 `+ O1 U! ]. C# U
- // mcu_set_wifi_mode(SMART_CONFIG );
) u$ m$ K6 j. L( b" r -
* m8 Q1 s' g+ }5 \+ ~2 B4 M - while(1)
; b& [1 w$ L- y: V$ R0 @* \ - {* M4 X3 v5 G. Z" @0 E7 G3 x8 Q M
- wifi_uart_service();2 E7 m4 Y3 b/ o2 j& N& R8 `
- Detect_Read();
$ B/ q7 K% t {- e; k - }
8 L# e: r7 t, C: g; D" W B - }
- w# i1 y/ c1 }" E$ v; {( {
复制代码 源码连接gihub) i& m$ c& B* ~: c6 ], q1 ^2 @
github.com/18785275440/tuya-mcu-sdk.git
0 f! m- ]* C+ r6 ~ I \. g, y, y* d4 H3 N+ Q; ?6 A+ m2 z) a
6 B' r. M$ S/ a; j" m `
5 v9 ^2 L9 T, u5 K9 N! f4 N* ?6 Z |