DS18B20一直輸出-127 ??
一、硬體連線
二、程式碼
三、遇到的問題
將相應的線接到ESP wroom 32
- 先在PlatformIO的library新增onWire庫和DallasTemperature
庫 -
#include <Arduino.h> #include <OneWire.h> #include <DallasTemperature.h> #define DS18B20PIN 4 OneWire onWire(DS18B20PIN); DallasTemperature sensors(&onWire); void setup() { Serial.begin(115200); sensors.begin(); } void loop() { sensors.requestTemperatures(); // Send the command to get temperatures float ds_num = sensors.getTempCByIndex(0); Serial.println(ds_num); }
程式碼編譯執行沒有問題,但是在串列埠看到都是輸出-127。
網上看了解決方案是這樣說的:
- ESP32 的GPIOx與Dx可能不是一個口,所以定義的時候得注意下那個IO口是不是對的。
- 電源沒有正確接入
- 需要外加一個上拉電阻
我遇到的是第3個。後來檢視ESP32 的資料手冊知道,有點GPIO是不提供上拉的。而且DS18B20的手冊也有說,需要加上拉電阻。原因是這樣的,IO作為輸出時,自帶鎖存功能,也就是寫1後,輸出一直是1(鎖存器上的值),引腳上可能被外部電路影響而不是1了。所以需要上拉。
加了上拉電阻之後,就能夠輸出正常的溫度值了。
如有見解,歡迎留言指教。