dht11數字溫濕度感測器是一款含有已校準數碼訊號輸出的溫濕度復合感測器。它應用專用的數字模組採集技術和溫濕度感測技術,確保產品具有極高的可靠性與長期的穩定性。感測器包括乙個電阻式感溼元件和乙個ntc測溫元件,並與乙個8位微控制器相連線。因此該產品具有抗干擾能力強、價效比高等優點。
dht11使用1-wire匯流排與mcu進行半雙工通訊,當連線線長度短於20公尺時可用5k的上拉電阻,大於20公尺時需要根據實際情況選擇合適的上拉電阻。
data引腳用於mcu與dht11之間的通訊和同步,採用單匯流排資料格式,一次通訊時間4ms左右,資料分小數部分和整數部分,一次完整的資料傳輸為40bit,高位先出(msb)。資料格式:8bit濕度整數資料+8bit濕度小數資料+8bit溫度整數資料+8bit溫度小數資料+8bit校驗和。資料傳送正確時校驗和資料等於「8bit濕度整數資料+8bit濕度小數資料+8bit溫度整數資料+8bit溫度小數資料」所得結果的末8位。
通訊的開始
上圖為mcu與dh11通訊的開始,mcu拉低匯流排20ms後拉高,請求dh11響應,dh11收到訊號後將匯流排拉低以此來響應主機,響應後拉高匯流排開始傳輸資料,本圖**為dh11的資料手冊。需要注意mcui/o引腳輸入輸出模式的切換,本人使用的是gpiog的號引腳與dht11進行通訊。
資料的判斷
上圖中可以看出論時資料0還是資料1,資料的開始匯流排都是被拉低50us,只是在匯流排被拉高時的時長不一樣,於是程式便可以在40us的時候判斷引腳的電平,以此來指定當前傳輸的資料是0是1。
以下為溫濕度感測器初始化函式和獲得溫濕度資料的程式,初始化相關引腳後呼叫read_ht_data(&data),便可以獲得所需資料,注意該函式1s鐘只能呼叫一次,不然獲取不到資料。還需要保證延遲函式是準確的,參考我之前的系統定時器的相關隨筆。
void ht_sensor_init()
int read_ht_data(uint8_t *p)
} //通過超時檢測低電平的合法性,注意匯流排電平每跳變一次就需要將t清0
t=0;/
while(pgin(9)==0) }
//通過超時檢測高電平的合法性
t=0;
while(pgin(9)) }
for(j=0; j<5; j++)
}//延時40us~60us左右
delay_us(40);
//判斷引腳的電平
if(pgin(9))
} }}
p[j]=d;
} //校驗資料
check_sum = (p[0]+p[1]+p[2]+p[3])&0xff;
if(check_sum != p[4])
//printf("h:%d.%d\tt:%d.%d\n",p[0], p[1], p[2], p[3]);
return 0;
}
1.獲得溫濕度資料不可太快;
2.除了獲取溫濕度資料出錯外,在通訊過程中不可使用printf函式不然將超時,導致獲取失敗。
提取碼:vs24
DHT11溫濕度感測器
原理圖 資料傳輸 使用序列介面 單線雙向 data 用於微處理器與 dht11之間的通訊和同步,採用單匯流排資料格式,一次 通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數 部分用於以後擴充套件,現讀出為零.操作流程如下 一次完整的資料傳輸為40bit,高位先出。資料格式 ...
DHT11溫濕度感測器
硬體連線 mcu通過一條資料線與dh11連線,mcu通過這條線發命令給dh11,dh11再通過這條線把資料傳送給mcu。溫濕度模組的核心就是 mcu發給dh11的命令格式和dh11返回的資料格式。首先mcu傳送乙個開始訊號s,這個開始訊號是乙個低脈衝,然後再拉高。等待dht11應答。然後,dh11拉...
溫濕度感測器之DHT11
起始訊號 時序圖 時序說明 mcu先拉低資料線至少18ms,然後拉高20 40us dht11將資料線拉低80us,然後拉高80us 程式 拉低20ms onewire 0 delay20ms 拉高,在50us內如果器件如果有應答會拉低 onewire 1 count 0 while 1 onewi...