本文來(lái)源電子發(fā)燒友社區(qū),作者:juby, 帖子地址:https://bbs.elecfans.com/jishu_2012362_1_1.html
AHT20簡(jiǎn)介
應(yīng)用場(chǎng)景
傳感器性能

原理圖手冊(cè)中推薦電路
開(kāi)發(fā)板中的原理圖


模塊的地址
#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讀函數(shù)

基本指令集狀態(tài)位
狀態(tài)字各位含義說(shuō)明傳感器讀取流程


// 發(fā)送軟復(fù)位命令
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
// 發(fā)送 觸發(fā)測(cè)量 命令,開(kāi)始測(cè)量
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));
}


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

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

結(jié)果展示
AHT20簡(jiǎn)介
- 2020年上市,奧松生產(chǎn);
- 3mmx3mmx1mm 超小體積;
- 經(jīng)過(guò)標(biāo)定的數(shù)字信號(hào),標(biāo)準(zhǔn)I2C輸出格式;
- 由一個(gè)電容式濕度傳感元件和一個(gè)標(biāo)準(zhǔn)的片上溫度傳感元件組成;
- 采用SMD封裝適于回流焊;
- 響應(yīng)迅速、抗干擾能力強(qiáng);
- AHT20 的供電范圍為 2.0-5.5V, 推薦電壓為3.3V。

它廣泛應(yīng)用于暖通空調(diào) 、除濕器、測(cè)試及檢測(cè)設(shè)備、消費(fèi)品、汽車 、自動(dòng)控制、數(shù)據(jù)記錄器、氣象站、家電、濕度調(diào)節(jié)、醫(yī)療及其他相關(guān)濕度檢測(cè)控制等領(lǐng)域。
封裝

查看我們之前分享的網(wǎng)文,對(duì)比DHT21的參數(shù)如下:

由上對(duì)比,AHT20的精度要比DHT21的精度要好,而且價(jià)格又低了很多。



與開(kāi)發(fā)板連接情況如下:
[td]
管腳名稱 | 復(fù)用描述 |
GPIO_13 | GPIO_13/ADC6/PWM4_OUT/I2C0_SDA/ UART0_LOG_TXD |
GPIO_14 | GPIO_14/PWM5_OUT/I2C0_SCL/ UART0_LOG_RXD |
由上我們知道,這個(gè)AHT20使用的Hi3861芯片的I2C0。
程序源碼
AHT20的鴻蒙驅(qū)動(dòng)代碼,潤(rùn)和公司的開(kāi)源庫(kù)中已經(jīng)有了,我們就不重復(fù)造輪子了,直接使用,結(jié)合AHT20的數(shù)據(jù)手冊(cè)分析一下代碼。
潤(rùn)和公司開(kāi)源的鴻蒙OS AHT20 數(shù)字溫濕度傳感器驅(qū)動(dòng)庫(kù):https://gitee.com/hihopeorg/harmonyos-aht20
如何編譯
- 在 ~/harmony/code/code-1.0/applications/sample/wifi-iot/app目錄下執(zhí)行g(shù)it clonehttps://github.com/xusiwei/harmonyos-aht20,獲取源碼。

- 修改編譯腳本

- 在~/harmony/code/code-1.0目錄下執(zhí)行:python build.py wifiiot

I2C發(fā)送的首字節(jié)包括7位的I2C設(shè)備地址 0x38和一個(gè)SDA方向位X(讀R:'1',寫W:'0')。
手冊(cè)中描述的模塊地址定義如下:

#define AHT20_READ_ADDR ((0x38<<1)|0x1)
#define AHT20_WRITE_ADDR ((0x38<<1)|0x0)
I2C總線
AHT20 采用標(biāo)準(zhǔn)的 I2C協(xié)議進(jìn)行通訊。
對(duì)于I2C通信我們之前分享過(guò)網(wǎng)文:
4位數(shù)碼管顯示模塊驅(qū)動(dòng)
基于鴻蒙OS移植OLED驅(qū)動(dòng)程序
I2C寫函數(shù)
上圖中的AHT20_Write()函數(shù)中調(diào)用了I2cWrite()函數(shù)。

I2cWrite()函數(shù)是系統(tǒng)中I2C進(jìn)行寫操作的函數(shù),這個(gè)函數(shù)的參數(shù)含義解釋如下:
參數(shù)1:WifiIotI2cIdx id,這個(gè)參數(shù)是使用的I2C的ID,這個(gè)參數(shù)可選下面枚舉中的一個(gè)值:
typedef enum {/** I2C hardware index 0 */
WIFI_IOT_I2C_IDX_0,
/** I2C hardware index 1 */
WIFI_IOT_I2C_IDX_1,
} WifiIotI2cIdx;
因?yàn)槲覀冞@里使用的是I2C0,所以這個(gè)參數(shù)應(yīng)該為:WIFI_IOT_I2C_IDX_0 。
參數(shù)2:unsigned short deviceAddr,這個(gè)參數(shù)是I2C總線下面的設(shè)備地址,因?yàn)檫@是一個(gè)寫操作,所以這個(gè)參數(shù)我們選用上面的宏定義:AHT20_WRITE_ADDR。
參數(shù)3:const WifiIotI2cData *i2cData,這個(gè)參數(shù)是我們要發(fā)送的數(shù)據(jù),該變量的數(shù)據(jù)類型為一個(gè)結(jié)構(gòu)體類型: HalWifiIotI2cData ,該結(jié)構(gòu)體的定義如下。
/***@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讀函數(shù)

上圖中的AHT20_Read()函數(shù)中調(diào)用了I2cRead()函數(shù)。

I2cRead()函數(shù)是系統(tǒng)中I2C進(jìn)行讀操作的函數(shù)。
I2cRead()函數(shù)的參數(shù)與I2cWrite()函數(shù)的參數(shù)類似,只是參數(shù)3:const WifiIotI2cData *i2cData ,這個(gè)參數(shù)用于接收我們讀取到的數(shù)據(jù)。
常用命令
AHT20常用的命令有:
- 初始化命令 ('1011’1110') ,即0xBE;
- 測(cè)量溫濕度命令('1010’1100'),即0xAC;
- 軟復(fù)位命令('1011’1010'),即0xBA。

通過(guò)發(fā)送0x71可以獲取一個(gè)字節(jié)的狀態(tài)字,狀態(tài)字各位的含義描述如下:

- 上電后要等待40ms,讀取溫濕度值之前, 首先要看狀態(tài)字的校準(zhǔn)使能位Bit[3]是否為 1(通過(guò)發(fā)送0x71可以獲取一個(gè)字節(jié)的狀態(tài)字),如果不為1,要發(fā)送0xBE命令(初始化),此命令參數(shù)有兩個(gè)字節(jié), 第一個(gè)字節(jié)為0x08,第二個(gè)字節(jié)為0x00。
AHT20模塊的狀態(tài)判斷通過(guò)下面AHT20_Calibrate()函數(shù)來(lái)判斷,具體執(zhí)行過(guò)程如下圖所示:

注:在第一步的校準(zhǔn)狀態(tài)檢驗(yàn)只需要上電時(shí)檢查,在正常過(guò)程無(wú)需操作。
軟復(fù)位
上面代碼中有一個(gè)這樣的指令:AHT20_ResetCommand()
這個(gè)命令用于在無(wú)需關(guān)閉和再次打開(kāi)電源的情況下,重新啟動(dòng)傳感器系統(tǒng)。
在接收到這個(gè)命令之后,傳感器系統(tǒng)開(kāi)始重新初始化,并恢復(fù)默認(rèn)設(shè)置狀態(tài),軟復(fù)位所需時(shí)間不超過(guò) 20 毫秒。

灰色部分由 AHT20 控制
#define AHT20_CMD_RESET 0xBA // 軟復(fù)位命令// 發(fā)送軟復(fù)位命令
static uint32_t AHT20_ResetCommand(void)
{
uint8_t resetCmd[] = {AHT20_CMD_RESET};
return AHT20_Write(resetCmd, sizeof(resetCmd));
}
- 直接發(fā)送 0xAC命令(觸發(fā)測(cè)量),此命令參數(shù)有兩個(gè)字節(jié),第一個(gè)字節(jié)為 0x33,第二個(gè)字節(jié)為0x00。
觸發(fā)測(cè)量命令發(fā)送的數(shù)據(jù)如下:

具體使用的代碼如下:
#define AHT20_CMD_TRIGGER 0xAC // 觸發(fā)測(cè)量命令#define AHT20_CMD_TRIGGER_ARG00x33
#define AHT20_CMD_TRIGGER_ARG10x00
// 發(fā)送 觸發(fā)測(cè)量 命令,開(kāi)始測(cè)量
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待測(cè)量完成,忙狀態(tài)Bit[7]為0,然后可以讀取六個(gè)字節(jié)(發(fā)0X71即可以讀取)。

注:傳感器在采集時(shí)需要時(shí)間,主機(jī)發(fā)出測(cè)量指令(0xAC)后,延時(shí)75毫秒以上再讀取轉(zhuǎn)換后的數(shù)據(jù)并判斷返回的狀態(tài)位是否正常。若狀態(tài)比特位[Bit7]為0代表設(shè)備閑,可正常讀取,為1時(shí)傳感器為忙狀態(tài),主機(jī)需要等待數(shù)據(jù)處理完成。

- 計(jì)算溫濕度值。

將上圖中藍(lán)色背景的六個(gè)字節(jié)數(shù)據(jù)中,紅色方框框住的為濕度數(shù)據(jù),組成一個(gè)20bit長(zhǎng)度的一個(gè)整形數(shù);紫色方框框住的20bit為溫度數(shù)據(jù)。
濕度數(shù)據(jù)按下面代碼實(shí)現(xiàn)拼接:
#define AHT20_RESOLUTION (1<<20)??// 2^20uint32_t humiRaw = buffer[1];
humiRaw = (humiRaw << 8) | buffer[2];
humiRaw = (humiRaw << 4) | ((buffer[3] & 0xF0) >> 4);
通過(guò)手冊(cè)我們得知相對(duì)濕度的計(jì)算公式如下:

上面代碼求得的 humiRaw 即為上圖公式中的Srh,所以根據(jù)上圖公式,使用如下代碼即可獲得相對(duì)濕度RH。
*humi = humiRaw / (float)AHT20_RESOLUTION * 100;溫度轉(zhuǎn)換
按如下方式合并溫度數(shù)據(jù)的20bit數(shù)據(jù):
uint32_t tempRaw = buffer[3] & 0x0F;tempRaw = (tempRaw << 8) | buffer[4];
tempRaw = (tempRaw << 8) | buffer[5];
查看手冊(cè)。我們知道20bit的數(shù)據(jù)跟℃的換算關(guān)系如下:

用代碼具體實(shí)現(xiàn)如下:
*temp = tempRaw / (float)AHT20_RESOLUTION * 200 - 50;結(jié)果展示
將上面編譯之后的結(jié)果下載驗(yàn)證,輸出如下:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
wi-fi
+關(guān)注
關(guān)注
14文章
2226瀏覽量
126432 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
2052瀏覽量
32108 -
HiSpark
+關(guān)注
關(guān)注
1文章
156瀏覽量
7303
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動(dòng)之I2C驅(qū)動(dòng)之溫濕度傳感器
例程代碼路徑:ELF 1開(kāi)發(fā)板資料包\\03-例程源碼\\03-2 驅(qū)動(dòng)例程源碼\\07_I2C驅(qū)動(dòng)-aht20下面編寫
發(fā)表于 04-15 10:24
溫濕度傳感器:核心原理與跨領(lǐng)域應(yīng)用解析
一、溫濕度傳感器的技術(shù)演進(jìn)與核心價(jià)值 溫濕度傳感器是一種通過(guò)物理或化學(xué)機(jī)制實(shí)時(shí)監(jiān)測(cè)環(huán)境

溫濕度傳感器:生活中的“小氣候?qū)<摇?/a>
,我們就來(lái)一起揭開(kāi)溫濕度傳感器的神秘面紗,看看它是如何工作,并在我們的生活中發(fā)揮重要作用的。 一、溫濕度
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-開(kāi)發(fā)板適配之I2C-溫濕度傳感器
,比如ELF 1開(kāi)發(fā)板,I2C1總線上掛載有電容屏的觸摸芯片,溫度傳感器,rx8010時(shí)鐘芯片,I2C2上掛載有光線傳感器,NAU88C22音頻解碼芯片。下面我們以溫濕度傳感器為例,介
發(fā)表于 02-11 09:17
飛凌嵌入式ElfBoard ELF 1板卡-開(kāi)發(fā)板適配之I2C-溫濕度傳感器
,比如ELF 1開(kāi)發(fā)板,I2C1總線上掛載有電容屏的觸摸芯片,溫度傳感器,rx8010時(shí)鐘芯片,I2C2上掛載有光線傳感器,NAU88C22音頻解碼芯片。下面我們以溫濕度傳感器為例,介
發(fā)表于 02-10 10:31
遠(yuǎn)程溫濕度實(shí)時(shí)監(jiān)測(cè)系統(tǒng)應(yīng)用方案
通信、云計(jì)算、大數(shù)據(jù)分析等技術(shù)。傳感器作為系統(tǒng)的“眼睛”,負(fù)責(zé)實(shí)時(shí)采集環(huán)境中的溫濕度數(shù)據(jù)。通過(guò)Wi-Fi、藍(lán)牙、LoRa、NB-IoT等通訊方式,將
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-使用AHT20進(jìn)行環(huán)境監(jiān)測(cè)之開(kāi)發(fā)板測(cè)試
溫濕度打開(kāi)ELF 1板卡,在/home/root下輸入如下命令開(kāi)始測(cè)試,可以看到程序可以正常運(yùn)行沒(méi)有報(bào)錯(cuò),并直接返回測(cè)量到的數(shù)值。root@ELF1:~# ./elf1_cmd_aht20此時(shí)用手指觸摸溫濕度
發(fā)表于 11-29 09:04
CW32模塊使用案例 AHT10溫濕度傳感器
AHT10,新一代溫濕度傳感器在尺寸與智能方面建立了新的標(biāo)準(zhǔn):它嵌入了適于回流焊的雙列扁平無(wú)引腳SMD 封裝,底面 4 x 5mm ,高度1.6mm。

飛凌嵌入式ElfBoard ELF 1板卡-使用AHT20進(jìn)行環(huán)境監(jiān)測(cè)之開(kāi)發(fā)板測(cè)試
。測(cè)試設(shè)備周圍溫濕度打開(kāi)ELF 1板卡,在/home/root下輸入如下命令開(kāi)始測(cè)試,可以看到程序可以正常運(yùn)行沒(méi)有報(bào)錯(cuò),并直接返回測(cè)量到的數(shù)值。root@ELF1:~# ./elf1_cmd_aht20此時(shí)用手指觸摸溫濕度
發(fā)表于 11-28 09:30
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-使用AHT20進(jìn)行環(huán)境監(jiān)測(cè)之AHT20傳感器介紹
i2c接口的的AHT20溫濕度傳感器。i2c硬件原理見(jiàn)硬件手冊(cè),通信協(xié)議見(jiàn)3.2.2小節(jié),我們前面這些章節(jié)已經(jīng)介紹了i2c的基本通信原理,本節(jié)我們主要關(guān)注的是AHT20作為i2c從設(shè)備
發(fā)表于 11-27 09:09
飛凌嵌入式ElfBoard ELF 1板卡-使用AHT20進(jìn)行環(huán)境監(jiān)測(cè)之AHT20傳感器介紹
i2c接口的的AHT20溫濕度傳感器。i2c硬件原理見(jiàn)硬件手冊(cè),通信協(xié)議見(jiàn)3.2.2小節(jié),我們前面這些章節(jié)已經(jīng)介紹了i2c的基本通信原理,本節(jié)我們主要關(guān)注的是AHT20作為i2c從設(shè)備
發(fā)表于 11-26 09:36
溫濕度傳感器種類及原理的優(yōu)劣分析
溫濕度傳感器是一種能夠感知并測(cè)量環(huán)境中溫度和濕度變化的設(shè)備,它們?cè)诃h(huán)境監(jiān)測(cè)、氣象觀測(cè)、農(nóng)業(yè)、工業(yè)生產(chǎn)、智能家居等多個(gè)領(lǐng)域發(fā)揮著重要作用。下面將對(duì)溫濕
溫濕度傳感器是什么類型的傳感器
溫濕度傳感器是一種能夠?qū)崟r(shí)監(jiān)測(cè)和記錄環(huán)境中溫度和濕度變化的設(shè)備或裝置。這類傳感器廣泛應(yīng)用于環(huán)境監(jiān)測(cè)、氣象觀測(cè)、農(nóng)業(yè)、工業(yè)生產(chǎn)、倉(cāng)儲(chǔ)管理、智能
溫濕度傳感器怎么調(diào)試
溫濕度傳感器是一種廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、氣象、科研等領(lǐng)域的傳感器,用于測(cè)量環(huán)境的溫度和濕度。在實(shí)際應(yīng)用中,
想要準(zhǔn)確地測(cè)量環(huán)境溫濕度?溫濕度傳感器是關(guān)鍵!
? 溫濕度是生產(chǎn)生活中最重要的環(huán)境指標(biāo)之一,不僅人需要在適宜的溫濕度條件下保持良好的精神狀態(tài)和敏捷的思維,食品、藥品、各種儀器設(shè)備等都對(duì)環(huán)境溫濕度有特殊的要求。基于對(duì)環(huán)境
評(píng)論