Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
嵌入式操作系统
星火1号_spark_星火一号_开发板
[RT-Thread x 大学生夏令营]物联网温室报警系统
发布于 2023-07-26 01:12:05 浏览:705
订阅该版
**RT-Thread夏令营实践作品结题文档** **组号: 38** **项目名称: 联网温度报警系统** **学校:华南理工大学** **专业:微电子科学与工程** **组员:邓宇祺 郑飞扬(组长) 刘锦程 宋臻** **0 产品海报.............................................................................4** **1 设计方案** **1.1 系统概述..........................................................................5** **1.2 硬件准备..........................................................................5** **1.3 软件准备..........................................................................5** **1.3.1 RT-Thread搭建...........................................................5** **1.3.2 MQTT协议栈集成.......................................................5** **1.3.3 OneNet平台配置与数据读取...................................5** **1.3.4 LVGL GUI开发.............................................................6** **1.4 优化与调试......................................................................6** **1.4.1 稳定性优化..................................................................6** **1.4.2 用户界面优化..............................................................6** **1.4.3 性能优化......................................................................7** **2 技术实现** **2.1.1 简介...............................................................................7** **2.2.1 硬件...............................................................................7** **2.3.1 软件环境.......................................................................7** **2.4.1 程序结构.......................................................................8** **2.4.1 初始化邮箱...................................................................8** **2.4.2 线程1蜂鸣器控制和报警处理..................................9** **2.4.3 线程2-温湿度数据上传..............................................10** **2.5.1 LVGL显示部分..............................................................11** **2.6.1 功能说明........................................................................12** **2.6.1 使用说明........................................................................13** **3功能展示................................................................................13** **4 反思总结与收获..................................................................14** **人员分配** **郑飞扬、,刘锦程:** 编写驱动代码,使得STM32能够稳定运行和获取传感器数据。 集成MQTT协议栈,确保数据能够正确上传到OneNet平台。 编写数据采集和上报的代码,保证数据传输的稳定性和可靠性。 **宋臻:** 负责在OneNet平台上搭建项目,配置设备接入信息。 实现数据流和数据流转规则,实现对温度数据的阈值检测和报警处理。 配置报警通知方式,如邮件、短信等。 **邓宇祺:** 集成LVGL图形库,配置LCD屏幕和相关硬件。 设计并开发GUI界面,实现传感器数据的实时显示和温度图表等功能。 确保GUI在LCD上正确显示数据。 1. **设计方案** **1.1 系统概述:** • 设计一个联网温度报警系统,基于STM32开发板采集温度和光照等数据,并通过MQTT协议将数据上报到OneNet云平台。系统可实现超过阈值的温度进行报警处理,并使用LVGL开发GUI在LCD上实时显示传感器数据。 **1.2 硬件准备:** • 使用RT-Thread星火一号STM32开发板,确保其具备足够的计算和网络连接能力 • 使用板载温度传感器和光照传感器,确保其与STM32开发板兼容并能够准确读取数据 • 使用板载LCD屏幕进行LVGL GUI开发。 **1.3 软件准备:** **1.3.1 RT-threat搭建:** • 根据STM32开发板的型号和硬件配置,选择合适的RT-threat版本,并进行相应的安装和配置。 • 配置RTOS环境,确保系统能够正确运行和管理多个任务。 **1.3.2 MQTT协议栈集成:** • 选择适合STM32的MQTT协议栈,确保其能够和RT-threat集成。 • 配置MQTT连接参数,包括OneNet平台的域名、端口、设备ID、设备API-KEY等信息。 **1.3.3 OneNet平台配置与数据读取** • 使用RT-threat提供的API读取温度和光照传感器数据,确保数据采集准确可靠。 • 编写MQTT数据上报代码,将采集到的数据通过MQTT协议上传到OneNet平台。 • 在OneNet平台上注册账号并创建一个新的项目,用于接收和处理传感器数据。 • 在OneNet平台上添加设备,获取MQTT连接所需的设备ID和设备API-KEY。 • 配置数据流和数据流转规则,实现对温度数据的阈值检测和报警处理。 • 在OneNet平台上设置阈值报警条件,一旦温度超过设定的阈值,触发报警动作。 • 可选择发送邮件、短信或调用Webhook等方式进行报警通知。 **1.3.4 LVGL GUI开发:** • 集成LVGL图形库,根据LCD屏幕的分辨率和显示需求进行初始化配置。 • 编写GUI代码,实时从OneNet平台获取传感器数据并在LCD屏幕上显示,例如温度值和光照强度等。 **1.4 优化与调试:** **1.4.1 稳定性优化** • 实现异常处理机制,如网络连接断开、传感器读取失败等情况,确保系统稳定运行。 • 进行测试和调试,验证系统在长时间运行中是否存在内存泄漏或资源耗尽的问题。 **1.4.2 用户界面优化:** • LVGL提供丰富的控件,可根据需求优化GUI界面,提升用户体验。 • 考虑设计直观的界面,如温度图表、报警信息展示等,以便用户快速获取信息。 **1.4.3. 性能优化:** • 针对STM32的资源有限特点,对代码进行优化,减少内存占用和功耗消耗。 • 使用适当的数据压缩算法,在MQTT通信中减少数据传输量,提高传输效率。 1. **技术实现** **2.1.1 简介** 本文介绍了在 RT-Thread 操作系统上使用 LVGL(LittlevGL)图形库来实现温湿度传感器数据的上传和显示。LVGL是一个开源的轻量级嵌入式图形库,适用于资源受限的嵌入式系统,提供了丰富的图形界面组件和动画效果。并且使用onenet进行数据的云上传 **2.2.1 硬件** 硬件平台: 本项目使用的硬件平台包括: 星火一号开发板 **2.3.1 软件环境** 1.RT-Thread 操作系统 2.LVGL 图形库 3.onenet.h 头文件(可能为自定义的上传数据至OneNET平台的库) 1. **.4.1 程序结构** 2. 1.初始化邮箱:创建三个邮箱用于传递数据 2.线程1:负责蜂鸣器控制和报警处理 3.线程2(onenet_upload_entry):获取温湿度传感器数据并上传至OneNET云平台 4.命令回调函数:处理OneNET平台发送的命令 5.LVGL显示部分:使用LVGL库实现温湿度数据的实时显示 **2.4.1 初始化邮箱** ```c 1. static struct rt_mailbox mb; 2. static char mb_pool[128]; 3. 4. int onenet_upload_cycle(void) { 5. *// 初始化一个邮箱* 6. rt_err_t result = rt_mb_init(&mb, "mbt_mb", \&mb_pool[0], sizeof(mb_pool) / 4, RT_IPC_FLAG_FIFO); 7. if (result != RT_EOK) { 8. rt_kprintf("init mailbox failed.\\n"); 9. return -1; 10. } 11. *// ...* 12. } ``` 邮箱是一种用于在线程之间传递数据的机制。在该项目中,我们使用三个邮箱: 1.mb: 用于传递报警状态的邮箱,在线程1中负责发送报警状态,线程2中负责接收报警状态。 2.mb_hmd: 用于传递湿度数据的邮箱,线程2负责发送湿度数据,LVGL显示部分负责接收湿度数据。 3.mb_tmp: 用于传递温度数据的邮箱,线程2负责发送温度数据,LVGL显示部分负责接收温度数据。 **2.4.2 线程1蜂鸣器控制和报警处理** 1.初始化邮箱:创建一个邮箱用于传递报警状态 2.等待温湿度传感器初始化完成 3.读取温湿度数据并判断是否报警(温度超过29度) 4.根据报警状态控制蜂鸣器和LED灯 5.使用邮箱发送报警状态给线程2 ```c 1. static void thread1_entry(void \*parameter) { 2. *// ...* 3. rt_pin_mode(PIN_BEEP, PIN_MODE_OUTPUT); 4. *// ...* 5. while (1) { 6. *// 从邮箱中收取报警状态* 7. if (rt_mb_recv(&mb, (rt_uint32_t \*)&str, RT_WAITING_FOREVER) == RT_EOK) { 8. if (str == mb_str1) { 9. rt_pin_write(PIN_BEEP, PIN_HIGH); *// 报警时,蜂鸣器响铃* 10. LOG_D("ALERT: %s\\n", str); 11. } 12. if (str == mb_str2) 13. rt_pin_write(PIN_BEEP, PIN_LOW); *// 清除报警时,蜂鸣器停止响铃* 14. if (str == mb_str3) 15. rt_pin_write(PIN_BEEP, PIN_LOW); *// 正常状态时,蜂鸣器停止响铃* 16. *// 延时500ms* 17. rt_thread_mdelay(500); 18. } 19. } 20. rt_mb_detach(&mb); *// 执行邮箱对象脱离* 21. } ``` **2.4.3 线程2- 温湿度数据上传** 1.初始化邮箱:创建两个邮箱用于传递温湿度数据 2.等待温湿度传感器初始化完成 3.循环读取温湿度数据并上传至OneNET平台 4.通过邮箱获取温湿度数据 5.判断温度是否超过阈值,并根据结果上传数据至OneNET(上传数据时,若发生错误,停止上传并输出错误信息) 6.命令回调函数 - OneNET命令处理 7.定义了回调函数onenet_cmd_rsp_cb,用于处理OneNET平台发送的命令 根据命令控制LED灯的亮灭 ```c 1. static void onenet_upload_entry(void \*parameter) { 2. *// ...* 3. float humidity, temperature; 4. *// ...* 5. *// 循环读取温湿度数据并上传至OneNET平台* 6. while (1) { 7. *// 读取湿度* 8. humidity = aht10_read_humidity(dev); 9. rt_mb_send(&mb_hmd, (int)humidity); *// 将湿度数据发送至邮箱* 10. *// 读取温度* 11. temperature = aht10_read_temperature(dev); 12. rt_mb_send(&mb_tmp, (int)temperature); *// 将温度数据发送至邮箱* 13. *// ...* 14. } 15. } ``` 线程2负责循环读取温湿度数据,并通过rt_mb_send函数将数据发送至邮箱mb_hmd和mb_tmp。 **2.5.1 LVGL显示部分** 1.创建一个仪表盘(meter)用于显示温度数据 2.创建一个进度条(bar)用于显示湿度数据 3.创建一个动画来更新温湿度数据的显示 4.定义事件回调函数(event_cb)用于在仪表盘上显示温度数值 ```c 1. void lv_example_meter_1(void) { 2. *// ...* 3. *// 创建一个仪表盘(meter)用于显示温度数据* 4. meter = lv_meter_create(lv_scr_act()); 5. *// ...* 6. *// 创建一个进度条(bar)用于显示湿度数据* 7. lv_obj_t \* bar = lv_bar_create(lv_scr_act()); 8. *// ...* 9. *// 定义事件回调函数(event_cb)用于在仪表盘上显示温度数值* 10. static void event_cb(lv_event_t \* e) { 11. *// ...* 12. char buf[8]; 13. lv_snprintf(buf, sizeof(buf), "%d", (int)lv_bar_get_value(obj)); 14. *// 在仪表盘上显示温度数值* 15. lv_draw_label(dsc-\>draw_ctx, \&label_dsc, \&txt_area, buf, NULL); 16. } 17. } ``` LVGL部分负责创建仪表盘和进度条,并使用回调函数event_cb在仪表盘上显示温度数据 **2.6.1功能说明** 1.温湿度数据上传:线程2负责定时从传感器读取数据,并通过onenet_mqtt_upload_digit函数上传至OneNET云平台。上传周期为1秒。 2.报警处理:线程1负责监测温度是否超过阈值,若超过阈值则发出报警信号(蜂鸣器响铃和LED灯亮红色)。 3.OneNET命令处理:通过onenet_set_cmd_rsp函数设置命令回调函数,用于处理OneNET平台发送的命令,控制LED灯的亮灭。 **2.6.1使用说明** 1.在RT-Thread的main函数中调用onenet_upload_cycle函数启动数据上传和报警处理功能。 2.使用lv_example_meter_1函数显示温湿度数据的实时变化。 **注意事项** 确保正确连接温湿度传感器和其他硬件设备。 确保OneNET云平台配置正确,包括设备注册、数据流配置等。 根据具体硬件平台和OneNET云平台的要求,可能需要进行适当的修改和配置。 总结 本文档介绍了如何在RT-Thread操作系统上使用LVGL图形库实现温湿度数据的上传和显示。通过本项目,可以实现温湿度数据的实时显示和上传到OneNET云平台,同时支持报警功能。用户可以根据自己的硬件平台和应用需求进行修改和扩展。 **3.反思总结与收获** 在参加由RT-Thread和华南理工大学组办的夏令营期间,我所在的小组成功完成了一个温湿度报警显示系统的项目,基于STM32和星火一号开发板,并成功实现了温湿度数据的获取、上传至云端以及使用LVGL进行实时显示。同时,系统还具备了温度超过限值时的报警功能,报警随温度降低而停止,并且可通过功能键进行取消。通过这次项目的开发,我深刻体会到了团队协作的重要性以及嵌入式系统开发的挑战和乐趣。 1.学习成果与技术收获:在夏令营中,我深入学习了嵌入式系统和RTOS的基础知识,掌握了STM32开发板的使用方法以及RT-Thread操作系统的应用。通过与小组成员密切合作,学会了如何进行团队项目开发,并在此过程中不断提高了编程、硬件调试以及问题解决的能力。掌握了LVGL图形库的使用,使得我们的温湿度报警显示系统界面更加美观和用户友好。 2.团队合作与沟通能力:在项目开发过程中,我深刻认识到团队合作的重要性。通过与小组成员相互交流、分工协作,我们能够高效地解决问题,充分发挥每个人的优势,使项目顺利完成。同时,我们的沟通能力也得到了提高,学会了倾听和表达观点,确保大家对项目目标和进度的理解一致。 3.项目管理和时间规划:在项目开发中,我们经历了一些时间紧迫的情况,这让我们深刻认识到合理的项目管理和时间规划的重要性。未来,我会更加注重制定详细的计划和时间表,并在团队中积极促进任务分配的合理性,以避免项目开发过程中的紧张局面。 4.深入学习嵌入式系统开发:在夏令营中,我对嵌入式系统开发产生了浓厚的兴趣。未来,我希望能够进一步深入学习嵌入式系统开发的相关知识,包括更多的硬件接口和外设的应用,RTOS更高级的特性,以及更复杂系统的设计与实现。 5.探索物联网技术:我们的项目实现了温湿度数据上传到云端,但这只是物联网技术应用的一个方面。我希望能够深入了解物联网的各种技术和应用场景,包括传感器网络、数据通信和云计算等,为未来开发更复杂的物联网应用做准备。 6.继续开展团队项目:通过这次夏令营的团队项目开发,我体会到了团队合作的魅力和效果。未来,我希望能够继续参与更多的团队项目,不仅能够提高技术水平,还能培养团队合作和领导能力。 7.不断创新与学习:技术的发展日新月异,未来嵌入式系统开发领域也将不断涌现新技术和新应用。我希望自己能够保持学习的热情,不断探索和学习新知识,紧跟技术发展的脚步。 通过这次夏令营,我收获了丰富的嵌入式系统开发经验,认识到团队合作的重要性,也对未来的学习和发展有了更清晰的规划。我将继续保持学习的热情,不断努力,朝着成为一名优秀的嵌入式系统开发工程师的目标不断前进。感谢夏令营的组织者和导师们,让我们有机会参与这次精彩的学习活动,为我们的未来之路点亮了明灯。同时,我也要感谢我的小组成员们,是你们的默契与努力,让我们的项目得以顺利完成。未来的路还很长,让我们一起携手前行,创造更多的辉煌!
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Flynn1900
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
嵌入式系统中如何管理芯片级通讯总线协议
2
邮箱 队列能否实现一个任务发送,多个任务接受呢
3
超低功耗物联网功能的RTT
4
求rt_thread 可以在STC32上实现吗,
5
申请邮箱rt_mb_create 邮箱内容大小的问题
6
rt thread操作系统是运行在什么里面?上位机还是单片机
7
[星火一号] 代码模板, 手动写启动代码, 开机后 snprintf 不能处理 %llu 了, 是有什么配置上的冲突吗?
8
使用MDK5.37开发星火一号,双击mklinks.bat 文件后,目录下没有 rt-thread 和 libraries 的文件夹图标。
9
studio文件构建丢失
10
rtt中星火一号stm-32怎么把两个示例工程合并成一个
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
7
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
2
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部