基于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文件里面配置相关的参数,比如我们的工程里面用到了动态的内存分配,消息队列等需要在里面定义相关的宏,打开相应的功能:
在这里插入图片描述

工程程序实现

系统功能组成

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

1.交互输入部分:按键
2. 输出部分:TFTLCD屏幕显示,SD卡存储,led灯报警
3. 传感器采集:DHT11温湿度采集
4. 通讯部分:串口,wifi模块
5. 计时部分:RTC时钟计时
系统框图:在这里插入图片描述

系统软件设计

软件程序结构:
在这里插入图片描述

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

部分工程效果展示

主菜单显示:
主菜单分为5个功能:1.温度阈值设定2.湿度阈值设定3.采样频率设定
4.温湿度曲线显示 5.温湿度实时数值显示
在这里插入图片描述
温湿度,采样频率设定:
在这里插入图片描述
温湿度曲线:
其中实时的温湿度用黑线表示,红线是当前设定的温湿度阈值
在这里插入图片描述
在原子云端查看wifi发送的信息:
在这里插入图片描述
SD卡csv温湿度信息文件存储效果:
在这里插入图片描述

工程源代码获取

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

概述:分布式温度监控系统基于 STM32 系类芯片开发,支持采集多达六个分节点的温度数据,网关节点收集分节点的数据并通过 WIFI 上传云端远程实时监视,也可本地连接串口与 PC 端通讯,上位机实时显示分节点数据。该系统适用于家庭、办公室、教室等小面积场所的多点温度监控,无线传输距离可达 100m ~ 500m,具有功耗低,丢包率低,传输距离远等特点,是一个相当实用的设计。 开发环境硬件:stm32f407-atk-explorer 扩展板:DS18B20数字温度传感器,NRF24L01无线射频模块,ESP8266 WIFI模块 RT-Thread版本:RT-Thread V 4.0.3 开发工具及版本:MDK 5.27 RT-Thread使用情况概述内核部分:调度器,信号量,消息队列。 调度器:创建多个线程来实现不同的工作。 信号量:用来同步线程。 消息队列:用来实现线程之间传递的数据。 组件部分:SPI框架, Sensor框架,SAL 套接字抽象层 SPI框架:使用 SPI 框架来驱动温度传感器,上层代码可以提高代码的可重用性。 Sensor框架:为上层提供统一的操作接口,提高上层代码的可重用性;简化底层驱动开发的难度,只要实现简单的 ops(operations: 操作命令) 就可以将传感器注册到系统上。 SAL套接字抽象层:组件完成对不同网络协议栈或网络实现接口的抽象并对上层提供一组标准的 BSD Socket API,这样开发者只需要关心使用网络应用层提供的网络接口,而无需关心底层具体网络协议栈类型实现,极大的提高了系统的兼容性,方便开发者完成协议栈的适配网络相关的开发 软件包部分: Webclient:提供设备与 HTTP Server 的通讯的基本功能。 pahomqtt,:本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程序。 Onenet:是 RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册控制等功能。 cJSON:C语言实现的极简的解析 JSON 格式的软件包。 at_device:是由 RT-Thread AT 组件针对不同 AT 设备的移植文件示例代码组成,目前支持的 AT 设备有:ESP8266、M26、MC20、RW007、MW31、SIM800C 以及 SIM76XX 系列设备等。 nRF24L01:是一个 RT-Thread 的软件包,该软件包提供了 nRF24L01 模块的驱动。 硬件框架MCU 定时读取 DS180B20 的温度数据,然后通过 NRF24L01 传输到接收节点,接收节点把数据分别传输到云端PC上位机。 软件框架说明本项目使用分布节点的方式来实现温度的采集与上传,从而避免一个节点的系统崩溃并不影响到其余的节点,本项目软件分为两部分: 第一部分:采集节点 MCU 上电之后完成板级外设初始化,并初始化温度传感器DS18B20 准备采集温度数据,无线射频芯片NRF24L01,在一切准备妥当之后,就会定时向接收节点发送温度数据。 第二部分:接收节点 MCU 上电之后首先完成板级外设的初始化,并初始化 ESP8266 实现与 ONENET 的连接。初始化 NRF24L01 准备接收来自采集节点的温度信息,接收到节点发送过来的温度数据,分别发送到 ONENET 平台PC 端上位机。 软件模块说明发送节点: 发送节点创建了3个线程,1个消息队列 read_temp_entry:周期性的读取温度传感器的值,并把读取到的值通过消息队列发送 nrf24l01_send_entry:使用消息队列来接收传感器检测到的温度值,并通过 BRF24L01 发送到接收节点 led_shine_entry:LED 在每次发送成之后,来改变当前的状态,来检测当前系统的运行状态 接收节点: 接收节点创建了6个线程,1个信号量,1个事件集,2个ringbuff,1个邮箱,1个消息内存池 nrf24l01_receive_entry:NRF24L01 数据接收线程,正确收到数据后会发送WRITE_EVENT_P0事件,然后把数据放到 ringbuff,申请一块内存池,然后把数据放入内存池,最后把内存池的首地址放到邮箱。 save_recv_p0_data_entry:保存数据线程,接收WRITE_EVENT_P0 事件后,读取ringbuff0的数据,保存 节点0 的温度与时间戳。 save_recv_p1_data_entry:保存数据线程,接收WRITE_EVENT_P1 事件后,读取ringbu
RT-Thread作品秀】基于RT-Thread的气压温度测量系统作者:安静的句型 概述(说明应用产生的背景、实现功能)基于ART-Pi,利用MS-P2XD10气压传感器模块,L610-CN-00-MiniPCIe-10Cat模块,设计了一款气压温度测量系统,测量环境的大气压力温度,并上报到阿里云,连接到物模型,实时显示。 开发环境(所采用的软、硬件方案)硬件:ART-Pi;L610;LPS22HH RT-Thread版本:4.0.3 开发工具及版本:MDK-v5.27.0.0 RT-Thread使用情况概述(简要总结下应用中RT-Thread使用情况:内核部分、组件部分、软件包部分、内核、其他)使用了RT-Thread内核中使用线程、信号量、 邮箱、内存池等功能,在读取到传感器数据后,将气压温度数据通过邮箱传输到阿里云发布线程,向云端发送。 调用了FinSH组件用于系统过程调试,监视线程应用情况、设备使用情况、其它信息等。 加载了多个软件包: AT DEVICE软件包,用于L610的驱动。 WebClient软件包,测试L610功能。 ali_iotkit软件包,配置阿里云三元组信息,连接阿里云。 cJSON软件包,进行数据封装。 硬件框架(概述应用所采用的硬件方案框图,并对核心部分做介绍)利用ART-Pi作为主控单元,通过I2C接口与LPS22HH气压传感器模块通讯,获取气压温度值。通过UART接口与L610Cat通讯模块通讯,与云端连接。 其中LPS22HH需注意连线,具体连线如下: LPS22HH板 ART-Pi 定义 VDD P1-1 3.3V VDDIO P1-1 3.3V SA0 P2-39 GND SDA P1-3 I2C-SDA SCL P1-5 I2C-SCL CS P1-1 3.3V GND P1-39 GND 其中VDDVDDIO都是为LPS22HH供电,直接使用ART-Pi的3.3V电源。SA0是用于选择地址,接地后地址为0x5C。SDASCL是I2C接口“i2c3”。CS作为片选信号,接高电平后选择接口为I2C。 L610连线如下: L610板 ART-Pi 定义 UA1_TX P1-10 UART-TX UA1_RX P1-8 UART-RX AUTO_POWER_ON_1 P1-6 GND AUTO_POWER_ON_2 P1-12 PI5 CTS短路帽不接。 电源短路帽接至VUSB。 连接USB接口供电通讯。 软件框架说明(介绍应用所采用的软件方案框图、流程图等,并加以解说)在main.c文件中首先进行了L1610的上电,mqtt初始化,lps22hh初始化等,并创建了四个线程,LED闪烁线程、阿里云发送数据线程、接收阿里云命令线程、定时器线程。 当前实现了基础功能: 通过控制台发送读取传感器数据指令后,在阿里云显示的功能。 后期还需继续完善两个功能: 硬件定时器功能,可按设定的时间间隔进行工作,采集传感器数据并上报云端,当前使能了timer13,但是定时器无法正常工作,程序是按照文档原潘多拉板直接移植的,暂未找到问题原因。 阿里云下发命令功能,阿里云可以下发命令控制LED开关,下发命令控制硬件定时器定时间隔,随时修改传感器上报数据频率。除了阿里云在线调试界面,暂未找到如何下发命令方法。 还有一些问题: L610的初始化过程有些不太清楚,看at_device_l610.c文件,是在其中创建了一个初始化的线程并直接调用了,这个怎么能在main中统一初始化呢,现在是在main中延时了10秒等待初始化完成后再执行mqtt等初始化。 对接sensor设备框架未成功,尝试了创建sensor设备成功,但是初始化过程应该有问题,对于一个传感器两个参数的情况暂未了解透彻。 软件模块说明(介绍应用软件关键部分的逻辑、采用的实现方式等)sensor_st_lps22hh应用模块直接调用了st的函数库lps2hh_reg,首先创建了stmdev_ctx_t变量,完成了寄存器读写函数的实例化,在此需注意lps22hh的地址,选择了sa0为gnd后地址为0x5c,此地址为7位,可以直接在i2c设备框架中直接赋值无需右移。另外在读取寄存器值时应首先写地址然后才是读数据。参考st的polling文件,编写了初始化函数读取数据函数,直接读取气压温度值,并发送至邮箱。 api_ali应用模块参考ali-iotkit的mqtt_example文件,在ENV中配置好三元组信息后,进行mqtt初始化,读取三元组,与云端建立mqtt连接,并订阅了发布读取主题。编写了数据发布函数,可由发布线程直接调用。试验了cJSON软件包,直接打包成json数据,试验了直接赋值字符串,均可正常实现。试验了接收命令线程,在阿里云中
好的,我会尽力回答你的问题。首先,需要明确一下你的问题:你想知道如何使用 RT-Thread Studio,RT-Thread+ stm32f103c8最小系统板、DHT11温湿度模块、ESP01S模块控制LED灯并将数据发布订阅到私有云IP的物联网系统程序是吗? 如果是这样,那么我可以给你提供一些基本的步骤思路。首先,你需要了解 RT-Thread Studio 的基本操作使用方法。RT-Thread Studio 是一个基于 Eclipse 的集成开发环境,它可以帮助你快速开发嵌入式系统。 接下来,你需要准备一些硬件设备,包括 stm32f103c8最小系统板、DHT11温湿度模块、ESP01S模块LED灯。这些设备可以通过串口、I2C、SPI等接口与 stm32f103c8最小系统板相连。 然后,你需要编写一些程序代码,使用 RT-Thread 操作系统来控制这些设备。你可以使用 C 语言或者其他支持的编程语言来编写程序代码。需要注意的是,在编写程序代码之前,你需要了解 RT-Thread 操作系统的基本原理使用方法。 最后,你需要将数据发布订阅到私有云IP。这可以通过使用 MQTT 协议来实现。你需要使用 ESP01S模块来连接 WiFi 网络,并使用 MQTT 协议来将数据发布订阅到私有云IP。需要注意的是,在使用 MQTT 协议之前,你需要了解其基本原理使用方法。 总结一下,实现物联网系统需要掌握 RT-Thread Studio、RT-Thread 操作系统、硬件设备、编程语言 MQTT 协议等知识。如果你对这些知识不熟悉,建议你先进行学习研究,然后再开始实现物联网系统。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值