Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
HMI-Board
物联网
[RT-Thread x 大学生夏令营] 基于HMI-Board的多功能物联网检测信息提示屏设计
发布于 2023-07-26 15:04:29 浏览:558
订阅该版
[tocm] > # **项目背景** 项目的设计是基于[RT-Thread x 大学生夏令营] 的培训内容,使用HMI-Board设计一个多功能物联网检测的信息提示屏。 应用场景1:温度与湿度是我们出门和保持身体健康的重要参数,每当我们出门时总会看一下今天的天气,并根据天气选择我们的穿衣和出行。一块摆放在桌面上的多功能物联网提示屏恰好可以在我们需要时,为我们提供出行的参考建议。 应用场景2:当我们在家时,开着空调休息时,可以根据物联网提示屏提供的信息调节空调的温度和模式,带给人们最舒适的温度环境。 ## 功能简介 本次夏令营第一周学习RT-Thread内核、设备驱动,第二周实践周设计实物,经过两周的不断学习,第六组成功完成并设计出了一个拥有外界环境检测功能、自身姿态感知功能、网络通信功能、数据传输OneNET云端功能、基于LVGL的数据显示、触摸屏幕触发事件功能的多功能物联网检测的信息提示屏。 ### 信息检测 信息检测部分使用AHT10、MPU6050获取温湿度、姿态和加速度信息。 ### 屏幕显示 屏幕显示部分使用LVGL组件驱动HMI-Board板载屏幕显示温湿度以及姿态和加速度信息。 ### 联网入云 联网入云部分使用rw007无线局域网模块通过MQTT协议和OneNET云连接,将温湿度和姿态以及加速度信息显示在云端。 # **项目简介** ## 项目成员 张旭东(组长)、潘庆明、李涵轩、王斐 ## 开发环境 RT-Thread studio、HMI-Board、OneNET ## 项目设计规划 [实践周作品规划.docx](https://club.rt-thread.org/file_download/4e4cab4746d24bbb) ## 人员分配 张旭东、潘庆明 负责各种传感器的驱动、线程规划与调度、屏幕的驱动和触摸事件的设计,将数据传输到云端,实时时间的同步 李涵轩、王斐 负责OneNET云端的配置和数据流的传输,相关传感器驱动的配置。 # 系统设计 ## 线程分配 线程2 aht10获取温度 优先级20 线程3 发送温湿度数据到OneNET 优先级21 线程4 获取MPU6050S姿态数据 优先级22 线程5 发送姿态数据到云端 优先级23 线程6 LVGL显示温度和姿态数据、触摸按键切换显示内容 优先级19 ## 硬件设计 硬件设计主要由开发平台的介绍、传感器的使用 ### 开发平台   ### aht10  ### MPU6050  ## 软件设计 ### 温湿度的获取 系统为aht10分配线程,通过I2C和aht10通信获取实时温度。 代码如下 ```c //线程名的定义 static struct rt_thread task2; //空间分配 static char PCB2_TEMP[1024]; //线程初始化 void task2_init() { //分配静态线程2 rt_thread_init(&task2,"task2",print_task2,RT_NULL,&PCB2_TEMP[0],sizeof(PCB2_TEMP),21,5); //启动线程2 rt_thread_startup(&task2); } //线程入口函数 void print_task2(void *param) {//线程2接口函数 //测温 while(1) { tem = print_temputer_average(0,dev); rt_kprintf("temputer: %lf\n",tem); him = print_temputer_average(1,dev); rt_kprintf("humidity: %lf\n",him); rt_thread_mdelay(1000); //睡眠1s } } //计算平均温度 float print_temputer_average(uint8_t T_OR_H,aht10_device_t dev) {//参数为0时计算平均温度 参数为1时计算平均湿度 if(T_OR_H==0) { static float temputer_avg = 0.0; for(uint8_t i=0;i<100;i++) { temputer_avg += aht10_read_temperature(dev); } temputer_avg/=100.0; return temputer_avg; } else if(T_OR_H==1) { static float humidity_avg = 0.0; for(uint8_t i=0;i<100;i++) { humidity_avg += aht10_read_humidity(dev); } humidity_avg/=100.0; return humidity_avg; } else if(T_OR_H==2) { static float humidity_avg = 0.0; for(uint8_t i=0;i<100;i++) { humidity_avg += aht10_read_humidity(dev); } humidity_avg/=100.0; //return humidity_avg; static float temputer_avg = 0.0; for(uint8_t i=0;i<100;i++) { temputer_avg += aht10_read_temperature(dev); } temputer_avg/=100.0; //return temputer_avg; rt_kprintf("temperature:%f\n",temputer_avg); rt_kprintf("humidity:%f\n",humidity_avg); return -1; } else return 0; } ```  图 温湿度的获取 ## 姿态获取 姿态获取部分使用MPU6050六轴传感器,通过获取加速度和角速度来获取姿态。 代码如下 ```c #include "mpu6xxx.h" #define MPU6XXX_DEVICE_NAME "i2c1" static int mpu6xxx_test() { //初始化数据结构 struct mpu6xxx_device *dev; struct mpu6xxx_3axes accel, gyro; int i; /* Initialize mpu6xxx, The parameter is RT_NULL, means auto probing for i2c*/ dev = mpu6xxx_init(MPU6XXX_DEVICE_NAME, RT_NULL); //校验初始化 if (dev == RT_NULL) { rt_kprintf("mpu6xxx init failed\n"); return -1; } rt_kprintf("mpu6xxx init succeed\n"); //求5次平均值 for (i = 0; i < 5; i++) { mpu6xxx_get_accel(dev, &accel); mpu6xxx_get_gyro(dev, &gyro); } //失能dev mpu6xxx_deinit(dev); return 0; } ```  ### 通信设计 通信部分使用rw007无线局域网传感器,使用spl驱动rw007与wifi连接,实现通信的功能。  ### 数据上传云端设计 数据入云使用rw007连接wifi通过MQTT协议和OneNET云端连接,将温湿度和姿态数据发送到OneNET云从而实现数据入云的功能    温度入云的代码如下 ```c static struct rt_thread task3; //线程创建 static char PCB3_TEMP[2048]; //空间分配 //线程初始化 void task3_init() {//上传数据到云端 //分配静态线程3 //static uint8_t count; rt_thread_init(&task3,"task3",print_task3,RT_NULL,&PCB3_TEMP[0],sizeof(PCB3_TEMP),22,10); rt_thread_startup(&task3); } //发送数据 void print_task3(void *param) {//线程3接口函数 static rt_err_t result=0; static uint8_t bats[13] = "hello whold"; while(1) { result = onenet_mqtt_publish("text",bats,sizeof(bats)); if(result==0)//&&count==0 {//连接上发送数据 if(temp_tem!=(tem*10)&&temp_him!=(him*10)) {//数据发生变化在上传 onenet_mqtt_upload_digit("temperature", tem); onenet_mqtt_upload_digit("humidity", him); temp_tem = tem*10; temp_him = him*10; } } rt_thread_mdelay(50); //睡眠50ms } } ``` ### 屏幕显示 屏幕显示部分使用LVGL软件包驱动板载的屏幕,通过屏幕显示当前的姿态数据和温湿度数据。  # 总结 通过RT-Thread夏令营的活动,我学习到了实时操作系统的基本知识,学会了如何使用RT-Thread Studio创建工程、编写代码、下载与调试代码、多人协作开发项目。在实践的过程总是遇到各种问题,在老师和队友的解答下,我和队友克服了种种困难,终于完成了本次设计。非常感谢队友的配合和导师的耐心教导。不得不说有一个好的队友非常重要,他可以和你一起解决问题,一起熬夜、甚至提前一步完成项目,这个过程使我收获了一次较好的团队合作机会。 经过我们的不懈努力,我们完成了本次的实验周设计。愿自己和队友在之后的学习中更加努力,找到属于自己的兴趣并不断坚持下去,积极的面对生活,少熬夜(不想熬夜了)。 # 开源链接 开源地址 https://gitee.com/ccacom/HMI 演示视频 https://www.bilibili.com/video/BV1cP411k7Yj/?p=2&share_source=copy_web&vd_source=252f853c39166a4fbf4e62b18204c9a2
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
casat
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
0
关注TA
发私信
相关文章
1
用N58 4G模组连接阿里云在解析域名指令不对
2
使用正点原子的探索者,可以ping通,提示getaddrinfo error。
3
AT_DEVICE中BC26各项BUG反馈
4
为什么HAL_TCP_Read中select总会返回0的一个结果
5
有没有人想要移植Blynk库
6
stm32 上如何实现rtmp,该如何入手
7
物联网刚入坑,想了解下lwip和at连接物联网平台的区别?
8
想问个问题,通过ESP8266接入网络后,如何上传数据和接入物联网平台??
9
除了BC26,还有其他比较好用的NB模块吗?
10
ESp8266的几个socket API函数
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部