你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32F103与涂鸦智能的智能蜜蜂养殖系统

[复制链接]
STMCU-管管 发布时间:2021-5-31 10:25
初中有幸与蜜蜂结缘,但是由于要读书,或者平时没在家,而蜜蜂对生成环境计较苛刻,喜欢安静,干燥,并且在黑暗的环境中,如果管理不好就会造成蜜蜂逃的逃,跑的跑,不仅没有产量反而蜜蜂都跑完了,目前就在想有没有可以远程监控蜂箱的方法。
7 B1 [1 }6 }9 q1 ?; t( _; k. @0 i. J  w4 L) h

) U0 o/ u/ p' H' ~我的方案使采用STM32F103C8T6作为主控,然后用涂鸦的三明治开发板VWXR2接入涂鸦云。0 h" G. M% E+ u0 B' [& X
1.png
C:\Users\dell\Desktop\涂鸦0 `1 d1 a! m1 U2 H0 B
8 l# Y6 r: j1 N8 g
% R# }# g7 x$ b7 y
如果是新用户先注册一个账号
( M. D0 j3 N8 P& V6 v' ^" Z7 P/ w- q" A' A" t

  y9 ^2 R8 k9 \) F; R; a! c, WC:\Users\dell\Desktop\涂鸦\涂鸦新建文件夹
- f7 P8 W* m$ L  i) M5 t2 k( V; b
4 ^- @- e; X, X' b. ^1 s! G# Q$ z
  Y- p- j5 B" z9 {/ y& u4 d  U) U
注册成功后登陆,然后点击创建产品,流程我上传来,产品创建成功后,下载全部文件,但我发现我做的蜂箱智能养殖系统,系统的功能和我的不符合,这时需要进入自定功能3 {6 [: L, o( t2 P
' _$ Q3 p$ W4 K* P# l$ D3 X" K
C:\Users\dell\Desktop\涂鸦\新建功能点
: ?% k; p8 l6 R& a" X% |$ B' N: w% ^# b) E6 R
还有就是设备面板,如果不符合自己的要求,可以自定义
4 k, a/ O5 V& Y6 M) k* E) T  x
2.png
在开发途中,如果又不懂的,可以点击右上角的文档,进入涂鸦开发者,里面有特别详细的讲解,并且b站上也有视屏讲解,可谓是非常的仔细,非常适合初学者
6 E5 M1 D+ @: T
3.png
接下就是移植sdk
. \5 [3 N" f$ d7 Y在原有的工程文件添加 sdk文件,并且把.c和.h文件加入  M) R3 u8 k( _6 T; L

' _. {% O; V: x' U' A' ?

% n; R) r, P+ G% EC:\Users\dell\Desktop\涂鸦\sdk1 d) @" ]( z: r& C8 a# X8 S6 v

# r3 H9 w7 @( ]8 M

% f4 ?, W. j% S4 G8 v9 K点击编译,并按照工程报错进行相应的更改,涂鸦在这里也是做的非常详细,只要双击错误,就会跳到错误那里,然后涂鸦在报错那里有中文提示
$ Z) S, r  V7 f) G6 \4 j. o( ~4 }! t
: P2 F  D# S" y" ]
C:\Users\dell\Desktop\涂鸦\错误9 [% Q) i: I' d" i- e

+ n# R: l+ f5 h

! N- b8 g1 ?/ A4 L5 B- ~7 G后面的就接着操作,值得注意的是,改完过后会遇到
3 \( ?5 r+ Y9 _! t  Z: n2 t! m9 o' r  N; A! U

  V+ T0 Y' H( b/ j& {..\USER\stm32f10x.h(522): error:  #40: expected an identifier  ^' N( |7 M/ q0 ]8 u2 P9 f% h
  typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
- e& K6 I9 {' x# ]3 q: ?..\USER\stm32f10x.h(522): error:  #40: expected an identifier" X1 \! p9 a: a9 E
  typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;$ K8 c. \  P1 K" W  X
..\USER\stm32f10x.h(525): error:  #40: expected an identifier
3 h/ p- o4 W3 ^: T+ z7 f3 W  typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;+ ~* W( X; H0 S" Q' V5 X/ E
..\USER\stm32f10x.h(525): error:  #40: expected an identifier
1 _, t! W, l; Q# o9 X* E0 u% V这时只需在WiFi.h中添加头文件 #include "stm32f1xx.h" 来解决
; B6 W$ C; W7 L$ [
/ b& a- N' j8 J5 V' Q  o. U

2 \  A0 W  f+ S- G; D0 V! ]C:\Users\dell\Desktop\涂鸦\错误一. w& N2 [. h+ u* f! ]/ R2 E
4.png
添加完成后,只需打开自己所需的功能点- w$ @+ B" k1 y! d7 p% R

  C2 d8 ?1 F0 \% z

# u8 t. A, ]7 ]2 `/ `2 t1 ?* `C:\Users\dell\Desktop\涂鸦\功能点. N  n) D+ u# g2 i

) ?9 N! I# ]7 B: r

- [3 u: ?5 m, k! ?7 Y& r  a然后在主函数中调用wifi_uart_service();并且初始化wifi_protocol_init();,然后就是配网操作,这里可以用按键,首先调用重置函数,然后调用配网模式选择,根据自己的需求选择模式,下载程序,利用涂鸦小助手进行配网,小助手在下载的文件中有,配网成功后,只需把刚才调用的两个函数屏蔽就可以,这样不用按键也行,不过大家尽量使用按键,方便。0 s: d# x& a* `* R
9 T# R( }) L5 H, s: m2 y' m
2 v! X8 i/ x/ ^% W8 C1 H% H! n
C:\Users\dell\Desktop\涂鸦\配网
4 C2 P9 r, ], D! f/ x2 o
0 L* i1 E$ e0 P4 ~* o0 ?6 H/ D( _

. l, y8 }+ t2 L2 ^接下来就是写自己所需功能的函数了,采用超声波检测蜂箱是否有巢虫,具体思想是,蜂箱的长度固定,我只需检测蜂箱底部的长度即可,只要检测的蜂箱长度小于蜂箱的实际长度,便可认为蜂箱有巢虫。当检测蜂箱有巢虫时,并用LED灯进行报警。" Z4 s9 U* H, X- f" M5 C

  a; k; N; v  e* D' ~
; {4 a# Y. \6 Z% Q
然后蜂箱盖检测,检测蜜蜂是否处于黑暗的环境,采用光明电阻检测,当光敏电阻的值低于2600时,并用ledC13作为警报,可认为蜂箱的环境不是黑暗密闭的。
7 I8 f4 O% r1 |+ Z- ^6 u接下来就是蜂箱内的温室度,这是一个很重要的组成部分,我采用的dht11,通过mcu读取,将温湿度实时上传客户端。: P# z+ @3 k5 k6 u9 p9 m* Q
) a- |& x9 F! g! D8 i

7 b; W! s# V! x- F" t% SC:\Users\dell\Desktop\涂鸦\全图4 x+ p/ `, }: Q0 m) D

  1. 0 p/ y, h9 u" w. [4 r+ Y; W
  2. #include "dect.h"
    7 z! e: a$ m- k2 j9 S' t; d0 o3 S$ k
  3. #include "adc.h"* W1 K( S& s( s' Z" K  B* |- M/ B/ t
  4. #include "dht11.h"6 Y: w! e4 n' u& e5 c; B8 N
  5. #include "wifi.h"
    6 k+ Z: W: X( i; S4 |
  6. #include "led.h"5 d. D0 e- z( y: I" I' k
  7. #include "UltrasonicWave.h"1 o: |) A/ I: F0 ?8 d5 w

  8. 7 g0 R' X" \+ ^) j) w* Z) j# X
  9. void Detect_Read(void)& l  y. F9 P* ^+ m2 A2 `
  10. {
    7 U/ T1 c; R" z; L8 P7 O" c
  11.         * n* y/ ~9 h; a' A) }
  12.           Dht11_read();# k# S( f9 C) P: y
  13.           get_voit_d();; p+ h5 C. E" w/ E! k' ^
  14.           get_voit_g();; m" N! V' Q/ I& j
  15.           UltrasonicWave_StartMeasure();
    8 N0 _& p/ n) X' Y% J7 A  a3 z' S
  16.           chaoshengbo();, M/ Z- G$ r; _" O( ?- M
  17.          $ ?7 |) k' j+ M  X1 F( ]/ Z
  18.          - p, A9 g- y0 P0 Z3 V
  19. }* S" T3 g( Z' p# G8 k; }8 |
  20. //采集光敏电阻转换为亮度值 A1引脚) p/ }, l5 |2 w$ O8 c7 N
  21. void get_voit_d(void)  H/ M& z1 X# H* z
  22. {
    3 c8 ^$ B) q: z. ?; w
  23.          float  light;
    6 k5 j6 g* q8 P( r$ `
  24.          $ c: x5 M! p  l! h* F& e
  25.          light =Get_Adc(1) ;- ?( f7 _6 \5 a1 b7 v) y
  26.          if(light<2600)
    * a2 b6 p  Y5 ?+ W. t
  27.          {( B$ {6 r6 r8 h+ h) ]) j
  28.          mcu_dp_enum_update(DPID_COVER_STATE,0); //当前蜂箱盖状态枚举型数据上报;- j  r! e  G0 b7 i2 d" ?) B: R
  29.         GPIOC ->BRR =GPIO_Pin_13;         & C4 c/ N" K4 o7 L  J
  30.          }
    ' O: w, G) C4 C+ ?9 C
  31.          else
    ! t8 d( ^, m5 k+ y1 N/ Z
  32.          {
    4 l3 T& @7 l' A1 C% [
  33.      mcu_dp_enum_update(DPID_COVER_STATE,1); //当前蜂箱盖状态枚举型数据上报;* v  v. ?. g% ]
  34.         GPIOC ->BSRR =GPIO_Pin_13;2 w8 x0 \: O9 S; v: B- b/ `( T
  35.          }                 
    & V# _$ {6 F$ H0 h# [, e! x  e- D% c
  36. //         printf ("%f\r\n",light);
    5 P! g. ?6 K- V6 o) W* a
  37. }  e! B6 ?- l+ D
  38. & a# f8 D6 o  m/ Z! o9 L3 ^
  39. / `  b* Z8 X; k
  40. 1 D; _- v" A, S% T/ ]" M* ~0 Q, n
  41. //采集电源电压 A0引脚
    * j/ z, u( X# U
  42. void get_voit_g(void ); X( d9 @4 ?' P; m$ ^% |
  43. {
    2 {8 b# F" r* R- L
  44.         
    ' r& m; @$ z6 A7 ~& K; n& C
  45.         float voit;4 p, ]: }: Q6 t0 p; t7 M8 X+ b
  46.         voit=Get_Adc(0) /4096.0*3.3;
    9 J: @! E5 n! ~" R* M2 d2 I2 r7 B
  47.         voit=voit/3.3*100;4 W" A9 s2 B1 w+ b
  48.         mcu_dp_value_update(DPID_BATTERY_PERCENTAGE,voit); //当前电池电量VALUE型数据上报;
    5 C- t6 N. [0 I7 n0 `/ B
  49. //        printf ("%f\r\n",voit);. \% I5 W8 B) |* x( W( z
  50. }  r) ?5 r" q: Z0 ~4 |) J

  51. # U' j9 h- e' }. n. m% l5 F( E
  52. /**********************超声波距离计算***************************/
    3 @+ D$ N  W/ n' Q* J0 z
  53. void chaoshengbo(void)
    # j% }4 o, [) W- ], I% l4 u
  54. {  
    + _3 R' M% M% ~$ h1 t1 X/ M; E3 q
  55.          float juli;
    ' M' h( z3 ]% w6 }" J' |) W2 K
  56.       juli=TIM_GetCounter(TIM1)*5*34/200.0;
    . N; l: V8 g; b# U% J
  57.         if(juli<8&&juli!=0)        
    ; ~0 w& \9 o9 y. [+ t
  58.         {9 L: }  J+ M6 p; e. Q7 e
  59.         mcu_dp_bool_update(DPID_CHECK,1); // 当前巢虫检测 BOOL型数据上报;4 X8 D- k+ E- S% D
  60.         GPIOB ->BRR =GPIO_Pin_4;        - N' x& R3 `2 c  t, f" M9 W
  61.         }               
    $ M. p5 Y& `' y
  62.      else
    1 S9 w5 ~( W. s4 L& n4 ]2 n% H) D) N) Y
  63.         {               
    5 O* E7 Q9 @- G/ D1 I
  64.      mcu_dp_bool_update(DPID_CHECK,0); // 当前巢虫检测 BOOL型数据上报;1 v( r' R/ k8 \4 m& A
  65.      GPIOB ->BSRR =GPIO_Pin_4;
    ) o, s- E  G" I
  66.         }               
    1 W" m3 ?- s4 O$ S! H% T
  67. }
    / g! _1 c* _# x& [# n9 I1 q
  68. void Dht11_read(void): S2 ^3 @) L: G1 n
  69. {2 X& U2 a9 }$ ^$ m% Y
  70.         u8 temperature;              
    ; T3 j# @! W7 Z# x3 U' K
  71.         u8 humidity;$ ?9 r0 \+ k9 o. a: G  ]8 {
  72.         DHT11_Read_Data(&temperature,&humidity);
    $ V) A0 v! D# A, V0 [' s1 k
  73.      mcu_dp_value_update(DPID_NOW_TEMP,temperature ); //当前温度检测VALUE型数据上报;' n3 T3 }* e4 ]
  74.      mcu_dp_value_update(DPID_HUM,humidity); //当前湿度检测VALUE型数据上报;        " Y1 E/ {7 E; g1 u5 O% g9 W+ z
  75. //        printf("temperature=%d\r\n",temperature);
    & u; ^1 S4 a2 P8 i, k
  76. //     printf("humidity=%d\r\n",humidity);   
    ) u1 ^" k4 o6 E% O$ u
  77. }
复制代码
  1. #include "sys.h"
    + l0 ]3 \: c+ r3 |/ v9 H
  2. #include "usart.h"
    % |+ {  o  ^. A! {
  3. #include "usart2.h"        
    2 G9 _( G" c* n3 Z+ }
  4. #include "led.h"
    , Z* q; L7 e# ?% Z* [& u
  5. #include "delay.h"
    ( F/ U! t" r2 O0 {, U
  6. #include "wifi.h"
    ! [" b1 h  [) s2 s3 O
  7. #include "adc.h"' u, k8 L2 H5 H: f: e0 Y) t
  8. #include "dht11.h"
    3 a3 I5 ]) w) c. w% \- l: h6 G
  9. #include "dect.h"
    8 I/ R! A1 `7 ]0 C3 C
  10. #include "timer.h"$ @/ L$ Z/ S# q  O$ d  k3 g% S) m
  11. #include "UltrasonicWave.h". ^3 |$ ]: S) Q+ p6 ]
  12. int main(void)8 t# n/ P4 b3 N1 O. r
  13. {        
    1 E/ z; P* U9 x) a* ]
  14.         
    . W2 S. t7 C) s3 ]6 z% _: s
  15.         delay_init();                     //延时函数初始化          b7 C0 `& ]) ^' f& \4 X
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2) o4 v" ~6 C/ \% H7 G) w
  17.      DHT11_Init();
    9 K( T' j* q+ F6 ~  v
  18.         uart_init(9600);//用于WiFi模块通信
    # A0 s8 r/ h" i# z' k1 b! L4 u3 }
  19.      uart2_init(115200);//用于串口通信+ F8 n/ _7 w$ e' U
  20.         LED_Init();//用于报警模拟
    9 w8 s7 x& `) e( Q% e
  21.      Adc_Init();. k. t: f  |# ]2 C& G' t8 }. J0 k
  22.         Timerx_Init(5000,7199);
    3 {: u# J( [, q
  23.      wifi_protocol_init();! H4 ?4 |- j' [! z
  24.         UltrasonicWave_Configuration();2 p) P9 n, q' f3 b% h( ]
  25. //        mcu_reset_wifi();  U* v) v" T& d0 O; z4 x
  26. //        delay_ms (10);- ]# o3 X5 M" \. h. U6 K
  27. //        mcu_set_wifi_mode(SMART_CONFIG );3 Z$ d* A) g% q4 d+ z: X
  28.         
      f4 e+ ?' |9 e1 |% t
  29.         while(1)$ p- R, Z, E/ i& }
  30.         {+ x. V# b* A3 }9 G5 _0 R
  31.                 wifi_uart_service();3 ~- D8 i! Q3 B9 L
  32.                 Detect_Read();6 x' \- f, u4 I/ r6 q) y
  33.         }         5 H, d. f9 }# j6 A" g
  34. }' T9 [; j- h; ?6 u2 u3 [
复制代码
源码连接gihub* c4 y9 j8 T' J5 u
github.com/18785275440/tuya-mcu-sdk.git$ A$ T. Z' I  ~, F% F
$ Q8 X; v6 o3 ?# [1 H6 C/ h/ L& l2 J2 f% P
* ]; M" J! H% u4 E
5 _+ m% S# g% y) A% }
赞 收藏 评论0 发布时间:2021-5-31 10:25

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版