ESP32 S3 UNO - MAX6675 Thermocouple Module

This ESP32 S3 Uno MAX6675 tutorial shows you how to connect a MAX6675 thermocouple module to the ESP32 S3 Uno form board and read its temperature with Arduino code. A Type-K thermocouple can handle heat that would destroy a normal sensor, and the MAX6675 turns its tiny signal into a clean digital value. You will see the temperature in both Celsius and Fahrenheit on the Serial Monitor.

In this tutorial, you will:

  1. Learn how a Type-K thermocouple and the MAX6675 chip work together
  2. Wire the MAX6675 thermocouple module to the ESP32 S3 Uno
  3. Install the MAX6675 library in Arduino IDE
  4. Read the high temperature sensor value in °C and °F
ESP32 S3 Uno MAX6675 thermocouple module

Hardware Preparation

1×ESP32 S3 Uno-form Board
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×MAX6675 Thermocouple Module
1×Jumper Wires

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you.
Additionally, some of these links are for products from our own brand, DIYables .

Overview of MAX6675 Thermocouple Module

Sensors like the DHT11, DS18B20, LM35 or TMP36 are great for room temperature. But they cannot measure something as hot as molten lava (well over 1000°C or 1800°F) or as cold as liquid nitrogen (around −195.8°C or −320°F). A thermocouple can, and the MAX6675 module makes it easy to read one.

The module comes as a set: a small MAX6675 breakout board and a Type-K thermocouple probe.

MAX6675 thermocouple module pinout
image source: diyables.io

Basics of Thermocouples

A thermocouple is two wires made of different metals, joined at one end. This joined end is called the hot junction. When it gets hotter or colder, the pair makes a very small voltage, and that voltage follows the temperature. Because there is no chip at the tip, a thermocouple survives temperatures that would kill other sensors. In general, thermocouples can cover about -330°F to +2460°F.

There are several thermocouple types, such as J, K, E and T. Each type uses a different pair of metals. Type-K is the most popular one. It uses Chromel and Alumel wires and covers roughly -328°F to +2300°F.

The voltage from a thermocouple is only a few microvolts per degree. It is too small to read directly with the ESP32 S3 Uno ADC. That is the job of the MAX6675 chip: it measures this voltage and turns it into a temperature number for you.

MAX6675 Module Pinout

The breakout board reads the probe, converts the signal into a temperature, and sends it to the ESP32 S3 Uno over an SPI-style interface. It measures from 0°C to +1024°C with an accuracy of about ±3°C, and it runs on 3.0V to 5.5V.

Power pins

VCC is the power input (3V to 5V). GND goes to ground. On the ESP32 S3 Uno, power the module from 3.3V.

Data pins

SCK is the clock pin. CS is the chip select pin, which tells the module when to send data. SO is the data output pin: it sends the temperature reading to the ESP32 S3 Uno.

Probe terminal

On the other side of the board is a 2-pin screw terminal for the probe. Connect the red wire to + and the blue wire to -.

Type-K Thermocouple Probe

The probe that comes with the module is about 18 inches long. It is rated for 0°C to 80°C. The red wire is the positive lead and the blue wire is the negative lead. If you want to measure much higher temperatures, use a probe rated for that range.

Technical Specifications

MAX6675 Module
Operating Voltage 3.0V to 5.5V
Interface SPI (read only)
Temperature Range (MAX6675) 0 to 1024°C
Temperature Range (supplied probe) 0 to 80°C
Accuracy ±3°C

ESP32 S3 Uno Pinout

The image below shows the pinout of the ESP32 S3 Uno form board. Use it to find the Uno header pins (D3, D4, D5, 3.3V) and their GPIO numbers when you wire the module.

ESP32 S3 Uno pinout diagram

Wiring Diagram

The module needs power and three digital pins for its data lines. Wire it as shown below, then screw the probe into the terminal block: red wire to '+' and blue wire to '-'.

The wiring diagram between ESP32 S3 Uno MAX6675 thermocouple module

This image is created using Fritzing. Click to enlarge image

Wiring table of MAX6675 Module and ESP32 S3 Uno

MAX6675 Module ESP32 S3 Uno Pin
VCC 3.3V
GND GND
SCK D5 (GPIO20)
CS D4 (GPIO19)
SO D3 (GPIO17)

WARNING

The ESP32 S3 Uno pins are NOT 5V tolerant. The SO pin of the MAX6675 outputs a signal at the same level as its VCC. If you power the module from 5V, the SO pin sends 5V into D3 (GPIO17), which can damage the board over time. Power the module from 3.3V instead. The MAX6675 works fine from 3.0V, so you lose nothing.

ESP32 S3 Uno Code

The sketch creates a MAX6675 object on three pins and reads the temperature once per second. It prints each reading in Celsius and Fahrenheit on the Serial Monitor.

/* * This ESP32 S3 Uno code was developed by newbiely.com * * This ESP32 S3 Uno code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/esp32-s3-uno/esp32-s3-uno-max6675-thermocouple-module */ #include "max6675.h" // Define the ESP32 S3 Uno pins the MAX6675 module is connected to int SO_PIN = 17; // Serial Out (SO) pin - D3 (GPIO17) int CS_PIN = 19; // Chip Select (CS) pin - D4 (GPIO19) int SCK_PIN = 20; // Clock (SCK) pin - D5 (GPIO20) // Create an instance of the MAX6675 class with the specified pins MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); void setup() { Serial.begin(9600); delay(500); } void loop() { // Read the current temperature and print it to the Serial Monitor // Read the temperature in Celsius Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("\xC2\xB0"); // shows degree symbol Serial.print("C | "); // Read the temperature in Fahrenheit Serial.print(thermocouple.readFahrenheit()); Serial.print("\xC2\xB0"); // shows degree symbol Serial.println("F"); delay(1000); }

Detailed Instructions

Follow these steps in order:

  1. New to the ESP32 S3 Uno? Follow ESP32 S3 Uno - Getting Started first.
  2. Wire it up as shown in the diagram, with VCC on 3.3V.
  3. Connect the board to your computer with a USB Type-C cable.
  4. Open Arduino IDE, choose the ESP32S3 Dev Module board and the correct COM port.
  5. Open the Library Manager by clicking the Libraries icon on the left side of Arduino IDE.
  6. Install the library: search for "MAX6675", find the library by Adafruit, and click Install.
  • Search for MAX6675 library created by Adafruit and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 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
ESP32S3 Dev Module on COM15
1
  1. Copy the code above and paste it into Arduino IDE.
  2. Upload the code by clicking the Upload button.
  3. Touch the probe to the object you want to measure.
  4. Open the Serial Monitor and set it to 9600 baud.
  5. Check the result. The temperature updates every second:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
Temperature: 25.00°C | 77.00°F Temperature: 25.25°C | 77.45°F Temperature: 26.50°C | 79.70°F Temperature: 28.75°C | 83.75°F Temperature: 31.00°C | 87.80°F
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2
  1. Tip: hold the probe tip between your fingers. The value should rise slowly toward your skin temperature, which is a quick way to check that everything works.

※ NOTE THAT:

If the value never changes or looks wrong, check the three data wires between the module and the ESP32 S3 Uno first. Then make sure the probe wires are tight in the '+' and '-' terminals and not swapped.

Code Explanation

The first line includes the MAX6675 library. This library does all the low-level work of talking to the chip, so your sketch stays short.

#include "max6675.h"

Next, three variables hold the GPIO numbers for the module's SO, CS and SCK pins. On the ESP32 S3 Uno, the header pins D3, D4 and D5 are GPIO17, GPIO19 and GPIO20, so the code uses those numbers.

int SO_PIN = 17; // Serial Out (SO) pin - D3 (GPIO17) int CS_PIN = 19; // Chip Select (CS) pin - D4 (GPIO19) int SCK_PIN = 20; // Clock (SCK) pin - D5 (GPIO20)

Then the sketch builds a MAX6675 object called thermocouple. You pass the pins in this order: SCK, CS, SO.

MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);

In setup(), the Serial Monitor starts at 9600 baud. The short delay gives the MAX6675 time to finish its first conversion.

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

In loop(), two library functions do the reading. readCelsius() returns the temperature in Celsius, and readFahrenheit() returns it in Fahrenheit. The "\xC2\xB0" string prints the degree symbol.

Serial.print("Temperature: "); Serial.print(thermocouple.readCelsius()); Serial.print("\xC2\xB0"); // shows degree symbol Serial.print("C | "); Serial.print(thermocouple.readFahrenheit()); Serial.print("\xC2\xB0"); // shows degree symbol Serial.println("F");

A one-second delay at the end of loop() sets the update rate. The loop then repeats forever.

Video Tutorial

Watch the video below to see this ESP32 S3 Uno project step by step.

FAQ

Can I power the MAX6675 module from 5V on the ESP32 S3 Uno?

The module itself works on 5V, but its SO pin then outputs 5V signals. ESP32 S3 Uno pins are 3.3V only and are not 5V tolerant. Power the module from 3.3V, which is inside its 3.0V to 5.5V range, and no level shifter is needed.

Which pins can I use for the MAX6675 on the ESP32 S3 Uno?

The library drives the pins in software, so almost any free digital pin works. This tutorial uses D3 (GPIO17), D4 (GPIO19) and D5 (GPIO20). Avoid D6 (GPIO3) and D9 (GPIO46) if you can, because they are boot strapping pins. Always write the GPIO number in code, not the D label.

Why does the Serial Monitor show "nan"?

The library returns NAN when the chip reports an open thermocouple input. This usually means the probe is not connected, a probe wire is loose, or the probe is broken. Tighten both screws on the terminal block and try again.

How hot can I measure with this kit?

The MAX6675 chip can read from 0°C to 1024°C. The probe that ships with the module is rated for only 0°C to 80°C. For hotter jobs, such as a kiln or a 3D printer nozzle, buy a Type-K probe rated for the temperature you need. Note that the MAX6675 cannot read below 0°C.

Can I read more than one MAX6675 with the ESP32 S3 Uno?

Yes. All modules can share the SCK and SO wires, but each one needs its own CS pin. Create one MAX6675 object per module, each with its own CS pin number.

What if my project needs more pins than the Uno headers give?

The ESP32 S3 Uno has two extra rows of holes with more GPIOs: GPIO15 and GPIO16 (I/O, PWM, analog), GPIO45 and GPIO35 to GPIO42 (I/O, PWM), and GPIO47/GPIO48 (output only, PWM). Solder pin headers to use them and write the GPIO number in code. For extra MAX6675 modules, GPIO35 to GPIO42 are a good choice for the CS pins. Do not use GPIO47/GPIO48 for the SO pin, because they cannot read input. Two warnings: (1) GPIO47/GPIO48 may run at 1.8V instead of 3.3V on some modules (especially ones with "V" in the name, like R8V or R16V), so 3.3V devices can be damaged or act strangely; (2) GPIO0, GPIO3 (D6), GPIO45 and GPIO46 (D9) are boot strapping pins, and a wrong connection can stop the board from booting or uploading code. Use the other extra pins first.

Troubleshooting

Problem Possible Cause Solution
No COM port in Arduino IDE USB driver missing or board not in upload mode Install the CP210x or CH340 driver, use a data USB cable, or hold BOOT while pressing RESET
Upload fails with a timeout Wrong board selected or the board is busy Select ESP32S3 Dev Module, then hold BOOT and press RESET before uploading
Serial Monitor shows nan Probe not connected or loose wire in the terminal Tighten the red and blue wires in the '+' and '-' screw terminals
Reading is always 0 Module has no power or SO wire is wrong Check VCC on 3.3V, GND on GND, and SO on D3 (GPIO17)
Temperature goes down when it should go up Probe wires are swapped Put the red wire on '+' and the blue wire on '-'
Garbage characters on the Serial Monitor Baud rate does not match Set the Serial Monitor to 9600 baud
Compile error max6675.h not found Library not installed Install the MAX6675 library by Adafruit from the Library Manager
Values jump a few degrees Normal ±3°C accuracy or electrical noise Keep the probe wires away from motors and mains cables, or average several readings

※ OUR MESSAGES

  • As freelancers, We are AVAILABLE for HIRE. See how to outsource your project to us
  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!