基于Rt-Thread 和STM32F103的温湿度采集系统设计

基于Rt-Thread 和STM32F103的温湿度采集系统设计

写在前面:
入门RT-Thread的课设作业,自娱自乐,hhh

RT-Thread内核移植

详细的工程模板建立步骤参见野火的说明文档:
https://doc.embedfire.com/rtos/rtthread/zh/latest/application/porting_to_stm32.html
这里只是用了裁剪后的RT-Thread内核,我们可以rtconfig.h文件里面配置相关的参数,比如我们的工程里面用到了动态的内存分配,消息队列等需要在里面定义相关的宏,打开相应的功能:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第1张图片

工程程序实现

系统功能组成

系统涉及到的硬件由以下几部分组成:

1.交互输入部分:按键
2. 输出部分:TFTLCD屏幕显示,SD卡存储,led灯报警
3. 传感器采集:DHT11温湿度采集
4. 通讯部分:串口,wifi模块
5. 计时部分:RTC时钟计时
系统框图:基于Rt-Thread 和STM32F103的温湿度采集系统设计_第2张图片

系统软件设计

软件程序结构:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第3张图片

其中在定时器超函数中周期性采集温湿度信息,并发送消息队列到处理缓存传感器信息的线程,和超温处理线程,同时发布采集到一次传感器的事件。超温处理线程接收消息判断是否超过温度,wifi模块通过串口2将温湿度信息发送给wifi模块,由wifi模块实时上传到服务器。同时串口温度上传任务同时接收定时器发送的事件和PC机通过串口1发送的获取温度标志所触发的事件。当采集到传感器信息且上位机要求获取温湿度信息的事情同时发生时,通过串口1向PC发送温湿度信息。由于SD卡存储缓慢,所以由温湿度信息缓存线程在内存池中申请内存,并将获取到的温湿度信息缓存到内存中,同时更新LCD曲线绘制的历史温湿度信息缓存。LCD处理线程处理IO口中断发送过来的标志信息,并据此显示相应的菜单,温度湿度信息,显示所设定采样频率与阈值的情况等。SD卡存储任务作为后台任务,从缓存存储温湿度信息的内存中读取温湿度信息,并通过FATFS文件系统将相应的温湿度信息存入SD卡,同时根据每片内存的头部时间信息以及定时器采样频率推算本片内存中其他数据的时间信息,并将采样时间一起保存到SD卡中。在存储完一片内存片后,释放该内存到内存池之中。流程图如下所示:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第4张图片

部分工程效果展示

主菜单显示:
主菜单分为5个功能:1.温度阈值设定2.湿度阈值设定3.采样频率设定
4.温湿度曲线显示 5.温湿度实时数值显示
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第5张图片
温湿度,采样频率设定:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第6张图片
温湿度曲线:
其中实时的温湿度用黑线表示,红线是当前设定的温湿度阈值
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第7张图片
在原子云端查看wifi发送的信息:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第8张图片
SD卡csv温湿度信息文件存储效果:
基于Rt-Thread 和STM32F103的温湿度采集系统设计_第9张图片

工程源代码获取

源代码可以访问下面的链接在github上获取,本人还是小白,工程还不完善,欢迎提交修改!!!
https://github.com/sherecho/Rt-Thread-STM32F103ZET6-emperature-and-humidity-acquisition-system.

你可能感兴趣的:(单片机,嵌入式硬件,rtos)