瑞薩RA0單片機(jī)連載——面向?qū)ο缶幊讨甋HT31溫度計(jì)
SHT3X是一款優(yōu)秀的溫濕度計(jì)。他采用I2C 接口,地址為0x44。它的驅(qū)動(dòng)與原理的講解非常的豐富,網(wǎng)上也有非多的現(xiàn)成的代碼,我這里不做過(guò)多的闡述。本篇的主要特點(diǎn)是在前面OLED驅(qū)動(dòng)的前提下,對(duì)sht31進(jìn)行面向?qū)ο蟮木幊谭绞竭M(jìn)行講解。
1 前提
在OLED驅(qū)動(dòng)之中,我已經(jīng)初始化了I2C的總線,所以有總線驅(qū)動(dòng)在本篇沒(méi)有做,如果是使用spi 或者其他的方式進(jìn)行數(shù)據(jù)展示,那么需要加上對(duì)I2C 總線進(jìn)行初始化。
2 實(shí)現(xiàn)步驟
2.1 創(chuàng)建sensor.h,在其中創(chuàng)建結(jié)構(gòu)體
2.2 創(chuàng)建drv_sensor.c
首先實(shí)例化
接下來(lái)編寫(xiě)發(fā)送、接收超時(shí)函數(shù)
為了驗(yàn)證讀取的溫度與數(shù)據(jù)是否正確,編寫(xiě)CRC函數(shù)如下:
在讀取溫度的函數(shù)中首先向sht31發(fā)送開(kāi)始轉(zhuǎn)換命令0x2400, 我將他封裝在一個(gè)數(shù)據(jù)中,使用R_SAU_I2C_Write進(jìn)行一次性發(fā)送。當(dāng)然由于總線上有SSD1306 操作時(shí)他的g_sau_i2c_master_ctrl 的從機(jī)地址是SSD1306的0x3c所以,需要先配置sht31的地址,他的發(fā)送數(shù)據(jù)轉(zhuǎn)換命令如下:
由于轉(zhuǎn)換需要一段時(shí)間,需要延時(shí)。
延時(shí)之后,我一次讀取6位數(shù)據(jù),如果獲取數(shù)據(jù)成功,則進(jìn)行CRC并進(jìn)行float轉(zhuǎn)換,轉(zhuǎn)換成功后放到結(jié)構(gòu)體中,并更新?tīng)顟B(tài):整個(gè)獲取數(shù)據(jù)的代碼如下:
3 數(shù)據(jù)展示
在主函數(shù)中編寫(xiě)測(cè)試代碼如下,如果獲取到溫度數(shù)據(jù)則顯示溫濕度,如果獲取出錯(cuò)則顯示EEROR, 其代碼如下:
4 實(shí)驗(yàn)效果
5 總結(jié)
使用面向?qū)ο髮?duì)sht31的驅(qū)動(dòng)進(jìn)行封裝,在瑞薩的FSP驅(qū)動(dòng)中,可以快速實(shí)現(xiàn)驅(qū)動(dòng),同時(shí)只需要提供驅(qū)動(dòng)的接口,可以實(shí)現(xiàn)低耦合的功能。
( 本文來(lái)源于《EEPW》202505)
評(píng)論