欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

程序员文章站 2022-03-28 11:12:41
...

目录:

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技术交流群共同学习
使用RT-Thread 系统实现DIY数字仪表(三)——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,
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

1.2 生成工程

使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
打开串口调试工具,使用list_device可以看到i2c1设备。
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

2. 添加SHT3x软件包

RT-Thread online packages → peripheral libraries and drivers

使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
选择完,保存更新软件包,重新生成工程
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
打开软件包的目录,可以看到说明文档,通过文档可以了解软件包如何使用
…\4_rtthread_TouchGFX_iot\stm32f767-fire-challenger\packages\sht3x-latest\docs

2.1 使用命令测试软件包

使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

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);

编译下载测试:
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

4. 将温湿度传感器数据发送到UI

TouchGFX MVP通信架构
应用实现按照TouchGFX MVP架构来分层,使得结构清晰:
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
UI添加温湿度显示:
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包
下载到板子后温湿度显示:
使用RT-Thread 系统实现DIY数字仪表(三)——RTThread系统添加传感器软件包

相关标签: 项目实战