最近收到DS18B20溫度探頭傳感器,如圖:
感覺是一件比較簡單的溫度傳感器,三根線:
不帶屏蔽輸出引線:紅色(VCC),黃色(白色)(DATA),黑色(GND)
帶屏蔽的輸出引線:紅色(VCC電源線),黃色(DATA信號線),白色(GND地線)
我的是帶屏蔽線的,所以紅色VCC接ESP32的VIN口(5V供電),白色GND接ESP32的GND,黃色信號線接ESP32的D4。
Arduino引入庫
兩個庫均在GitHub上,可以在release標籤頁中下載最新項目文件。
OneWire庫
項目地址:https://github.com/PaulStoffregen/OneWire
DallasTemperature庫
項目地址:https://github.com/milesburton/Arduino-Temperature-Control-Library
可以將庫文件複製到arduino的libraries目錄下,也可以打開arduino ide,選擇項目 > 加載庫 > 添加一個 .ZIP庫,導入兩個庫。
#include <OneWire.h> #include <DallasTemperature.h> // 定義DS18B20數據口連接ESP32的4號IO上 #define ONE_WIRE_BUS 4 // 初始連接在單總線上的單總線設備 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup(void) { // 設置串口通信波特率 Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo"); // 初始庫 sensors.begin(); } void loop(void) { Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // 發送命令獲取溫度 Serial.println("DONE"); Serial.print("Temperature for the device 1 (index 0) is: "); Serial.println(sensors.getTempCByIndex(0)); delay(500); }
一切都想的太簡單!!!讀出的溫度一直顯示0度。
必須要上拉一個4.7K的電阻,如圖接線:
也就是說,需要在VCC(5V)和接D4的線之間接一個4.7K上拉電阻纔行,但我家裏沒4.7K的,只能並聯兩個10K電阻來解決問題,接上拉電阻後,成功讀到溫度數據。
參考: