学习物联网,来HaaSEDU就对了

温湿度传感器 - AHT21B

一、产品简介

AHT21B是基于AH21开发的集成式温湿度传感器模块,产品内部配有一个全新设计的ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,PCB板采用沉金工艺,延长产品使用寿命;输出经过标定的数字信号,标准IIC格式,具有免标定、响应速度快、抗干扰能力强、精度高、品质高、稳定性高等特点,性能达到国际水平,是国产替代进口的理想选择。

二、技术参数

  • 供电电压:2~5.5V
  • IIC信号接口,最高频率可到400KHz
  • 测量范围:温度:-40~120度,湿度:0~100%
  • 测量精度:温度:0.3度,湿度:2%RH
  • 分辨率:温度:0.01度,湿度:0.024%RH
  • 封装:12mm * 12mm * 1mm

三、软件接口

软件接口基于HaaS Python标准固件
ESP32固件

AHT21B(i2cObj) - 创建AHT21B驱动对象

  • 函数原型:

aht21bObj = AHT21B(i2cObj)

  • 参数说明:
参数 类型 必选参数? 说明
i2cObj I2C 调用此函数前需确保i2cObj对象已经处于open状态
  • 返回值:
    AHT21B对象成功,返回AHT21B对象;AHT21B对象创建失败,抛出Exception

  • 示例代码:

from driver import I2C               # 驱动库
import aht21b                        # AHT21B温湿度传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C()
i2cObj.open("aht21b")                # 按照board.json中名为"aht21b"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象
print("aht21b inited!")humitureDev = aht21b.AHT21B(i2cObj)  # 初始化AHT21B传感器
  • 输出:
aht21b inited!

getTemperature - 测量温度

  • 函数功能:
    量测周围温度并返回测量结果

  • 函数原型:

AHT21B.getTemperature()

  • 参数说明:

  • 返回值:
    成功返回温度测量结果(数据类型:浮点型;单位:摄氏度);失败抛出Exception

  • 示例:

from driver import I2C               # 驱动库
import aht21b                        # AHT21B温湿度传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C()
i2cObj.open("aht21b")                # 按照board.json中名为"aht21b"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象humitureDev = aht21b.AHT21B(i2cObj)  # 初始化AHT21B传感器temp = humitureDev.getTemperature()
print("temperature is ", temp, "°C")
  • 输出:
temperature is 25.3°C

getHumidity - 测量相对湿度

  • 函数功能:
    量测周围相对湿度并返回测量结果

  • 函数原型:

AHT21B.getHumidity()

  • 参数说明:

  • 返回值:
    成功返回相对湿度测量结果(数据类型:整型;单位:%RH);失败抛出Exception

  • 示例:

from driver import I2C               # 驱动库
import aht21b                        # AHT21B温湿度传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C()
i2cObj.open("aht21b")                # 按照board.json中名为"aht21b"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象humitureDev = aht21b.AHT21B(i2cObj)  # 初始化AHT21B传感器humi = humitureDev.getHumidity()
print("humidity is ", humi, "%H")
  • 输出:
humidity is 60%H

getTempHumidity - 量测温度相对湿度

  • 函数功能:
    同时量测周围温度和相对湿度并返回测量结果

  • 函数原型:

AHT21B.getTempHumidity()

  • 参数说明:

  • 返回值:
    成功返回温度和相对湿度测量结果(数据类型:数组,[温度值, 相对湿度值];温度单位:摄氏度;相对湿度单位:%RH);失败抛出Exception

  • 示例:

from driver import I2C               # 驱动库
import aht21b                        # AHT21B温湿度传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C()
i2cObj.open("aht21b")                # 按照board.json中名为"aht21b"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象humitureDev = aht21b.AHT21B(i2cObj)  # 初始化AHT21B传感器data = humitureDev.getTempHumidity()
print("temperature is ", data[0], "°C")
print("humidity is ", data[1], "%H")
  • 输出:
temperature is 25.3°C
humidity is 60%H

四、接口案例

此使用实例在board.json中定义了名为aht21b的I2C类型的对象。在Python脚本中周期性的获取温湿度测量结果并打印在日志中。

  • 代码:
# board.json配置:
{"name": "board-name","version": "1.0.0","io": {"aht21b": {"type": "I2C","port": 1,"addrWidth": 7,"freq": 400000,"mode": "master","devAddr": 56}},"debugLevel": "ERROR","repl": "disable"
}
# Python代码
import utime                         # 延时API所在组件
from driver import I2C               # 驱动库
import aht21b                        # AHT21B温湿度传感器驱动库# 初始化I2C类型的设备
i2cObj = I2C()
i2cObj.open("aht21b")                # 按照board.json中名为"aht21b"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象humitureDev = aht21b.AHT21B(i2cObj)  # 初始化AHT21B传感器# 通过温湿度传感器读取温湿度信息
def get_temp_humi():temperature = humitureDev.getTemperature()         # 获取温度测量结果humidity = humitureDev.getHumidity()               # 获取相对湿度测量结果'''# 如果需要同时获取温湿度信息,可以呼叫getTempHumidity,实例代码如下:humniture = humitureDev.getTempHumidity()          # 获取温湿度传感器测量到的温湿度值temperature = humniture[0]                         # get_temp_humidity返回的字典中的第一个值为温度值humidity = humniture[1]                            # get_temp_humidity返回的字典中的第二个值为相对湿度值'''print("The temperature is: %.1f" % temperature)print("The humidity is: %d" % humidity)return temperature, humidity                        # 返回读取到的温度值和相对湿度值if __name__ == '__main__':while True:data = get_temp_humi()                          # 读取温度信息和相对湿度信息utime.sleep(1)                                  # 每隔1秒钟进行一次温湿度信息测量和打印i2cObj.close()                                      # 关闭I2C设备对象
  • 输出:
...
The temperature is 25.3°C
The humidity is 60%H
...
The temperature is 25.3°C
The humidity is 60%H
...

五、通信协议

主控芯片和AHT21B传感器之间通信所用命令字如下表所示:

序号 命令字 功能说明 缩写
1 0xE1 校准指令 AHT21B_CMD_CALIBRATE
2 0xAC 触发读取测量结果操作 AHT21B_CMD_TRIGGER
3 0xBA 软件复位 AHT21B_CMD_SOFTRESET

实际控制此传感器的流程可参考如下伪代码。

  • 初始化传感器
    发起I2C读取创阿奇状态(1个字节)的操作IF (not 传感器处于READY状态)复位传感器
  • 读取温湿度测量结果
    发送读取温湿度测量结果指令([AHT21B_CMD_TRIGGER, 0x33, 0x00])while (传感器处于BUSY状态):等待5ms发起I2C读取操作(7个字节)

读取到的7个字节格式如下表所示:

字节序号 1 2 3 4 5 6 7
意义 传感器状态 湿度(bit12-bit19) 湿度(bit4-bit11) 湿度(bit0-bit3)-温度(bit16-bit19) 温度(bit8-bit15) 温度(bit0-bit7) 温度CRC-8

转换过程可以使用如下公式:
温度值 = (((data[3] << 16) | (data[4] << 8) | data[5]) & 0xfffff) * 200 /1024 / 1024 - 50
相对湿度值 = (((data[1] << 16) | (data[2] << 8) | data[3]) >> 4) * 100 /1024 / 1024

  • 停止测量
    发送停止周期性测量指令(CMD_BREAK)

六、工作原理

1、传感器读取流程

(1)上电后要等待40ms,读取温湿度值之前,首先要看状态字的校准使能位bit[3]是否为1(通过发送0x71可以获取一个字节的状态字),如果不为1,要发送0xbe命令(初始化),此命令参数有两个字节,第一个字节为0x08,第二个字节为0x00,然后等待10ms。

(2)直接发送0xac命令(触发测量),此命令参数有两个字节,第一个字节为0x33,第二个字节为0x00。

(3)等待80ms待测量完成,如果读取状态字bit[7]为0,表示测量完成,然后可以连续读取六个字节;否则继续等待。

(4)当接收完六个字节后,紧接着下一个字节是CRC校验数据,用户可以根据需要读出,如果接收断需要CRC校验,则在接收完第六个字节后发ACK应答,否则发NACK结束。

(5)计算温湿度值

参考文献

[1] AHT21B

温湿度传感器 AHT21B 简明教程相关推荐

  1. arduino 土壤温湿度传感器_【教程】教你玩转Stduino之土壤湿度传感器模块

    大家好 今天我们就来看看土壤湿度传感器是如何测试土壤的吧! 关键词: 51:stm32:arduino:stduino单片机:stduino UNO&Nano:土壤湿度传感器模块 说明: 土壤 ...

  2. arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...

    ATTINY85做主控,OLED显示的温湿度计. 简介: 通过Arduino开发环境,对ATTINY85进行编程,利用DH11温湿度传感器,在SSD1306(128*64)OLED显示屏上显示温度和湿 ...

  3. zigbee CC2530 系列教程 15 温湿度传感器DHT11实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.12温湿度传感器DHT11实验 4.12.1 实验目的 学习使用温湿度传感器DHT11,并在串口显示温湿度数据. 4.12. ...

  4. Arduino初初教程10——温湿度传感器

    2019独角兽企业重金招聘Python工程师标准>>> 这里使用的温湿度传感器是 SHT1X温湿度传感器 如图   SHT1x温湿度传感器是瑞士Sensirion公司推出的单片数字温 ...

  5. ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)

    测试第四课,了解ESP32-C3的 I2C 总线使用,与SHT21 温湿度传感器通讯 这一课把基础介绍放在前面,先看基本流程,再去修改代码 目录 前言 1. ESP32-C3 I2C基础介绍 1.1 ...

  6. 【STM32 Net MF开发板学习-19】DHT11温湿度传感器通信(上)

    前段时间开发远程医疗系统(Dr.Cloud)就曾用到过温湿度传感器,不过当时考虑到集成难度,选了一个RS485接口的传感器,该传感器实现了Modbus Rtu Slave的功能,只要客户程序实现Mod ...

  7. dht11温湿度传感器_Arduino不调用库实现DHT11数据读取

    DHT11概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性.传感器包括一个电阻式 ...

  8. ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

  9. 使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)...

    1. 项目进度 桌面Mini时钟项目用来演示如何使用RT-Thread Stduio开发项目,整个项目的架构如下: 在上一篇博文中简单的介绍了RT-ThreadStudio一站式工具,基于STM32L ...

最新文章

  1. 删除单链上数据域值最小的节点_深入浅出数据结构
  2. Android移动开发之【Android实战项目】DAY12-App实现修改密码
  3. wireshark抓取https并解密方法一
  4. ArcGIS.Server.9.2.DotNet自带例子分析(三、一)
  5. 35岁老程序员因身体原因没加班,老板:不想干就滚蛋
  6. 查看mysql字段的编码_MySQL查看和修改字符编码的实现方法
  7. hdu 6086 Rikka with String(AC自动机+状压dp)
  8. android 清理工具,Android 版 Avira Optimizer 是 Android 手機清理工具
  9. 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例【转】
  10. 使用nosetests对webpy程序做单元测试
  11. 小白学 Python 爬虫(18):Requests 进阶操作
  12. FCM算法的matlab实现(Fuzzy C-means 算法)
  13. Pr入门系列之十六:导出
  14. 自建网盘利用OneDrive,oneindex网盘
  15. 外媒曝光:小米新奇想专利让超广角拍摄不失真
  16. TX2 刷机 安装 jetpack 卡在determining IP adress问题
  17. 提高访问国外网站速度
  18. MySQL查询语句in子查询的优化
  19. 科创学科相关大赛统计2021
  20. 华为ENSP路由相关配置

热门文章

  1. 搜狐邮箱怎样开启imap服务器,搜狐企业邮箱iPhone如何设置?
  2. 程序员:为什么几个月后我自己写的代码也看不懂了?
  3. 实践:动手搭建聊天机器人
  4. PSV中国天气 V1.2.3
  5. 神经网络尺寸和表达能力
  6. 500 – 内部服务器错误_无服务器:S3 – S3BucketPermissions –操作不适用于语句中的任何资源...
  7. element中checkbox全选反选功能
  8. Flutter组件--GridView使用详情
  9. gpt4和gpt3.5对比有什么提升?
  10. 我是如何自学新技术的,自学方式有哪些