RT-Thread Studio采集温湿度数据

RT-Thread Studio采集温湿度数据

我们在上一个工程(RT-Thread Studio开启SPI-LCD显示)的基础上添加温湿度数据采集功能;atk-Pandora的组件上已经有了aht10设备的代码,我们只需要将其打开即可

一、使能aht10功能

打开【RT-Thread Settings】,选择【更多配置】
在这里插入图片描述
打开【硬件】页面,选中【aht10(i2c4)】选项,然后保存
在这里插入图片描述
同时,我们可以看到,在组件和服务层页面,ath10软件包已经下载了,软件模拟I2C和传感器图标也已经点亮
在这里插入图片描述
同样的,将app_key.c从过滤器中移除,保存后再进行构建
在这里插入图片描述
我们可以看到,在sensor_port.c文件中,已经将aht10初始化函数导入到初始化线程中了
在这里插入图片描述

二、编写代码,读取aht10的温湿度值

新建app_aht10.c文件,创建温湿度采集线程

/*
 * Copyright (c) 2006-2020, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2020-04-06     william       the first version
 */

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#include "aht10.h"

extern struct aht10_device *temp_humi_dev;

/* 定义一个温湿度采集线程句柄结构体指针 */
static rt_thread_t aht10_thread = RT_NULL;

/* 温湿度采集线程入口函数*/
static void aht10_thread_entry(void *parameter)
{
    float humidity, temperature;
    while (1)
    {
        /* read humidity 采集湿度 */
        humidity = aht10_read_humidity(temp_humi_dev);
        rt_kprintf("humidity   : %d.%d %%\n", (int)humidity, (int)(humidity * 10) % 10); /* former is integer and behind is decimal */

        /* read temperature 采集温度 */
        temperature = aht10_read_temperature(temp_humi_dev);
        rt_kprintf("temperature: %d.%d \n", (int)temperature, (int)(temperature * 10) % 10); /* former is integer and behind is decimal */

        rt_thread_mdelay(1000);
    }

}


static int app_aht10_init(void)
{
    rt_err_t rt_err;
    /* 创建温湿度采集线程*/
    aht10_thread = rt_thread_create("aht10 thread",     /* 线程的名称 */
                                    aht10_thread_entry, /* 线程入口函数 */
                                    RT_NULL,            /* 线程入口函数的参数   */
                                    1024,                /* 线程栈大小,单位是字节  */
                                    25,                 /* 线程的优先级,数值越小优先级越高*/
                                    10);                /* 线程的时间片大小 */
    /* 如果获得线程控制块,启动这个线程 */
    if (aht10_thread != RT_NULL)
        rt_err = rt_thread_startup(aht10_thread);
    else
        rt_kprintf("aht10 thread create failure !!! \n");

    /* 判断线程是否创建成功 */
    if( rt_err != RT_EOK)
        rt_kprintf("aht10 thread startup err. \n");

    return RT_EOK;
}

INIT_APP_EXPORT(app_aht10_init);

在读取温湿度数据时,需要aht10_device_t设备结构体作为参数传入,而该结构体在"sensor_asair_aht10.c"中作为静态变量被定义,所以需要将其修改为非静态变量:
在这里插入图片描述
然后构建过程,下载,在串口终端可以看到,已经有数据输出:
在这里插入图片描述

三、修改代码,将其显示在LCD上

将lcd_sample.c的如下代码注释掉
在这里插入图片描述
并在温湿度采集线程入口函数中加入lcd显示函数

lcd_show_string(10, 75, 24, "Temp: %d.%d C", (int)temperature, (int)(temperature * 10) % 10);
lcd_show_string(10, 105, 24, "Humi: %d.%d %%", (int)humidity, (int)(humidity * 10) % 10);

在这里插入图片描述
构建程序,并下载到开发板,运行结果如下:
在这里插入图片描述

发布了62 篇原创文章 · 获赞 13 · 访问量 5572

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/105349975