GPIO - 测量温濕度
材料準備
- Ameba x 1
- DHT11 or DHT22 or DHT21
範例說明
DHT11結合溫度與濕度的傳感器,工作電壓在3.3V~5V,在常溫下可量測濕度20% ~ 90%RH,精準度±5%RH,溫度可量測0 ~ 50℃,精準度±2℃。
DHT22則精準度較高, 溼度可量測0%~100%RH,精準度±5%RH,溫度可量測-40 ~ 125 ℃,精準度 ±0.2℃。
DHT22則精準度較高, 溼度可量測0%~100%RH,精準度±5%RH,溫度可量測-40 ~ 125 ℃,精準度 ±0.2℃。
兩者的pin腳都是一樣的,總共有4隻腳:
其中有一隻腳目前沒有作用,所以市面上也看的到重新包裝成3隻腳的版本:
上電之後,平常DHT都處於睡眠模式,要從DHT取得溫濕度,需要以下步驟:
其中有一隻腳目前沒有作用,所以市面上也看的到重新包裝成3隻腳的版本:
上電之後,平常DHT都處於睡眠模式,要從DHT取得溫濕度,需要以下步驟:
- 喚醒DHT:Ameba將DATA pin 這根GPIO toggle low,此時DATA GPIO對AMEBA來說是digital out
- 等待DHT回應:DHT也將DATA pin這根GPIO toggle low,此時DATA GPIO對AMEBA來說是digital in
- DHT將溫濕度資料送出:DHT將5 bytes的溫濕度資料送出,此時DATA GPIO對AMEBA來說是digital in。DHT會將 5 bytes = 40 bits,以每個bit的方式送出,每個bit的表示方式是,DHT會先將DATA GPIO pull low 一段時間,再pull high,如果pull high的時間小於pull low的時間就是bit 0, 如果pull high的時間大於pull high的時間就是bit 1
因為這些操作的時間精準度在microsecond,所以實作上會直接以Register讀取GPIO的值,在操作前也會關閉中斷以避免被其它中斷影響。整個流程都可以交給Ameba。
接線如下圖:
打開範例程式, “Files” -> “Examples” -> “AmebaGPIO” -> “DHTtester”,編譯並上傳到Ameba,完成之後按Reset按鈕。
測量結果會顯示在Serial Monitor上
程式碼說明
dht.readHumidity()
可以讀取濕度,dht.readTemperature()
可以讀取溫度。每次讀值的時候,都直接拿現有的數據使用。如果發現暫存的溫濕度數據已經兩秒沒更新,才會主動向DHT要數據。
Copyrights ©瑞晟微电子(苏州)有限公司 2021. All rights reserved. Terms of Use