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

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

[复制链接]
STMCU-管管 发布时间:2021-5-31 10:25
初中有幸与蜜蜂结缘,但是由于要读书,或者平时没在家,而蜜蜂对生成环境计较苛刻,喜欢安静,干燥,并且在黑暗的环境中,如果管理不好就会造成蜜蜂逃的逃,跑的跑,不仅没有产量反而蜜蜂都跑完了,目前就在想有没有可以远程监控蜂箱的方法。( 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. ~+ [
1.png
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
2.png
在开发途中,如果又不懂的,可以点击右上角的文档,进入涂鸦开发者,里面有特别详细的讲解,并且b站上也有视屏讲解,可谓是非常的仔细,非常适合初学者& j# ~& w' m: F2 }+ G& ]4 ?
3.png
接下就是移植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
4.png
添加完成后,只需打开自己所需的功能点) 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 v
6 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
  1. ( K2 b2 N8 R. ]) h7 C4 U% L
  2. #include "dect.h"! l. J; f8 o5 J/ ~* G1 E
  3. #include "adc.h"! z; k0 ?3 ?" d5 ]/ q/ l
  4. #include "dht11.h"' U8 U2 z1 U$ u" b( s8 a
  5. #include "wifi.h"3 D  H  P: C2 h& D% O
  6. #include "led.h"
    ( U7 M7 C  U* P5 I/ ]  y
  7. #include "UltrasonicWave.h"9 c8 R7 t  `5 y

  8. + |6 C7 a) c: }! W! z" C* q
  9. void Detect_Read(void)
    % ^  W: T, G6 ?2 T/ n
  10. {
    # Y0 q5 M/ \6 o7 I# o8 o
  11.         
    ! @2 u, V5 ~3 s+ g2 I5 J. d# h6 r9 l
  12.           Dht11_read();) ?, a0 W7 S$ F% E( c# @
  13.           get_voit_d();1 v3 q% `1 `" J; ]
  14.           get_voit_g();+ [! U2 j8 B( O$ ^' ]% }7 t- G
  15.           UltrasonicWave_StartMeasure();' J! Q+ |' J9 d3 r
  16.           chaoshengbo();7 |; k$ m' p$ j( e
  17.          
    9 {5 |" O4 E& i5 g! L- b
  18.          
    8 ?! z/ L9 R: U* n& a2 _2 ~  t  j
  19. }
    ( z7 j8 [) Y+ y. H+ P7 s3 u
  20. //采集光敏电阻转换为亮度值 A1引脚0 U2 l: X- Q) E8 b# a1 i6 m& t
  21. void get_voit_d(void)
      [' O8 P' r" p( i2 H; ]
  22. {
    ; `$ M% C& C- L# t2 B" X$ s
  23.          float  light;
    : m; ?7 \8 o8 z- {) D6 e- ^/ P
  24.          
    5 C5 r, L' {9 P; F" `3 Y- M
  25.          light =Get_Adc(1) ;
    2 m. h* a2 D8 Q  N
  26.          if(light<2600)% E4 l1 ~( ?% B  [, y* H+ t
  27.          {) c1 U* X" |" r' l1 N3 K
  28.          mcu_dp_enum_update(DPID_COVER_STATE,0); //当前蜂箱盖状态枚举型数据上报;
    / E0 s7 i& J  D1 B5 n
  29.         GPIOC ->BRR =GPIO_Pin_13;           U/ O9 \/ z1 V+ u
  30.          }3 p) l4 h; z' y& h$ f
  31.          else
    ( S! ?2 }5 T; K1 ^2 m
  32.          {% [' Y3 L' T) `! Z0 Z
  33.      mcu_dp_enum_update(DPID_COVER_STATE,1); //当前蜂箱盖状态枚举型数据上报;, ]8 b& ?  b% _4 [6 n
  34.         GPIOC ->BSRR =GPIO_Pin_13;
    5 b/ ?# `; g' n+ @& x
  35.          }                 8 T) B/ H& O- l4 r
  36. //         printf ("%f\r\n",light);& g) t! }4 n1 G) K1 `
  37. }
    , d( A8 R7 B+ S: B

  38. ) |' @" {& E* x! @  `
  39. : l' o3 h$ ~7 O

  40. % O' d' j5 z/ t7 i
  41. //采集电源电压 A0引脚
    ! @, h9 z/ C% h6 y5 d8 G
  42. void get_voit_g(void )4 }# }3 ~" B# J' Z( b; q
  43. {% y( V* N( s. b8 v4 P+ r
  44.         
    9 [. I, n8 U% z! c6 X  w
  45.         float voit;
    " v# h2 n/ u1 |7 A5 ?6 m$ @
  46.         voit=Get_Adc(0) /4096.0*3.3;2 E, t9 ~! k' I: `/ ^4 z
  47.         voit=voit/3.3*100;# `  D0 w4 I9 ~
  48.         mcu_dp_value_update(DPID_BATTERY_PERCENTAGE,voit); //当前电池电量VALUE型数据上报;
    * ]1 G: \: M- Y8 Q
  49. //        printf ("%f\r\n",voit);
    2 O# R; ]. Q2 r6 e
  50. }
    / ~/ z5 K. N, s% M& A& k3 ?2 _, s

  51. 1 J0 x& ]* x1 D, Z4 D
  52. /**********************超声波距离计算***************************/# a, ^* y8 V3 y3 {8 O
  53. void chaoshengbo(void)
    5 b$ I! c8 `* }1 j1 D" c$ [/ `% j9 w
  54. {  9 _( u# a  b# R. g1 N6 L5 O
  55.          float juli;: U, Z# Z) `; V/ W* a- N  `% e- {
  56.       juli=TIM_GetCounter(TIM1)*5*34/200.0;
    ' S+ K% g+ W: C  F9 p
  57.         if(juli<8&&juli!=0)        % ^: q- q3 y. k+ M- I" ]
  58.         {5 ?( Q1 o/ b, ]. [9 R  ?
  59.         mcu_dp_bool_update(DPID_CHECK,1); // 当前巢虫检测 BOOL型数据上报;
    ( z5 g1 _$ P" R$ Z2 i, \
  60.         GPIOB ->BRR =GPIO_Pin_4;        $ e# `, n; j* [2 S. o3 S( V; J( G
  61.         }               
    4 o5 M4 M) n7 c- L- m: i( @. h
  62.      else! n, r) q8 H1 r8 P
  63.         {               & U0 J# w1 H3 c  n" _! v" C
  64.      mcu_dp_bool_update(DPID_CHECK,0); // 当前巢虫检测 BOOL型数据上报;
    ! u; q, r" c, h) e0 f1 U- q: F0 B
  65.      GPIOB ->BSRR =GPIO_Pin_4;5 x% s* F/ O! k- L( U# K* _
  66.         }               
    & q8 y1 R3 ?; B$ Q  X+ |6 S
  67. }
    ' x4 {/ K1 e4 i! y* f  f
  68. void Dht11_read(void)+ @) X/ l, P# R7 E" ?# G% N7 x
  69. {
    . A* ?6 H) Q) Y9 T6 F
  70.         u8 temperature;              ' {5 F3 B* d) v  D8 d+ Q1 K
  71.         u8 humidity;6 O/ C: g5 o3 u$ S
  72.         DHT11_Read_Data(&temperature,&humidity);
    ; {8 R9 ^- G8 U6 [7 {
  73.      mcu_dp_value_update(DPID_NOW_TEMP,temperature ); //当前温度检测VALUE型数据上报;
    % j) C! K3 s& n6 v! i7 D
  74.      mcu_dp_value_update(DPID_HUM,humidity); //当前湿度检测VALUE型数据上报;        
    4 B% d) C, n/ D* L8 Q0 q% i! k! m
  75. //        printf("temperature=%d\r\n",temperature);
    1 |3 U8 o) k6 ^" J% e5 [8 {$ e) p
  76. //     printf("humidity=%d\r\n",humidity);    4 Q# s2 l+ ]0 l: N+ V- ?+ M
  77. }
复制代码
  1. #include "sys.h"0 A% k& V  D: X  g
  2. #include "usart.h"
    2 k7 b! o) t) ~* U" @
  3. #include "usart2.h"        + }) _5 c- r6 m- i1 P4 U. ]
  4. #include "led.h"4 `7 Z& z: N3 P- w
  5. #include "delay.h"2 \! ~9 J9 G+ U: I* C, x
  6. #include "wifi.h"- u) B! c$ G* G- R5 _# n% O
  7. #include "adc.h"4 D/ V# O+ h$ s
  8. #include "dht11.h"
    4 @: x  R8 o2 {% c3 w# g# j' y
  9. #include "dect.h", `5 h" p2 [) z/ D: ?* [8 m7 H
  10. #include "timer.h"3 y3 O$ Z" O5 W5 l# G( {! |
  11. #include "UltrasonicWave.h"" G. Z# @* m) ~( v# G3 B* S
  12. int main(void)
    6 p+ p/ k$ M! A1 j
  13. {        
    - h8 O- l) Z0 M/ N5 u7 m' D6 s/ w8 A
  14.         : |4 a- @5 }; W, M  j3 o
  15.         delay_init();                     //延时函数初始化        
    " G9 t# W. `4 @- F/ g' I
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2% c: D6 m0 r, d- N, z: E
  17.      DHT11_Init();, }# n. ^6 ]: r# b/ V4 M
  18.         uart_init(9600);//用于WiFi模块通信
    1 l5 L# T5 k& U
  19.      uart2_init(115200);//用于串口通信
    & O7 l7 @2 m% _5 n# c% S- L
  20.         LED_Init();//用于报警模拟
    9 S2 O4 R7 i  b& U  d& W! A
  21.      Adc_Init();. G7 d6 x/ d7 \  G0 h
  22.         Timerx_Init(5000,7199);7 j7 ]* w3 o: h9 W
  23.      wifi_protocol_init();$ e9 {! C& C0 s8 _/ r
  24.         UltrasonicWave_Configuration();
    : r  J5 x9 r, W0 P4 \
  25. //        mcu_reset_wifi();
    ' _. {  Y- A7 [/ B9 |
  26. //        delay_ms (10);  P7 `+ O1 U! ]. C# U
  27. //        mcu_set_wifi_mode(SMART_CONFIG );
    ) u$ m$ K6 j. L( b" r
  28.         
    * m8 Q1 s' g+ }5 \+ ~2 B4 M
  29.         while(1)
    ; b& [1 w$ L- y: V$ R0 @* \
  30.         {* M4 X3 v5 G. Z" @0 E7 G3 x8 Q  M
  31.                 wifi_uart_service();2 E7 m4 Y3 b/ o2 j& N& R8 `
  32.                 Detect_Read();
    $ B/ q7 K% t  {- e; k
  33.         }         
    8 L# e: r7 t, C: g; D" W  B
  34. }
    - 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
收藏 评论0 发布时间:2021-5-31 10:25

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版