PlatformIO+ESP32+Vscode+DS18B20溫度感測器(一直輸出-127)

lorem万俟發表於2024-03-13

DS18B20一直輸出-127 ??

一、硬體連線

二、程式碼

三、遇到的問題

一、硬體連線

將相應的線接到ESP wroom 32

二、程式碼

  1. 先在PlatformIO的library新增onWire庫和DallasTemperature
  2. #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。

網上看了解決方案是這樣說的:

  1. ESP32 的GPIOx與Dx可能不是一個口,所以定義的時候得注意下那個IO口是不是對的。
  2. 電源沒有正確接入
  3. 需要外加一個上拉電阻

我遇到的是第3個。後來檢視ESP32 的資料手冊知道,有點GPIO是不提供上拉的。而且DS18B20的手冊也有說,需要加上拉電阻。原因是這樣的,IO作為輸出時,自帶鎖存功能,也就是寫1後,輸出一直是1(鎖存器上的值),引腳上可能被外部電路影響而不是1了。所以需要上拉。

加了上拉電阻之後,就能夠輸出正常的溫度值了。

如有見解,歡迎留言指教。

相關文章