OpenHarmony鸿蒙硬件Hi3861-AHT20温湿度传感器获取温度

开发步骤

  1. 下载驱动
  2. 创建文件夹
  3. 编写程序,初始化、主要函数

主要:由于主板本身有问题,所以测出的 不是 空气温度

步骤1:下载驱动

下载驱动:
https://gitee.com/65242847/OpenHarmony_Hi3861/tree/master/aht20%E9%A9%B1%E5%8A%A8

驱动文件如下:

aht20.c
aht20.h

解释

在 aht20.h 文件中定义下面3个方法:

// 发送初始化校准命令
uint32_t AHT20_Calibrate(void);

// 发送 触发测量 命令,开始测量
uint32_t AHT20_StartMeasure(void);

// 接收测量结果,拼接转换为标准值
uint32_t AHT20_GetMeasureResult(float *temp, float *humi);

驱动分析详见链接:
https://www.malaoshi.top/show_1GW24q8753qY.html

步骤2:创建文件夹

在 applications\sample\wifi-iot\app\code_v2.0 创建下面文件夹:

std_07_aht_wenshidu

将下面驱动文件:

aht20.c
aht20.h

放到 std_07_aht_wenshidu 文件夹中

步骤3:程序

创建 demo.c,放核心程序:

初始化

#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_i2c.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_errno.h"
#include "aht20.h"

#define AHT20_BAUDRATE 400 * 1000
#define AHT20_I2C_IDX WIFI_IOT_I2C_IDX_0

void init(void)
{
    GpioInit();
    // 设置 13 引脚为 SDA 总线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_13, WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA);
    // 设置 14 引脚为 SCL 时钟线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL);
    // 设置 I2C 波特率,能够与外部 I2C 设备(如 OLED 屏幕、传感器等)正常通信。
    I2cInit(AHT20_I2C_IDX, AHT20_BAUDRATE); //初始化I2c 的波特率
}

业务函数

//业务函数
static void start(void)
{

    uint32_t retval = 0;
    float humidity = 0.0f;    //用于保存湿度的变量
    float temperature = 0.0f; //用于保存温度的变量

    init(); //初始化

    // 发送初始化校准命令
    while (WIFI_IOT_SUCCESS != AHT20_Calibrate())
    {
        printf("AHT20 sensor init failed!\r\n");
        usleep(1000);
    }
    while (1)
    {
        // 发送 触发测量 命令,开始测量
        retval = AHT20_StartMeasure();
        if (retval != WIFI_IOT_SUCCESS)
        {
            printf("trigger measure failed!\r\n");
        }
        else
        {
            // 接收测量结果,拼接转换为标准值
            retval = AHT20_GetMeasureResult(&temperature, &humidity);
            printf("temp: %.2f,  humi: %.2f\n", temperature, humidity);
        }
        sleep(1);
    }
}


APP_FEATURE_INIT(start); //注册为自启动运行函数

完整代码

#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_i2c.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_errno.h"
#include "aht20.h"

#define AHT20_BAUDRATE 400 * 1000
#define AHT20_I2C_IDX WIFI_IOT_I2C_IDX_0

void init(void)
{
    GpioInit();
    // 设置 13 引脚为 SDA 总线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_13, WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA);
    // 设置 14 引脚为 SCL 时钟线
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL);
    // 设置 I2C 波特率,能够与外部 I2C 设备(如 OLED 屏幕、传感器等)正常通信。
    I2cInit(AHT20_I2C_IDX, AHT20_BAUDRATE); //初始化I2c 的波特率
}

//业务函数
static void start(void)
{

    uint32_t retval = 0;
    float humidity = 0.0f;    //用于保存湿度的变量
    float temperature = 0.0f; //用于保存温度的变量

    init(); //初始化

    // 发送初始化校准命令
    while (WIFI_IOT_SUCCESS != AHT20_Calibrate())
    {
        printf("AHT20 sensor init failed!\r\n");
        usleep(1000);
    }
    while (1)
    {
        // 发送 触发测量 命令,开始测量
        retval = AHT20_StartMeasure();
        if (retval != WIFI_IOT_SUCCESS)
        {
            printf("trigger measure failed!\r\n");
        }
        else
        {
            // 接收测量结果,拼接转换为标准值
            retval = AHT20_GetMeasureResult(&temperature, &humidity);
            printf("temp: %.2f,  humi: %.2f\n", temperature, humidity);
        }
        sleep(1);
    }
}


APP_FEATURE_INIT(start); //注册为自启动运行函数

编辑BUILD.gn文件

编辑1

在代码同级目录创建下面文件:

BUILD.gn

内容:


static_library("demo") {
    sources = [
        "demo.c",
        # "aht20_demo.c",
        "aht20.c",
    ]

    include_dirs = [
        "//utils/native/lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
        "//base/iot_hardware/interfaces/kits/wifiiot_lite",
    ]
}

编辑2

编辑下面文件:

\\applications\sample\wifi-iot\app\BUILD.gn

内容:

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "code_v2.0/std_07_aht_wenshidu:demo",
    ]
}

启用I2C功能

OpenHarmony鸿蒙硬件-启用I2C功能(关键)

编译代码

详见链接:
https://www.malaoshi.top/show_1GW1wTyUOMPk.html

烧写固件到芯片

详见链接:
https://www.malaoshi.top/show_1GW1wWWflGbq.html


原文出处:/show_1GW253m6YGWg.html