开发步骤
- 下载驱动
- 创建文件夹
- 编写程序,初始化、主要函数
主要:由于主板本身有问题,所以测出的 不是 空气温度
步骤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功能
编译代码
详见链接:
https://www.malaoshi.top/show_1GW1wTyUOMPk.html
烧写固件到芯片
详见链接:
https://www.malaoshi.top/show_1GW1wWWflGbq.html