0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】跟着小哈一起读AHT20温湿度传感器驱动源码

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-04 16:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文来源电子发烧友社区,作者:juby, 帖子地址:https://bbs.elecfans.com/jishu_2012362_1_1.html

AHT20简介
  • 2020年上市,奥松生产;
  • 3mmx3mmx1mm 超小体积;
  • 经过标定的数字信号,标准I2C输出格式;
  • 由一个电容式湿度传感元件和一个标准的片上温度传感元件组成;
  • 采用SMD封装适于回流焊;
  • 响应迅速、抗干扰能力强;
  • AHT20 的供电范围为 2.0-5.5V, 推荐电压为3.3V。
应用场景
它广泛应用于暖通空调 、除湿器、测试及检测设备、消费品、汽车 、自动控制、数据记录器、气象站、家电、湿度调节、医疗及其他相关湿度检测控制等领域。
封装传感器性能
查看我们之前分享的网文,对比DHT21的参数如下:
DHT11及DHT21温湿度传感器时序图解析(STM32
由上对比,AHT20的精度要比DHT21的精度要好,而且价格又低了很多。
原理图手册中推荐电路开发板中的原理图
与开发板连接情况如下:
[td]
管脚名称 复用描述
GPIO_13 GPIO_13/ADC6/PWM4_OUT/I2C0_SDA/ UART0_LOG_TXD
GPIO_14 GPIO_14/PWM5_OUT/I2C0_SCL/ UART0_LOG_RXD
由上我们知道,这个AHT20使用的Hi3861芯片的I2C0。
程序源码
AHT20的鸿蒙驱动代码,润和公司的开源库中已经有了,我们就不重复造轮子了,直接使用,结合AHT20的数据手册分析一下代码。
润和公司开源的鸿蒙OS AHT20 数字温湿度传感器驱动库:https://gitee.com/hihopeorg/harmonyos-aht20
如何编译
  • 修改编译脚本
  • 在~/harmony/code/code-1.0目录下执行:python build.py wifiiot
模块的地址
I2C发送的首字节包括7位的I2C设备地址 0x38和一个SDA方向位X(读R:'1',写W:'0')。
手册中描述的模块地址定义如下:
由上分析,我们得到读数据操作的首字节AHT20_READ_ADDR和写数据操作的首字节AHT20_WRITE_ADDR分别定义如下:
#define AHT20_DEVICE_ADDR 0x38
#define AHT20_READ_ADDR ((0x38<<1)|0x1)
#define AHT20_WRITE_ADDR ((0x38<<1)|0x0)
I2C总线
AHT20 采用标准的 I2C协议进行通讯。
对于I2C通信我们之前分享过网文:
STM32 I2C通信操作24C02写数据、读数据
4位数码管显示模块驱动
基于鸿蒙OS移植OLED驱动程序
I2C写函数
上图中的AHT20_Write()函数中调用了I2cWrite()函数。
I2cWrite()函数是系统中I2C进行写操作的函数,这个函数的参数含义解释如下:
参数1WifiIotI2cIdx id,这个参数是使用的I2C的ID,这个参数可选下面枚举中的一个值:
typedef enum {
/** I2C hardware index 0 */
WIFI_IOT_I2C_IDX_0,
/** I2C hardware index 1 */
WIFI_IOT_I2C_IDX_1,
} WifiIotI2cIdx;
因为我们这里使用的是I2C0,所以这个参数应该为:WIFI_IOT_I2C_IDX_0 。
参数2unsigned short deviceAddr,这个参数是I2C总线下面的设备地址,因为这是一个写操作,所以这个参数我们选用上面的宏定义:AHT20_WRITE_ADDR
参数3const WifiIotI2cData *i2cData,这个参数是我们要发送的数据,该变量的数据类型为一个结构体类型: HalWifiIotI2cData ,该结构体的定义如下。
/**
*@BriefDefines I2C data transmission attributes.
*/
typedef struct {
/** Pointer to the buffer storing data to send */
unsigned char *sendBuf;
/** Length of data to send */
unsigned intsendLen;
/** Pointer to the buffer for storing data to receive */
unsigned char *receiveBuf;
/** Length of data received */
unsigned intreceiveLen;
} HalWifiIotI2cData;
I2C读函数
上图中的AHT20_Read()函数中调用了I2cRead()函数。
I2cRead()函数是系统中I2C进行读操作的函数。
I2cRead()函数的参数与I2cWrite()函数的参数类似,只是参数3:const WifiIotI2cData *i2cData ,这个参数用于接收我们读取到的数据。
常用命令
AHT20常用的命令有:
  • 初始化命令 ('1011’1110') ,即0xBE;
  • 测量温湿度命令('1010’1100'),即0xAC
  • 软复位命令('1011’1010'),即0xBA。
基本指令集状态位
通过发送0x71可以获取一个字节的状态字,状态字各位的含义描述如下:
状态字各位含义说明传感器读取流程
  • 上电后要等待40ms,读取温湿度值之前, 首先要看状态字的校准使能位Bit[3]是否为 1(通过发送0x71可以获取一个字节的状态字),如果不为1,要发送0xBE命令(初始化),此命令参数有两个字节, 第一个字节为0x08,第二个字节为0x00。
AHT20模块的状态判断通过下面AHT20_Calibrate()函数来判断,具体执行过程如下图所示:
注:在第一步的校准状态检验只需要上电时检查,在正常过程无需操作。
软复位
上面代码中有一个这样的指令:AHT20_ResetCommand()
这个命令用于在无需关闭和再次打开电源的情况下,重新启动传感器系统。
在接收到这个命令之后,传感器系统开始重新初始化,并恢复默认设置状态,软复位所需时间不超过 20 毫秒。
灰色部分由 AHT20 控制
#define AHT20_CMD_RESET 0xBA // 软复位命令
// 发送软复位命令
static uint32_t AHT20_ResetCommand(void)
{
uint8_t resetCmd[] = {AHT20_CMD_RESET};
return AHT20_Write(resetCmd, sizeof(resetCmd));
}
  • 直接发送 0xAC命令(触发测量),此命令参数有两个字节,第一个字节为 0x33,第二个字节为0x00。
触发测量命令发送的数据如下:
具体使用的代码如下:
#define AHT20_CMD_TRIGGER 0xAC // 触发测量命令
#define AHT20_CMD_TRIGGER_ARG00x33
#define AHT20_CMD_TRIGGER_ARG10x00

// 发送 触发测量 命令,开始测量
uint32_t AHT20_StartMeasure(void)
{
uint8_t triggerCmd[] = {AHT20_CMD_TRIGGER, AHT20_CMD_TRIGGER_ARG0, AHT20_CMD_TRIGGER_ARG1};
return AHT20_Write(triggerCmd, sizeof(triggerCmd));
}
  • 等待75ms待测量完成,忙状态Bit[7]为0,然后可以读取六个字节(发0X71即可以读取)。
注:传感器在采集时需要时间,主机发出测量指令(0xAC)后,延时75毫秒以上再读取转换后的数据并判断返回的状态位是否正常。若状态比特位[Bit7]为0代表设备闲,可正常读取,为1时传感器为忙状态,主机需要等待数据处理完成。
  • 计算温湿度值。
相对湿度转换
将上图中蓝色背景的六个字节数据中,红色方框框住的为湿度数据,组成一个20bit长度的一个整形数;紫色方框框住的20bit为温度数据。
湿度数据按下面代码实现拼接:
#define AHT20_RESOLUTION (1<<20)  // 2^20

uint32_t humiRaw = buffer[1];
humiRaw = (humiRaw << 8) | buffer[2];
humiRaw = (humiRaw << 4) | ((buffer[3] & 0xF0) >> 4);
通过手册我们得知相对湿度的计算公式如下:
上面代码求得的 humiRaw 即为上图公式中的Srh,所以根据上图公式,使用如下代码即可获得相对湿度RH。
*humi = humiRaw / (float)AHT20_RESOLUTION * 100;
温度转换
按如下方式合并温度数据的20bit数据:
uint32_t tempRaw = buffer[3] & 0x0F;
tempRaw = (tempRaw << 8) | buffer[4];
tempRaw = (tempRaw << 8) | buffer[5];
查看手册。我们知道20bit的数据跟℃的换算关系如下:
用代码具体实现如下:
*temp = tempRaw / (float)AHT20_RESOLUTION * 200 - 50;
结果展示
将上面编译之后的结果下载验证,输出如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • wi-fi
    +关注

    关注

    15

    文章

    2491

    浏览量

    130226
  • HarmonyOS
    +关注

    关注

    80

    文章

    2157

    浏览量

    36460
  • HiSpark
    +关注

    关注

    1

    文章

    156

    浏览量

    7818
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【RA-Eco-RA4M2开发板评测】AHT20与LabVIEW数据采集

    ; 点击 Generate Project Content 按钮,生成工程代码。 工程代码 添加 AHT20 温湿度传感器驱动代码。 aht
    发表于 04-15 16:22

    工业级以太网温湿度传感器选型攻略,精准适配多场景需求

    以太网温湿度传感器深度分析及应用解析 POE供电+以太网RJ45信号输出温湿度传感器变送器 在物联网(IoT)与工业4.0加速融合的今天,
    的头像 发表于 04-14 08:49 751次阅读
    工业级以太网<b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>选型攻略,精准适配多场景需求

    HDC2010:低功耗温湿度数字传感器的卓越之选

    HDC2010:低功耗温湿度数字传感器的卓越之选 在电子设备的设计中,温湿度传感器是不可或缺的部分,它广泛应用于各种环境监测和控制场景。今
    的头像 发表于 02-12 11:25 561次阅读

    HDC2080数字传感器:高精度、低功耗的温湿度监测解决方案

    HDC2080数字传感器:高精度、低功耗的温湿度监测解决方案 在电子设计领域,温湿度监测是许多应用场景中的关键需求。无论是智能家居、工业控制还是气象监测,都需要可靠、精确的温湿度
    的头像 发表于 02-12 09:40 559次阅读

    HDC2021高精度温湿度传感器:特性、应用与设计要点

    HDC2021高精度温湿度传感器:特性、应用与设计要点 引言 在电子设备的设计中,温湿度传感器扮演着至关重要的角色。HDC2021作为款高
    的头像 发表于 02-11 16:00 381次阅读

    HDC3120高精度温湿度传感器:设计与应用全解析

    HDC3120高精度温湿度传感器:设计与应用全解析 在电子设备的设计中,温湿度传感器个关键组件,广泛应用于各种领域,从智能家居到工业自动
    的头像 发表于 02-11 09:25 792次阅读

    燃气表需要温湿度传感器推荐啥?

    嘿,朋友们,今天有个挺有意思的选型问题想和大家聊聊。有客户来问:“燃气表里需要温湿度传感器,温度精度要求0.2℃,湿度精度要±2%RH,有合适的型号推荐吗?”首先,咱们
    的头像 发表于 01-28 12:05 429次阅读
    燃气表需要<b class='flag-5'>一</b>颗<b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>推荐啥?

    ±0.1℃精准监测 + POE 供电!网口温湿度传感器,部署运维双省心

    原标题网口温湿度传感器:技术原理、核心优势与选型应用全解析 机房应用 、网口温湿度传感器的核心定义与技术原理 网口
    的头像 发表于 01-04 14:25 506次阅读

    数字单总线输出,可长距离串联多个节点的温湿度传感芯片-MHT04

    温湿度传感芯片是种可以检测环境温度和相对湿度传感器,通常由
    的头像 发表于 12-18 09:54 464次阅读
    数字单总线输出,可长距离串联多个节点的<b class='flag-5'>温湿度</b><b class='flag-5'>传感</b>芯片-MHT04

    应用于智能门锁的温湿度传感器解决方案

    智能传感器已广泛应用于我们生活的方方面面,从智能开关(86盒)、电子温湿度计到智能窗帘盒、烟感等,无处不在。其中,温湿度传感器芯片凭借其高
    的头像 发表于 11-28 15:03 527次阅读

    温湿度传感器HTU31D在温湿度中的应用优势

    温湿度控制种用于监测和调节环境温度与湿度的设备,广泛应用于农业、仓储、工业生产、家庭等多个领域。其主要功能是维持特定环境条件,以确保产品质量和舒适的居住环境。
    的头像 发表于 11-06 14:38 528次阅读
    <b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>HTU31D在<b class='flag-5'>温湿度</b>控<b class='flag-5'>器</b>中的应用优势

    【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度

    【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度计 本文介绍了上海晶珩睿莓 1 开发板通过 AHT10 传感器实现环境温湿
    发表于 08-18 13:55

    什么是温湿度传感器的水合?

    温湿度传感器需要进行水合处理(Hydration),主要是为了优化传感器的性能、稳定性和长期可靠性。以下是具体原因和作用的详细解释:1.稳定湿度敏感材料电容式
    的头像 发表于 07-11 12:10 1391次阅读
    什么是<b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>的水合?

    款适用于粉尘、易结露等恶劣环境温湿度监控中的温湿度传感芯片

    温湿度监控系统在恶劣环境中通过传感器实时监测温湿度参数,当达到预设阈值时自动触发预警或调节机制,确保环境状态维持在安全范围内。
    的头像 发表于 07-09 09:41 991次阅读
    <b class='flag-5'>一</b>款适用于粉尘、易结露等恶劣环境<b class='flag-5'>温湿度</b>监控中的<b class='flag-5'>温湿度</b><b class='flag-5'>传感</b>芯片

    常见的温湿度传感器类型?

    温湿度传感器种用于测量环境温度和湿度的设备,广泛应用于工业、农业、气象等领域。以下是几种常见的温湿度
    发表于 06-24 09:24