本帖最后由 putin 于 2024-8-16 18:43 编辑
看这熟悉的标题大家有没有一种梦回大学的感觉,哈哈哈,没错这是我刚刚结束的毕业设计(ps:不喜勿喷)。
感谢园长、安信可。话不多说直接开始
一、主要设计内容
本文旨在设计实现一款湿度温度系统,实现对温湿度的智能的自动控制以及定时的控制。通过单片机、温湿度传感器、Wi-Fi模块、屏幕等硬件设备进行合理的选择和配合,并使用嘉立创EDA设计PCB将相应的模块组合成的完善且稳定控制系统。详细说明可以扫面上面的二维码。 二、设计思路
单片机负责接收来自各个模块的数据,同时对这些数据进行处理和分析。温湿度传感器获取环境中的温湿度信息然后将温湿度数据交由单片机进行处理,当单片机设置了在某个时间内进行调节温度或湿度时,如果温湿度不在目标值时单片机会输出控制信号进行调控;或者当用户开启自动模式时,温湿度不在一定范围里面单片机直接进行相应的调控。Wi-Fi模块是硬件系统与服务器交流的传输媒介,实现用户通过网络对温湿度的实时监控,且还可以通过手机对相应的控制量进行设置。
本系统将ESP8266-01S设置为从机,单片机通过串口向ESP8266-01S发送AT指令控制其进行联网、数据交互。在连上网络后进入系统的主页面,在这里用户可以进入菜单配置系统是否连接阿里云,连接上后可以通过云智能APP配置系统的参数。同时还可以进入菜单页面(ps:菜单页面当时设计的时候直接就是将不同的页面进行编号然后通过按键对编号加减然后通过if....else....和switch语句)进入不同的页面,如进入定时页面可以设置系统工作时间段和工作模式、进入定时控制页面可以定时调节温湿度、进入其他设置页面可以查看详细温湿度和调节时间。
三、部分功能讲解
ESP8266-01S(本系统中8266需使用安信可的mqtt的固件否则下面的AT指令将不可用,烧录教程 固件下载 )的控制原理是通过MCU串口发送AT指令,当需要向ESP8266-01S模块发送数据时,会调用“Usart_SendString()”函数。当串口接收到来自ESP8266-01S的数据时,中断函数“USART2_IRQHandler()”会被触发执行。如要上传可以通过串口发送MQTT报文:“ /sys/Product Key/Device Name/thing/event/property/post,"{"params":{"属性值标识符":值}}”我们需要将将这报文里面的Product Key和Device Name换成自己在阿里云生活物联网平台自己产品的Product Key和Device Name。当需要上传数据时,自己设置的属性值的标识符以及对应的值填入对应的位置,通过“AT+MQTTSUB=”指令上传,例如上传温度数据为10则通过单片机串口发“AT+MQTTPUB=0,"/sys/a1q2MQnS01b/jnlYEvjI9QCA4yOEuPBa/thing/event/property/post\",\"{\\\"params\\\":{\\\"temp\\\":10}}\",1,0\r\n”指令给向ESP8266-01S,阿里云物联网服务器上就能接收到相关数据,串口发送时需要注意报文里面的引号需要用格式转换符“\\\”转换否者将会被单片机认为是字符串的标志而省略。获取网络时间同样类似,通过单片机发送“AT+CIPSNTPCFG=1,8,"cn.ntp.org.cn","ntp.sjtu.edu.cn","ntp1.aliyun.com"”指令到ESP8266-01S连接NTP服务器;当单片机需要获取网络时间时只需要发送“AT+CIPSNTPTIME?”指令给ESP8266-01S,ESP8266-01S会向单片机发送一个“+CIPSNTPTIME:”字符开头的时间字符串,单片机通过串口接收中断进入数据处理函数进行处理。 四、不足 1、采用的是MQTT报文的形式上传数据,在长时间没有上传数据时会断连,没有心跳检测 2、控制部分就是简单if....else....没有PID 3、代码没写注释 五、遇到问题 遇到的最大问题就是当时脑子瓦特了在开了RTC需要外部晶振输入然后又把RTC外部晶振输入引脚当普通io口用,然后神奇的是时间能跑但是跑了一段时间后整个系统就会卡死。。。。。。大概找了两天问题最后翻数据手册突然看到的RTC外部晶振输入引脚是。。。。。。MD直接晕了。。。。。 六、避战演示
演示
源码(ps:比较大只能蓝奏云了):游客,本帖隐藏的内容需要积分高于 66 才可浏览,您当前积分为 0
密码:
|