硬體連線:
mcu通過一條資料線與dh11連線,mcu通過這條線發命令給dh11,dh11再通過這條線把資料傳送給mcu。
溫濕度模組的核心就是 mcu發給dh11的命令格式和dh11返回的資料格式。
首先mcu傳送乙個開始訊號s,這個開始訊號是乙個低脈衝,然後再拉高。等待dht11應答。
然後,dh11拉低,做出乙個響應訊號,再拉高,準備傳送資料。
接著就是dh11返回的資料。
這些資料一共有40bit,高位先出。(8bit濕度整數資料+8bit濕度小數資料+8bi溫度整數資料+8bit溫度小數資料+8bit校驗和)
資料有40bit: 8bit濕度整數資料+8bit濕度小數資料+8bit溫度整數資料+8bit溫度小數資料+8bit校驗和
時序要求:
mcu必須先拉低至少18ms,然後再拉高20-40us,dh11再拉低80us以響應,最後再拉高80us.
接下來就是傳輸資料:
bit0:1bit 50us開始後,dht11拉低資料時間為30us以內
開始後,dht11拉低資料時間為超過70us
實現gpio的基本操作:
gpg5,gpio配置如下:
)dht11操作:
void dht11_init(void
)static
void dht11_start(void
)static
int dht11_wait_ack(void
)static
int dht11_recv_byte(void
) udelay(
40);
data
<<= 1
;
if (dht11_data_get() == 1
) data |= 1
;
if (dht11_wait_for_val(0, 1000
))
}return
data;
}static
int dht11_wait_for_val(int val, int
timeout_us)
return -1; /*
err */}
int dht11_read(int *hum, int *temp)
if (0 != dht11_wait_for_val(1, 1000)) /*
等待ack變為高電平, 超時時間是1000us
*/
if (0 != dht11_wait_for_val(0, 1000)) /*
資料階段: 等待低電平, 超時時間是1000us
*/ hum_m =dht11_recv_byte();
hum_n =dht11_recv_byte();
temp_m =dht11_recv_byte();
temp_n =dht11_recv_byte();
check =dht11_recv_byte();
dht11_data_cfg_as_output();
dht11_data_set(1);
if (hum_m + hum_n + temp_m + temp_n ==check)
else
}void dht11_test(void
)
else}}
view code
DHT11溫濕度感測器
原理圖 資料傳輸 使用序列介面 單線雙向 data 用於微處理器與 dht11之間的通訊和同步,採用單匯流排資料格式,一次 通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數 部分用於以後擴充套件,現讀出為零.操作流程如下 一次完整的資料傳輸為40bit,高位先出。資料格式 ...
DHT11溫濕度感測器
dht11數字溫濕度感測器是一款含有已校準數碼訊號輸出的溫濕度復合感測器。它應用專用的數字模組採集技術和溫濕度感測技術,確保產品具有極高的可靠性與長期的穩定性。感測器包括乙個電阻式感溼元件和乙個ntc測溫元件,並與乙個8位微控制器相連線。因此該產品具有抗干擾能力強 價效比高等優點。dht11使用1 ...
溫濕度感測器之DHT11
起始訊號 時序圖 時序說明 mcu先拉低資料線至少18ms,然後拉高20 40us dht11將資料線拉低80us,然後拉高80us 程式 拉低20ms onewire 0 delay20ms 拉高,在50us內如果器件如果有應答會拉低 onewire 1 count 0 while 1 onewi...