使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
目录:
1.使用RT-Thread 系统实现DIY数字仪表(一)——STM32CUBMX5.6移植touchGFX4.13
2.使用RT-Thread 系统实现DIY数字仪表(二)——把TouchGFX移植到RTThread系统
3.使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
4.使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加IOT软件包
5.使用RT-Thread 系统实现DIY数字仪表(四)——完善TouchGFX仪表界面
6.使用RT-Thread 系统实现DIY数字仪表(五)——开发微信小程序
实验平台:
硬件: 野火挑战者STM32F767 V1开发版和SHT30温湿度传感器
软件: TouchGFXDesigner v4.13和 STM32CubeMX v5.6.0,MDK v5.29,RT-Thread env 工具
实验前准备工作:
1.准备一套 野火挑战者STM32F767 开发版或其他核心板
2.安装 TouchGFXDesigner v4.13
3.安装STM32CubeMX v5.6.0和X_CUBE_TOUCHGFX软件包
4.安装 MDK v5.27以上版本
5.下载 RTThread源码包https://gitee.com/rtthread/rt-thread
下载:
代码持续更新中:github代码下载地址https://gitee.com/Aladdin-Wang/hellotouchGFX.git
联系作者:
加微信备注touchgfx,拉入touchgfx-rtthread技术交流群共同学习
1. 添加I2C设备
1.1. 打开I2C设备驱动框架
Hardware Drivers Config → On-chip Peripheral Drivers → Enable
I2C1 BUS (software simulation)
配置软件I2C的GPIO管脚,我所使用的IO口分别是SCL->PD_12 ,SDA->PD_13,
1.2 生成工程
打开串口调试工具,使用list_device可以看到i2c1设备。
2. 添加SHT3x软件包
RT-Thread online packages → peripheral libraries and drivers
选择完,保存更新软件包,重新生成工程
打开软件包的目录,可以看到说明文档,通过文档可以了解软件包如何使用
…\4_rtthread_TouchGFX_iot\stm32f767-fire-challenger\packages\sht3x-latest\docs
2.1 使用命令测试软件包
3. 获取温湿度传感器数据
在使用软件包提供的命令测试设备成功之后,创建一个线程,使用SHT3x软件包提供的API获取SHT3x数据。
在Applicaition分组之下,新建一个文件sht30_ccollect.c用于存放SHT3x获取数据的相关代码,编辑以下内容:
#include <rtthread.h>
#include <board.h>
#include <sht3x.h>
#define LOG_TAG "sht30"
#define LOG_LVL LOG_LVL_DBG
#include <ulog.h>
#define THREAD_PRIORITY 9
#define THREAD_STACK_SIZE 1024
#define THREAD_TIMESLICE 5
static rt_thread_t tid1 = RT_NULL;
static struct rt_mailbox sht30_mb;
static char mb_pool[16];
static sht3x_device_t sht3x_device = RT_NULL;
sht3x_device_t get_sht30_singleshot(void)
{
if (rt_mb_recv(&sht30_mb, (rt_ubase_t *)&sht3x_device, RT_WAITING_FOREVER) == RT_EOK)
{
return sht3x_device;
}
else
{
return RT_NULL;
}
}
/* 入口函数 */
static void sht30_collect_thread_entry(void *parameter)
{
sht3x_device = sht3x_init("i2c1", 0x44);
rt_thread_mdelay(1000);
while (1)
{
if(RT_EOK == sht3x_read_singleshot(sht3x_device))
{
rt_mb_send(&sht30_mb, (rt_uint32_t)sht3x_device);
LOG_D("sht30 humidity : %d.%d ", (int)sht3x_device->humidity, (int)(sht3x_device->humidity * 10) % 10);
LOG_D("temperature: %d.%d\n", (int)sht3x_device->temperature, (int)(sht3x_device->temperature * 10) % 10);
}
else
{
LOG_D("read sht3x fail.\r\n");
}
rt_thread_mdelay(5000);
}
}
/* 创建线程 */
int sht30_collect(void)
{
rt_err_t result = RT_EOK;
/* 初始化一个 mailbox */
result = rt_mb_init(&sht30_mb,
"sht30_mbt", /* 名称是 sht30_mbt */
&mb_pool[0], /* 邮箱用到的内存池是 mb_pool */
sizeof(mb_pool) / 4, /* 邮箱中的邮件数目,因为一封邮件占 4 字节 */
RT_IPC_FLAG_FIFO); /* 采用 FIFO 方式进行线程等待 */
if (result != RT_EOK)
{
LOG_D("init mailbox failed.\n");
return -1;
}
/* 创建线程*/
tid1 = rt_thread_create("sht30",
sht30_collect_thread_entry, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY, THREAD_TIMESLICE);
/* 如果获得线程控制块,启动这个线程 */
if (tid1 != RT_NULL)
rt_thread_startup(tid1);
return 0;
}
INIT_APP_EXPORT(sht30_collect);
编译下载测试:
4. 将温湿度传感器数据发送到UI
TouchGFX MVP通信架构
应用实现按照TouchGFX MVP架构来分层,使得结构清晰:
UI添加温湿度显示:
下载到板子后温湿度显示:
上一篇: 笑迎中秋,和家人在一起最开心
下一篇: 超恐怖的大学鬼故事