Suche

Temperatur messen mit DS18b20

Inhaltsverzeichnis

Die Hardware

Die Messung der Temperatur mithilfe von Sensoren sind eine wichtige Standardanwendung für Mikrocontroller.

Der hier verwendete Sensor DS18b20 Sensor benötigt neben den Anschlüssen für Ground (GND) und 3,3V/5V nur eine Datenleitung

Messdaten im Seriellen Plotter anzeigen

Den Seriellen Plotter findest du unter Werkzeuge -> Serieller Plotter

Schaltpläne

Benötigte Bibliothek installieren

Die Bibliothek DallasTemperature benötigt zusätzlich die Bibliothek OneWire.

Der Programmcode

Arduino UNO

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS 6

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

Wemos D1 Mini

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS D7

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

NodeMCU

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS D7

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

ESP32-Wroom

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS 4

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

Messdaten auf einem OLED anzeigen

Schaltpläne

Zusätzliche Bibliothek installieren

Der Programmcode

Arduino UNO

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"
# include "Adafruit_SSD1306.h"

// Bildschirmgröße definieren
# define BildschirmBreite 128  
# define BildschirmHoehe 64  

# define OLED_RESET 4

// Adresse: 0x3C oder 0x3D
# define Adresse 0x3c  

// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS 6

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

   // OLED starten
  oled.begin(SSD1306_SWITCHCAPVCC, Adresse);
  oled.clearDisplay();

  // Schriftfarbe und -größe
  oled.setTextColor(WHITE);
  oled.setTextSize(3);

  // erweiterte Codepage (255 Zeichen)
  oled.cp437(true);
  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    // Temperatur anzeigen
    oled.clearDisplay();
    oled.setCursor(0, 0);
    oled.print(Temperatur + "");

    // Sonderzeichen ° anzeigen
    oled.write(248);
    oled.write("C");
    oled.display();

    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

Wemos D1 Mini

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"
# include "Adafruit_SSD1306.h"

// Bildschirmgröße definieren
# define BildschirmBreite 128  
# define BildschirmHoehe 64  

# define Adresse 0x3c  
# define OLED_RESET D0

// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS D7

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

   // OLED starten
  oled.begin(SSD1306_SWITCHCAPVCC, Adresse);
  oled.clearDisplay();

  // Schriftfarbe und -größe
  oled.setTextColor(WHITE);
  oled.setTextSize(3);

  // erweiterte Codepage (255 Zeichen)
  oled.cp437(true);
  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    // Temperatur anzeigen
    oled.clearDisplay();
    oled.setCursor(0, 0);
    oled.print(Temperatur + "");

    // Sonderzeichen ° anzeigen
    oled.write(248);
    oled.write("C");
    oled.display();

    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

NodeMCU

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"
# include "Adafruit_SSD1306.h"

// Bildschirmgröße definieren
# define BildschirmBreite 128  
# define BildschirmHoehe 64  

# define Adresse 0x3c  
# define OLED_RESET D0

// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS D7

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

   // OLED starten
  oled.begin(SSD1306_SWITCHCAPVCC, Adresse);
  oled.clearDisplay();

  // Schriftfarbe und -größe
  oled.setTextColor(WHITE);
  oled.setTextSize(3);

  // erweiterte Codepage (255 Zeichen)
  oled.cp437(true);
  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    // Temperatur anzeigen
    oled.clearDisplay();
    oled.setCursor(0, 0);
    oled.print(Temperatur + "");

    // Sonderzeichen ° anzeigen
    oled.write(248);
    oled.write("C");
    oled.display();

    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

ESP32-Wroom

// benötigte Bibliotheken
# include "OneWire.h"
# include "DallasTemperature.h"
# include "Adafruit_SSD1306.h"

// Bildschirmgröße definieren
# define BildschirmBreite 128  
# define BildschirmHoehe 64  

# define Adresse 0x3c  
# define OLED_RESET 15

// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

// Pin des Sensors an OneWire übergeben
# define ONE_WIRE_BUS 4

// oneWire-Instanz erstellen
OneWire oneWire(ONE_WIRE_BUS);

// oneWire-Instanz an den Sensor übergeben
DallasTemperature TemperaturSensor(&oneWire);

void setup()
{
  // Temperatursensor starten
  TemperaturSensor.begin();

   // OLED starten
  oled.begin(SSD1306_SWITCHCAPVCC, Adresse);
  oled.clearDisplay();

  // Schriftfarbe und -größe
  oled.setTextColor(WHITE);
  oled.setTextSize(3);

  // erweiterte Codepage (255 Zeichen)
  oled.cp437(true);
  Serial.begin(9600);
}

void loop()
{
  TemperaturSensor.requestTemperatures(); 
  
  // getTempCByIndex(0) -> 0 = 1. angeschlossener Sensor
  float TemperaturLesen = TemperaturSensor.getTempCByIndex(0);

  // überprüfen, ob das Lesen der Temperatur erfolgreich war
  if (TemperaturLesen != DEVICE_DISCONNECTED_C)
  {
    String Temperatur  = String(TemperaturLesen);

    // . in , umwandeln
    Temperatur.replace(".", ",");
   
    // Temperatur anzeigen
    oled.clearDisplay();
    oled.setCursor(0, 0);
    oled.print(Temperatur + "");

    // Sonderzeichen ° anzeigen
    oled.write(248);
    oled.write("C");
    oled.display();

    // kurzes delay zu Demozwecken
    delay(1000);

    // Ausgabe Serieller Plotter
    Serial.print("Temperatur:");
    Serial.print(Temperatur);
    Serial.println(",");
  }
  else
  {
    Serial.println("Temperatur nicht lesbar!");
  }
}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE