本文來源電子發燒友社區,作者:juby, 帖子地址:https://bbs.elecfans.com/jishu_2012362_1_1.html
AHT20簡介
應用場景
傳感器性能

原理圖手冊中推薦電路
開發板中的原理圖


模塊的地址
#define AHT20_DEVICE_ADDR 0x38
#define AHT20_READ_ADDR ((0x38<<1)|0x1)
#define AHT20_WRITE_ADDR ((0x38<<1)|0x0)
I2C總線

/** I2C hardware index 0 */
WIFI_IOT_I2C_IDX_0,
/** I2C hardware index 1 */
WIFI_IOT_I2C_IDX_1,
} WifiIotI2cIdx;
*@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讀函數

基本指令集狀態位
狀態字各位含義說明傳感器讀取流程


// 發送軟復位命令
static uint32_t AHT20_ResetCommand(void)
{
uint8_t resetCmd[] = {AHT20_CMD_RESET};
return AHT20_Write(resetCmd, sizeof(resetCmd));
}

#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));
}


相對濕度轉換
uint32_t humiRaw = buffer[1];
humiRaw = (humiRaw << 8) | buffer[2];
humiRaw = (humiRaw << 4) | ((buffer[3] & 0xF0) >> 4);

溫度轉換
tempRaw = (tempRaw << 8) | buffer[4];
tempRaw = (tempRaw << 8) | buffer[5];

結果展示
AHT20簡介
- 2020年上市,奧松生產;
- 3mmx3mmx1mm 超小體積;
- 經過標定的數字信號,標準I2C輸出格式;
- 由一個電容式濕度傳感元件和一個標準的片上溫度傳感元件組成;
- 采用SMD封裝適于回流焊;
- 響應迅速、抗干擾能力強;
- AHT20 的供電范圍為 2.0-5.5V, 推薦電壓為3.3V。
應用場景
它廣泛應用于暖通空調 、除濕器、測試及檢測設備、消費品、汽車 、自動控制、數據記錄器、氣象站、家電、濕度調節、醫療及其他相關濕度檢測控制等領域。
封裝
傳感器性能
查看我們之前分享的網文,對比DHT21的參數如下:

由上對比,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/applications/sample/wifi-iot/app目錄下執行git clonehttps://github.com/xusiwei/harmonyos-aht20,獲取源碼。

- 修改編譯腳本

- 在~/harmony/code/code-1.0目錄下執行:python build.py wifiiot
模塊的地址
I2C發送的首字節包括7位的I2C設備地址 0x38和一個SDA方向位X(讀R:'1',寫W:'0')。
手冊中描述的模塊地址定義如下:
#define AHT20_DEVICE_ADDR 0x38#define AHT20_READ_ADDR ((0x38<<1)|0x1)
#define AHT20_WRITE_ADDR ((0x38<<1)|0x0)
I2C總線
AHT20 采用標準的 I2C協議進行通訊。
對于I2C通信我們之前分享過網文:
4位數碼管顯示模塊驅動
基于鴻蒙OS移植OLED驅動程序
I2C寫函數
上圖中的AHT20_Write()函數中調用了I2cWrite()函數。

I2cWrite()函數是系統中I2C進行寫操作的函數,這個函數的參數含義解釋如下:
參數1:WifiIotI2cIdx 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 。
參數2:unsigned short deviceAddr,這個參數是I2C總線下面的設備地址,因為這是一個寫操作,所以這個參數我們選用上面的宏定義:AHT20_WRITE_ADDR。
參數3:const 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^20uint32_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文章
2424瀏覽量
129553 -
HarmonyOS
+關注
關注
80文章
2153瀏覽量
36053 -
HiSpark
+關注
關注
1文章
156瀏覽量
7757
發布評論請先 登錄
相關推薦
熱點推薦
HDC2010:低功耗溫濕度數字傳感器的卓越之選
HDC2010:低功耗溫濕度數字傳感器的卓越之選 在電子設備的設計中,溫濕度傳感器是不可或缺的一部分,它廣泛應用于各種環境監測和控制場景。今
HDC2021高精度溫濕度傳感器:特性、應用與設計要點
HDC2021高精度溫濕度傳感器:特性、應用與設計要點 引言 在電子設備的設計中,溫濕度傳感器扮演著至關重要的角色。HDC2021作為一款高
HDC3120高精度溫濕度傳感器:設計與應用全解析
HDC3120高精度溫濕度傳感器:設計與應用全解析 在電子設備的設計中,溫濕度傳感器是一個關鍵組件,廣泛應用于各種領域,從智能家居到工業自動
燃氣表需要一顆溫濕度傳感器推薦啥?
嘿,朋友們,今天有個挺有意思的選型問題想和大家聊聊。有客戶來問:“燃氣表里需要一顆溫濕度傳感器,溫度精度要求0.2℃,濕度精度要±2%RH,有合適的型號推薦嗎?”首先,咱們
±0.1℃精準監測 + POE 供電!網口溫濕度傳感器,部署運維雙省心
原標題網口溫濕度傳感器:技術原理、核心優勢與選型應用全解析 機房應用 一、網口溫濕度傳感器的核心定義與技術原理 網口
應用于智能門鎖的溫濕度傳感器解決方案
智能傳感器已廣泛應用于我們生活的方方面面,從智能開關(86盒)、電子溫濕度計到智能窗簾盒、煙感器等,無處不在。其中,溫濕度傳感器芯片憑借其高
溫濕度傳感器HTU31D在溫濕度控器中的應用優勢
溫濕度控制器是一種用于監測和調節環境溫度與濕度的設備,廣泛應用于農業、倉儲、工業生產、家庭等多個領域。其主要功能是維持特定環境條件,以確保產品質量和舒適的居住環境。
【上海晶珩睿莓1開發板試用體驗】Home Assistant 物聯網溫濕度計
【上海晶珩睿莓1開發板試用體驗】Home Assistant 物聯網溫濕度計
本文介紹了上海晶珩睿莓 1 開發板通過 AHT10 傳感器實現環境溫濕
發表于 08-18 13:55
基于SiWG917Y的無電池Wi-Fi 6傳感器
本開發視頻將幫助您快速了解Silicon Labs(芯科科技)與合作伙伴Sigma Connectivity協力打造的一款無電池Wi-Fi 6傳感器設備。該參考設計中的開發板基于高能效
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之I2C驅動之溫濕度傳感器
例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\07_I2C驅動-aht20下面編寫
發表于 04-15 10:41
飛凌嵌入式ElfBoard ELF 1板卡-I2C設備驅動之I2C驅動之溫濕度傳感器
例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\07_I2C驅動-aht20下面編寫
發表于 04-15 10:24
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】跟著小哈一起讀AHT20溫濕度傳感器驅動源碼
評論