一、总体结构
使用ESP-IDF编译软件,ESP32S3,AHT20探测温湿度,结果输出在屏幕monitor上。
主机ESP32S3使用硬件I2C器件,任意两只引脚做SCL和SDA,3.3V供电给AHT20即可。PDD买的这个模块自带上拉电阻,不用操心硬件布局,直接连单片机引脚即可。
之前我做过DHT11的,但DHT11精度和分辨率都跟AHT20没得比。DHT11的半双工传输需要软件模拟,占用cpu。
二、AHT20芯片手册解读
I2C协议我就不讲了,讲讲这个芯片如何操作。这个芯片手册很简单,只有3种命令,分别是初始化、触发测量和软重启命令,读数不是命令,读数里面包含一个状态字节用来记录芯片的状态供主机查看。
红框表示写命令,是主机向从机的写操作,控制AHT20执行一些操作,发送的从机地址后尾要跟一个0表示写命令操作。比如让从机执行初始化命令,主机发送的信息就是0x70(从机地址,写操作)+0xBE+0x08+0x00共4个字节,然后SDA线从低拉高,通讯结束。主机全程写操作。(0x38<<1)&0x00=0x70。
蓝框表示读温湿度数据。当我们要想读温湿度数据时,要分两步操作,先写“触发测量”的指令,再读温湿度数据。第一步:主机启动总线、主机写0x70(从机地址+写操作位)、向从机写0xAC、0x33、0x00三个字节的命令,触发测量,拉高SDA,通讯结束,全程写操作。过80ms后,第二步:主机启动总线、主机写0x71(从机地址