收藏官网首页
查看: 391|回复: 0

STM32项目分享:智慧农业(机智云)系统

89

主题

97

帖子

3825

积分

论坛元老

Rank: 8Rank: 8

积分
3825
跳转到指定楼层
楼主
 楼主| 发表于 2024-7-26 18:06:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 阿信 于 2024-7-26 18:07 编辑

目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
1.PCB图
2.PCB板打样焊接图
五、程序设计
六、实验效果
七、资料内容
项目分享


一、前言

项目成品图片:




哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1Rw4m117jv/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

二、项目简介

1.功能详解

STM32基于机智云的智能温室大棚系统。功能如下:


温湿度采集:使用DHT11温湿度传感器采集环境温湿度

土壤湿度采集:通过土壤湿度模块采集土壤湿度

光照强度采集:通过光敏电阻采集环境光照强度

二氧化碳浓度采集:通过CO2气敏传感器检测二氧化碳浓度

土壤温度采集:通过DS18B20传感器采集土壤温度

风扇控制:可自动模式下根据环境温度触发或手动模式下APP开闭

水泵控制:可自动模式下根据土壤湿度触发或手动模式下APP开闭

LED照明灯控制:可自动模式下根据环境光强触发或手动模式下按键开闭

通风口:通过步进电机模拟通风口

OLED显示:将检测到的环境数据显示在oled屏幕上。

蜂鸣器报警:危险情况下本地蜂鸣器触发报警

APP功能:使用机智云APP,包括功能有控制并显示风扇、水泵、通风口和补光灯状态,选择工作模式为手动或自动模式,显示当前环境温湿度、土壤温湿度以及光照强度和二氧化碳浓度信息

2.主要器件

STM32F103C8T6最小系统板

DHT11温湿度传感器

OLED显示屏(4针I2C协议)

WiFi模块(esp8266-01s)

土壤湿度传感器

二氧化碳传感器

DS18B20温度传感器

28BYJ51步进电机

5V风扇模块

5V水泵模块

蜂鸣器

LED灯

三、原理图设计


四、PCB硬件设计

1.PCB图



2.PCB板打样焊接图



五、程序设计


  1. int main(void)
  2. {
  3.         ADCX_Init();
  4.         Timer2_Init(9,14398);
  5.         Uart2_Init(9600);
  6.         Uart1_Init(115200);
  7.         Uart3_Init();
  8.         IWDG_Init();        //初始化看门狗
  9.         LDR_Init();
  10.         YL69_Init();
  11.         OLED_Init();
  12.         DHT11_Init();
  13.         LED_Init();
  14.         Buzzer_Init();
  15.         Relay_Init();
  16.         MOTOR_Init();
  17.         Key_Init();
  18.         Sensorthreshold.CO2Value = FLASH_R(FLASH_START_ADDR);        //从指定页的地址读FLASH
  19.         Sensorthreshold.luxValue = FLASH_R(FLASH_START_ADDR+2);        //从指定页的地址读FLASH
  20.         Sensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR+4);        //从指定页的地址读FLASH
  21.         Sensorthreshold.humiValue = FLASH_R(FLASH_START_ADDR+6);        //从指定页的地址读FLASH
  22.         Sensorthreshold.soilTempValue = FLASH_R(FLASH_START_ADDR+8);        //从指定页的地址读FLASH
  23.         Sensorthreshold.soilHumiValue = FLASH_R(FLASH_START_ADDR+10);        //从指定页的地址读FLASH
  24.         GENERAL_TIM_Init();
  25.         userInit();                //完成机智云初始赋值
  26.         gizwitsInit();        //开辟一个环形缓冲区
  27.         while (1)
  28.         {
  29.                 IWDG_ReloadCounter(); //重新加载计数值 喂狗
  30.                 SensorScan();        //获取传感器数据
  31.                 switch (menu)
  32.                 {
  33.                         case display_page1:
  34.             SensorDataDisplay1();        //显示传感器1数据
  35.             OLED_Menu1();        //显示主页面1固定信息
  36.             if (KeyNum == KEY_2)        //是否按下按键2
  37.             {
  38.                                 KeyNum = 0;
  39.                                 OLED_Clear();        //清屏
  40.                                 menu = display_page2;        //menu = 主页面2
  41.                         }
  42.                         MotorOperation();
  43.                         break;
  44.                         case display_page2:               
  45.                         SensorDataDisplay2();        //显示传感器2数据               
  46.                         OLED_Menu2();        //显示主页面2固定信息
  47.                         if (KeyNum == KEY_2)        //是否按下按键2
  48.                         {
  49.                                 KeyNum = 0;
  50.                                 OLED_Clear();        //清屏
  51.                                 menu = display_page1;        //menu = 主页面1
  52.                         }
  53.                         MotorOperation();
  54.                         break;
  55.                         case settingsPage:
  56.                         //从主页面跳转至设置页面时进行一次清屏
  57.                         if (OLED_Clear_Flag)
  58.                         {
  59.                                 OLED_Clear_Flag = 0;        //清除清屏标志位
  60.                                 OLED_Clear();        //清屏
  61.                         }
  62.                         ThresholdModification(SetSelection());        //调节传感器阈值
  63.                         OLED_Option(SetSelection());        //获取按键次数,从而判断“>”显示位置
  64.                         //按键次数小于等于4时,显示设置页面1
  65.                         if (SetSelection() <= 4)               
  66.                         {
  67.                                 settingsThresholdDisplay1();        //显示传感器阈值1数据        
  68.                                 OLED_settingsPage1();        //显示阈值设置界面1固定信息
  69.                         }
  70.                         else        //否则显示设置页面2
  71.                         {
  72.                                 settingsThresholdDisplay2();        //显示传感器阈值2数据        
  73.                                 OLED_settingsPage2();        //显示阈值设置界面2固定信息
  74.                         }
  75.                         if (KeyNum == KEY_2)        //判断用户是否按下退出按键
  76.                         {
  77.                                 KeyNum = 0;
  78.                                 OLED_Clear();        //清屏
  79.                                 menu = display_page1;        //回到主页面1
  80.                                 //存储修改的传感器阈值至flash内
  81.                                 FLASH_W(FLASH_START_ADDR, Sensorthreshold.CO2Value, Sensorthreshold.luxValue,
  82.                                 Sensorthreshold.tempValue, Sensorthreshold.humiValue,
  83.                                 Sensorthreshold.soilTempValue, Sensorthreshold.soilHumiValue);
  84.                                 }
  85.                                 break;
  86.                         default: break;
  87.                 }
  88.                 userHandle();        //更新机智云数据点变量存储的值
  89.                 gizwitsHandle((dataPoint_t *)¤tDataPoint);        //数据上传至机智云                                       
  90.         }
  91. }
复制代码


六、实验效果







您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表