ESP32 - MAX6675 Thermoelement-Modul

Die meisten Temperatursensoren, die wir in anderen Tutorials behandeln – DS18B20, DHT22, LM35 und ähnliche – kommen nur bis etwa 100-150°C. Das reicht völlig für einen Raum, einen Kühlschrank oder ein Gartenbeet, ist aber nutzlos, wenn Sie wissen müssen, wie heiß ein Ofen, eine Lötspitze oder das Innere eines Pizzaofens wirklich wird. Für solche Aufgaben greifen Bastler stattdessen zu einem Thermoelement, kombiniert mit einem kleinen Digitalisierungschip namens MAX6675.

In diesem Tutorial verbinden wir einen ESP32 mit einem MAX6675-Breakout-Board und einem Typ-K-Thermoelementfühler und geben anschließend die Temperatur im Seriellen Monitor sowohl in Celsius als auch in Fahrenheit aus.

ESP32 MAX6675 Thermoelement-Modul

Was genau ist ein Thermoelement?

Ein Thermoelement besteht einfach aus zwei Drähten aus unterschiedlichen Metallen, die an einem Ende zusammengeschweißt sind und die sogenannte Messstelle (heiße Lötstelle) bilden. Sobald diese Verbindungsstelle heiß (oder kalt) wird, entsteht an den Drähten eine winzige Spannung, die mit der Temperatur steigt und fällt. Da es sich nur um zwei Drahtstücke und nicht um einen empfindlichen Siliziumsensor handelt, kann ein Thermoelement an Orten überleben – und messen –, die einen normalen Sensor sofort zerstören würden. Die Typ-K-Variante aus Chromel- und Alumel-Draht ist mit Abstand die gebräuchlichste und deckt etwa -328°F bis +2300°F ab.

Über das MAX6675-Modul

Für sich genommen ist das Signal eines Thermoelements im Millivoltbereich zu klein und zu verrauscht, als dass ein Mikrocontroller es direkt lesen könnte. Das MAX6675-Modul löst dieses Problem: Es ist ein kleines Breakout-Board rund um den MAX6675-IC, das zusammen mit einem bereits angeschlossenen Typ-K-Fühler verkauft wird.

Pinbelegung des MAX6675-Moduls

Pinbelegung des MAX6675-Moduls
image source: diyables.io

Der MAX6675-Chip auf dem Breakout-Board tastet das Signal des Fühlers kontinuierlich ab, führt intern die Kaltstellenkompensation durch und liefert dem ESP32 über einen einfachen 3-Draht-Bus einen sofort nutzbaren 12-Bit-Temperaturwert. Die Pins sind:

  • VCC: Stromversorgungseingang, 3,0V bis 5,5V.
  • GND: Masse.
  • SCK: serieller Takteingang, vom ESP32 angesteuert.
  • CS: Chip Select – der ESP32 zieht diesen Pin auf LOW, während er einen Messwert ausliest.
  • SO: nur serieller Datenausgang (es gibt keinen Dateneingangs-Pin; das Modul empfängt nie Befehle, es sendet nur).

An der gegenüberliegenden Kante der Platine befindet sich eine kleine Schraubklemme, an die der Fühler angeschlossen wird, gekennzeichnet mit + und -; die rote Leitung des Fühlers kommt an + und die blaue Leitung an -.

Zu den weiteren Daten: Das Breakout-Board selbst kann Temperaturen von 0°C bis 1024°C digitalisieren, hat eine Genauigkeit von etwa ±3°C und löst Messwerte bis auf rund 0,25°C auf – wobei der mitgelieferte Fühler, der als Nächstes beschrieben wird, der eigentlich begrenzende Faktor ist.

Der mitgelieferte Typ-K-Fühler

Der mit dem Modul gelieferte Fühler ist ein dünnes Kabel mit Edelstahlspitze, etwa 18 Zoll lang, und ist nur für 0°C bis 80°C ausgelegt – gut für eine Tasse Kaffee oder ein Terrarium, aber bevor Sie ihn auf einen Brennofen richten, sollten Sie einen Fühler mit höherer Nenntemperatur verwenden. Achten Sie auf die roten (positiven) und blauen (negativen) Drähte an dem Ende, das in die Schraubklemme des Breakout-Boards gesteckt wird.

Verdrahtungsdiagramm

Versorgen Sie das Modul über den ESP32: VCC an 5V (3,3V funktioniert ebenfalls) und GND an GND. Die übrigen drei Pins – SCK, CS und SO – kommen jeweils an einen beliebigen freien GPIO des ESP32, da die Bibliothek sie per einfachem Bit-Banging statt über die Hardware-SPI-Peripherie ansteuert. Setzen Sie zum Schluss die rote und blaue Leitung des Thermoelementfühlers in die Klemmen + und - des Moduls ein.

ESP32 MAX6675 Thermoelement-Modul Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

Verdrahtungstabelle zwischen MAX6675-Modul und ESP32

MAX6675-Modul ESP32
VCC → 5V
GND → GND
SCK → GPIO19
CS → GPIO18
SO → GPIO5

ESP32-Code

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-max6675-thermocouple-module */ #include "max6675.h" const int SCK_PIN = 19; // ESP32's pin GPIO19 connected to SCK pin of the MAX6675 module const int CS_PIN = 18; // ESP32's pin GPIO18 connected to CS pin of the MAX6675 module const int SO_PIN = 5; // ESP32's pin GPIO5 connected to SO pin of the MAX6675 module // create a MAX6675 thermocouple object using the pins above MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); void setup() { Serial.begin(9600); delay(500); // give the MAX6675 module time to power up before the first read } void loop() { // read the temperature and print it to the Serial Monitor Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("C / "); Serial.print(thermocouple.readFahrenheit()); Serial.println("F"); delay(1000); // MAX6675 updates at most once every ~220ms, so pace the reads }

Schnelle Schritte

  • Neu beim ESP32? Beginnen Sie zunächst mit der Einrichtung der ESP32-Umgebung in der Arduino IDE.
  • Verdrahten Sie das MAX6675-Modul und den Thermoelementfühler wie im obigen Schaltplan gezeigt mit dem ESP32.
  • Schließen Sie den ESP32 mit einem USB-Kabel an Ihren Computer an.
  • Öffnen Sie die Arduino IDE.
  • Wählen Sie unter Tools das passende ESP32-Board (z. B. ESP32 Dev Module) und den richtigen COM-Port aus.
  • Öffnen Sie das Panel Libraries über die Symbolleiste auf der linken Seite.
  • Geben Sie "MAX6675" in das Suchfeld ein und suchen Sie die von Adafruit veröffentlichte Bibliothek.
  • Klicken Sie auf Install.
  • Search for MAX6675 library created by Adafruit and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Library Manager
Type:
All
Topic:
All
MAX6675 library by Adafruit
Arduino library for interfacing with MAX6675 thermocouple amplifier More info
1.1.2
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32 Dev Module on COM15
1
  • Fügen Sie den obigen Code in die IDE ein.
  • Klicken Sie auf Upload, um den Sketch auf den ESP32 zu übertragen.
  • Erwärmen Sie die Spitze des Thermoelements (halten Sie sie fest, hauchen Sie sie an, tauchen Sie sie in warmes Wasser) oder lassen Sie sie abkühlen.
  • Öffnen Sie den Seriellen Monitor, um die eintreffenden Messwerte zu beobachten.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Temperature: 23.50C / 74.30F Temperature: 23.75C / 74.75F Temperature: 24.25C / 75.65F Temperature: 26.00C / 78.80F Temperature: 29.50C / 85.10F Temperature: 34.75C / 94.55F Temperature: 38.25C / 100.85F
Ln 11, Col 1
ESP32 Dev Module on COM15
2

※ Notiz:

Sehen Sie einen eingefrorenen oder offensichtlich falschen Messwert? Überprüfen Sie zuerst die Verdrahtung von SCK/CS/SO und stellen Sie dann sicher, dass die rote und blaue Leitung des Thermoelements fest in den Schraubklemmen des Moduls sitzen – eine lose Leitung ist die häufigste Ursache für einen hängenden oder unsinnigen Messwert.

Code-Erklärung

Der Sketch beginnt mit dem Einbinden der Header-Datei der MAX6675-Bibliothek, wodurch der ESP32-Sketch Zugriff auf die Klasse MAX6675 erhält.

#include "max6675.h"

Drei Konstanten legen fest, mit welchen GPIOs des ESP32 die Pins SCK, CS und SO des Moduls verbunden sind.

const int SCK_PIN = 19; // clock pin const int CS_PIN = 18; // chip select pin const int SO_PIN = 5; // serial data out pin

Anschließend wird mit diesen drei Pins ein einzelnes MAX6675-Objekt namens thermocouple erzeugt – dieses ruft der restliche Sketch auf, um einen Messwert zu erfassen.

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

setup() muss lediglich die serielle Schnittstelle starten, damit wir die Ergebnisse irgendwo ausgeben können, sowie eine kurze Verzögerung einlegen, damit der MAX6675 vor dem ersten Auslesen vollständig hochfahren kann.

void setup() { Serial.begin(9600); delay(500); }

Innerhalb von loop() sind die beiden entscheidenden Bibliotheksaufrufe:

  • Thermocouple.readCelsius(): holt den neuesten Messwert in Grad Celsius.
  • Thermocouple.readFahrenheit(): holt denselben Messwert, umgerechnet in Fahrenheit.
Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("C / "); Serial.print(thermocouple.readFahrenheit()); Serial.println("F");

Ein delay() von einer Sekunde schließt die Schleife ab, sodass die Messwerte in angenehmem Tempo durchlaufen, statt den Seriellen Monitor zu überfluten.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!