当前位置: 首页 > news >正文

【单片机毕业设计选题24018】-基于STM32和阿里云的农业大棚系统

系统功能:

系统分为手动和自动模式,上电默认为自动模式,自动模式下系统根据采集到的传感器值

自动控制,温度过低后自动开启加热,湿度过高后自动开启通风,光照过低后自动开启补

光,水位过低后自动开启水泵补水。手动模式下可以手动控制加热/除湿/补光/补水。

主要功能模块原理图:

传感器采集:

系统主要功能模块代码

初始化代码:

  /* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init */InitVar();/* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_ADC1_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 *///在HAL库初始化串口1后调用HAL_Delay(100);SetUart1RxToInput();HAL_Delay(50);//uart1打开接收中断HAL_UART_Receive_IT(&huart1, (uint8_t*)&uart1RecBuff, 1);//uart2打开接收中断HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);InitOled();InitOledDisp();ResetDHT11();//初始化ESP8266ESP8266_Init(); /* USER CODE END 2 */

ESP8266接入阿里云代码:

//硬件复位ESP8266HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_RESET);HAL_Delay(250);HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_SET);HAL_Delay(500);//关闭板载LEDHAL_GPIO_WritePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin, GPIO_PIN_SET);ESP8266_Clear();//测试AT指令printf("AT Testing\r\n");while(ESP8266_SendCmd("AT\r\n", "OK", 200)){HAL_Delay(1000);}HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);     HAL_Delay(500);//设置为Station     printf("set CWMODE\r\n");while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK", 200)){HAL_Delay(1000);}HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);     HAL_Delay(500);//上电不自动连接APprintf("set CWAUTOCONN\r\n");while(ESP8266_SendCmd("AT+CWAUTOCONN=0\r\n", "OK", 200)){HAL_Delay(1000);}HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);     HAL_Delay(500);//关闭回显printf("set ATE0\r\n");while(ESP8266_SendCmd("ATE0\r\n", "OK", 200)){HAL_Delay(1000);}HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);  HAL_Delay(500);//配置WIFIprintf("set Wifi\r\n");while(ESP8266_SendCmd("AT+CWJAP=\""WIFI_SSID"\",\""WIFI_PASSWD"\"\r\n", "OK", 500)){HAL_Delay(1000);}       HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);HAL_Delay(500);//MQTT USER CONFIGprintf("mqtt config\r\n");while(ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,\""MQTT_CLIENT_ID"\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n", "OK", 500)){HAL_Delay(1000);}  HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);HAL_Delay(1000);//MQTT连接服务器printf("mqtt broker\r\n");while(ESP8266_SendCmd("AT+MQTTCONN=0,\""BROKER_ASDDRESS"\",1883,0\r\n", "OK", 500)){HAL_Delay(1000);}  HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);HAL_Delay(500);

读传感器数据:

//读传感器值,AD值void ReadSensorVal(void){getTempVal = DHT11_Data.temp_int;getHumiVal = DHT11_Data.humi_int;getLightVal = ReadADCChannel(ADC_CHANNEL_0);getWaterVal = ReadADCChannel(ADC_CHANNEL_4);//系统模式为自动模式if(sysMode==AUTO_MODE){//获取到的温度小于设定温度则开启加热   if(getTempVal<setTempVal){heatState = true;HEAT_ON();}else{heatState = false;HEAT_OFF();}//获取到的湿度大于设定湿度则开启通风   if(getHumiVal>setHumiVal){fanState = true;FAN_ON();}else{fanState = false;FAN_OFF();}  //获取到的光照值大于设定光照值则开启补光  if(getLightVal>setLightVal){lightState = true;LED_ON();}else{lightState = false;LED_OFF();}         //获取到的水位值大于设定水位值则开启水泵if(getWaterVal>setWaterVal){pumpState = true;PUMP_ON();}else{pumpState = false;PUMP_OFF();}         }   }

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

资料获取地址

相关文章:

  • 思科配置路由器,四台主机互相ping通
  • 在Android Studio中将某个文件移出Git版本管理
  • 命令行脚本批量转换工具说明
  • 设置浏览器互不干扰
  • 【Android面试八股文】odex了解吗?解释型语言和编译型语言有什么区别?JAVA是编译型语言还是解释型语言?
  • 逻辑回归(Logistic Regression)及其在机器学习中的应用
  • 从移动、桌面端到AR/VR:HOOPS Visualize如何实现卓越的3D模型可视化?
  • 手写方法实现整型例如:123与字符串例如:“123“相互转化(下篇)
  • Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
  • Redis高并发高可用
  • 76.最小覆盖子串
  • 【达梦数据库】typeorm+node.js+达梦数据库返回自增列值
  • oracle SCHEDULER
  • Java中setLineWrap(true)和setWrapStyleWord(true)优化TextArea
  • DS18B20温度传感器完整使用介绍(配合51单片机)
  • [译]前端离线指南(上)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Java面向对象及其三大特征
  • Markdown 语法简单说明
  • Redis中的lru算法实现
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring boot 整合mybatis 无法输出sql的问题
  • webpack入门学习手记(二)
  • 创建一个Struts2项目maven 方式
  • 搭建gitbook 和 访问权限认证
  • 高程读书笔记 第六章 面向对象程序设计
  • 给初学者:JavaScript 中数组操作注意点
  • 理清楚Vue的结构
  • 盘点那些不知名却常用的 Git 操作
  • 首页查询功能的一次实现过程
  • 学习ES6 变量的解构赋值
  • 一个SAP顾问在美国的这些年
  • 正则表达式小结
  • Android开发者必备:推荐一款助力开发的开源APP
  • FaaS 的简单实践
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​虚拟化系列介绍(十)
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #HarmonyOS:Web组件的使用
  • (1)(1.9) MSP (version 4.2)
  • (2)Java 简介
  • (day6) 319. 灯泡开关
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (WSI分类)WSI分类文献小综述 2024
  • (补)B+树一些思想
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (一)基于IDEA的JAVA基础1