Arduino UNO Q - MAX6675 Thermocouple Module

Regular sensors like the DHT11 or LM35 can't survive being near an oven, a soldering iron, or a running engine — they simply weren't built for that kind of heat. The MAX6675 module solves this by pairing a Type-K thermocouple probe with a dedicated digitizer chip, letting your Arduino UNO Q safely read temperatures far beyond what a normal sensor could handle. This tutorial shows you how to wire and program it — and monitor it remotely via Telegram.

In this tutorial, you will learn:

Arduino UNO Q MAX6675 Thermocouple Module

Hardware Preparation

1×Arduino UNO Q
1×USB Cable for Arduino Uno Q
1×MAX6675 Thermocouple Module
1×Breadboard
1×Jumper Wires
1×Recommended: Screw Terminal Block Shield for Arduino Uno
1×Recommended: Sensors/Servo Expansion Shield for Arduino Uno
1×Recommended: Breadboard Shield for Arduino Uno
1×Recommended: Enclosure for Arduino Uno
1×Recommended: Prototyping Base Plate & Breadboard Kit for Arduino UNO

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 the MAX6675 Thermocouple Module

A thermocouple is a temperature sensor made of two different metal wires joined together at one end, called the hot junction. Heating that junction produces a tiny voltage that changes with temperature — the MAX6675 chip converts this tiny voltage into a clean 12-bit digital reading your Arduino UNO Q can use directly. The most common probe type, Type-K, is made of Chromel and Alumel wires and can measure roughly -328°F to +2300°F.

MAX6675 Module
Operating Voltage 3.0V to 5.5V
Interface 3-wire (SCK, CS, SO)
Temperature Range 0°C to 1024°C (probe rated 0°C to 80°C on the outside casing)
Accuracy ±3°C

Pinout

MAX6675 thermocouple module pinout

The breakout board has four header pins and a 2-pin screw terminal for the probe:

  • VCC: Connect to 3.3V or 5V
  • GND: Connect to GND (0V)
  • SCK: Clock pin — connect to a digital pin on the MCU
  • CS: Chip select pin — connect to a digital pin on the MCU
  • SO: Serial data output (MISO only, there is no MOSI) — connect to a digital pin on the MCU

The Type-K probe connects to the screw terminal on the other side of the board: red wire to +, blue wire to -.

Wiring Diagram

The wiring diagram between Arduino UNO Q MAX6675 Thermocouple Module

This image is created using Fritzing. Click to enlarge image

MAX6675 Module Pin Arduino UNO Q MCU
VCC 5V
GND GND
SCK D5
CS D4
SO D3

How To Program For MAX6675

  • Include the library:
#include "max6675.h"
  • Define the pins and create a thermocouple object:
#define SCK_PIN 5 #define CS_PIN 4 #define SO_PIN 3 MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN);
  • Read the temperature in Celsius and Fahrenheit:
float tempC = thermocouple.readCelsius(); float tempF = thermocouple.readFahrenheit();

※ NOTE THAT:

The MAX6675 needs about 220ms to complete a conversion — avoid reading it more often than roughly once every 250ms.

Arduino UNO Q Code

The Arduino UNO Q has two processors working together:

  • The STM32 MCU reads the MAX6675 module directly via its 3-wire interface — all sensor reading runs on the MCU
  • The Qualcomm MPU runs Debian Linux and handles Wi-Fi, Python, and cloud connectivity
  • In this section, only the MCU is programmed — the Linux side stays idle. A later section shows how both processors work together via Bridge.

The MCU reads the MAX6675 every second and prints the temperature to the Serial Monitor.

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-max6675-thermocouple-module */ #include "max6675.h" // Arduino UNO Q MCU pins connected to the MAX6675 module #define SCK_PIN 5 #define CS_PIN 4 #define SO_PIN 3 MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); void setup() { Serial.begin(115200); delay(1500); Serial.println("Arduino UNO Q MAX6675 Thermocouple Module ready"); } void loop() { float tempC = thermocouple.readCelsius(); float tempF = thermocouple.readFahrenheit(); Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C = "); Serial.print(tempF); Serial.println("°F"); delay(1000); }

Detailed Instructions

First time with Arduino UNO Q? Follow the Getting Started with Arduino UNO Q tutorial before proceeding.

  • Connect: Wire the MAX6675 module to the Arduino UNO Q MCU as shown in the wiring diagram.
  • Open Arduino App Lab: Launch Arduino App Lab and wait until it detects your Arduino UNO Q.
  • Create a new App: Click the Create New App button.
Create New App in Arduino App Lab on Arduino UNO Q
  • Give the App a name, for example: Max6675ThermocoupleModule
  • Click Create to confirm.
Arduino App Lab App folders and files on Arduino UNO Q
  • Paste the sketch: Copy the MCU code above and paste it into sketch/sketch.ino. Keep other files as default.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
Add sketch library in Arduino App Lab on Arduino UNO Q
  • Search for MAX6675 library created by Adafruit and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
MAX6675 library Adafruit

Arduino library for interfacing with MAX6675 thermocouple amplifier

1.1.2
Install
More Info
  • Upload: Click the Run button in Arduino App Lab.
Click Run button in Arduino App Lab on Arduino UNO Q
  • Touch the probe tip to something warm (a mug of hot water works well) — watch the temperature rise in the console.

App Lab Console Output

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q MAX6675 Thermocouple Module ready [2026-04-29 09:00:02] Temperature: 24.50°C = 76.10°F [2026-04-29 09:00:03] Temperature: 26.75°C = 80.15°F [2026-04-29 09:00:04] Temperature: 31.00°C = 87.80°F [2026-04-29 09:00:05] Temperature: 38.25°C = 100.85°F

Bridge: Linux + MCU

This section shows how to program both processors of the Arduino UNO Q so the Linux side can read MAX6675 temperature via Bridge:

  • The MAX6675 module is connected to the MCU (STM32) via its 3-wire interface — the MCU reads and caches the latest values every second
  • The MPU cannot access the MAX6675 directly — it must call Bridge functions to retrieve readings
  • The MPU has Wi-Fi — running full Debian Linux, it can log data, publish to dashboards, or send alerts over the Internet
  • Arduino_RouterBridge enables RPC communication between the two processors
  • ⚠️ /dev/ttyHS1 (Linux) and Serial1 (MCU) are RESERVED by the router — never open them in user code

In short: MCU reads the MAX6675 every second and caches the result → MPU polls Bridge to retrieve readings → MPU publishes or alerts over Wi-Fi.

MCU Code (Bridge)

/* * This Arduino UNO Q code was developed by newbiely.com * * This Arduino UNO Q code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-max6675-thermocouple-module */ #include "Arduino_RouterBridge.h" #include "max6675.h" // Arduino UNO Q MCU pins connected to the MAX6675 module #define SCK_PIN 5 #define CS_PIN 4 #define SO_PIN 3 MAX6675 thermocouple(SCK_PIN, CS_PIN, SO_PIN); float last_temp_c = 0.0; float last_temp_f = 0.0; unsigned long last_read_ms = 0; void read_thermocouple() { last_temp_c = thermocouple.readCelsius(); last_temp_f = thermocouple.readFahrenheit(); } String get_temp_c(String arg) { return String(last_temp_c, 2); } String get_temp_f(String arg) { return String(last_temp_f, 2); } String get_status(String arg) { return "Temp: " + String(last_temp_c, 2) + "°C / " + String(last_temp_f, 2) + "°F"; } void setup() { Bridge.begin(); Monitor.begin(); read_thermocouple(); Bridge.provide("get_temp_c", get_temp_c); Bridge.provide("get_temp_f", get_temp_f); Bridge.provide("get_status", get_status); Monitor.println("Arduino UNO Q MAX6675 Thermocouple Module Bridge ready"); } void loop() { unsigned long now = millis(); if (now - last_read_ms >= 1000) { last_read_ms = now; read_thermocouple(); Monitor.println("Temp: " + String(last_temp_c, 2) + "°C / " + String(last_temp_f, 2) + "°F"); } }

Python Code (Bridge)

""" This Arduino UNO Q script was developed by newbiely.com This Arduino UNO Q script is made available for public use without any restriction For comprehensive instructions and wiring diagrams, please visit: https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-max6675-thermocouple-module """ from arduino.app_utils import * import time def loop(): temp_c = Bridge.call("get_temp_c") temp_f = Bridge.call("get_temp_f") print(f"Temperature: {temp_c}°C = {temp_f}°F") time.sleep(1) App.run(user_loop=loop)

Detailed Instructions

  • Connect: Wire the MAX6675 module to the Arduino UNO Q as shown in the wiring diagram.
  • Open Arduino App Lab: Launch Arduino App Lab and wait for the board to be detected.
  • Create a new App: Click Create New App, name it Max6675ThermocoupleModuleBridge, then click Create.
  • Paste the MCU sketch: Copy the MCU Bridge code above and paste it into sketch/sketch.ino.
  • Paste the Python code: Copy the Python Bridge code above and paste it into the Python file in the App.
  • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
Add sketch library in Arduino App Lab on Arduino UNO Q
  • Search for Arduino_RouterBridge created by Arduino and click the Install button.
My Apps / DIYables Apps
Run
Bricks
No bricks added...
Sketch Libraries
No sketch libra...
Files
python
sketch
.gitignore
README.md
app.yaml
sketch.ino
Add sketch library
Arduino_RouterBridge Arduino

This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

0.4.1
Install
More Info
  • Upload: Click the Run button in Arduino App Lab.
Click Run button in Arduino App Lab on Arduino UNO Q
  • Watch temperature readings appear in the Python console every second.

App Lab Console Output

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
Message (Enter to send a message to "Newbiely" on usb(2820070321))
New Line
9600 baud
[2026-04-29 09:00:01] Arduino UNO Q MAX6675 Thermocouple Module Bridge ready [2026-04-29 09:00:02] Temp: 24.50°C / 76.10°F [2026-04-29 09:00:03] Temp: 26.75°C / 80.15°F [2026-04-29 09:00:04] Temp: 31.00°C / 87.80°F
DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:00:02] Temperature: 24.50°C = 76.10°F [2026-04-29 09:00:03] Temperature: 26.75°C = 80.15°F [2026-04-29 09:00:04] Temperature: 31.00°C = 87.80°F [2026-04-29 09:00:05] Temperature: 38.25°C = 100.85°F

Telegram

Monitor MAX6675 temperature remotely and receive automatic Telegram alerts when temperature rises above 100°C — handy for keeping an eye on an oven, a kiln, or a soldering station from another room.

MCU sketch: Keep the same MCU sketch from the previous Bridge section.

Python Code (Telegram)

""" This Arduino UNO Q script was developed by newbiely.com This Arduino UNO Q script is made available for public use without any restriction For comprehensive instructions and wiring diagrams, please visit: https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-max6675-thermocouple-module """ from arduino.app_utils import * import requests import time TELEGRAM_BOT_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" CHAT_ID = "YOUR_CHAT_ID" last_update_id = 0 ALERT_THRESHOLD_C = 100.0 alert_sent = False def get_updates(): global last_update_id url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getUpdates" params = {"offset": last_update_id + 1, "timeout": 5} try: response = requests.get(url, params=params, timeout=10) data = response.json() if data["ok"]: return data["result"] except Exception as e: print(f"Error getting updates: {e}") return [] def send_message(chat_id, text): url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = {"chat_id": chat_id, "text": text} try: requests.post(url, data=payload, timeout=10) except Exception as e: print(f"Error sending message: {e}") def loop(): global alert_sent # Auto-alert on high temperature temp_c_str = Bridge.call("get_temp_c") try: temp_c = float(temp_c_str) if temp_c > ALERT_THRESHOLD_C and not alert_sent: alert_sent = True temp_f = Bridge.call("get_temp_f") msg = f"🔥 High temperature alert: {temp_c_str}°C / {temp_f}°F" print(msg) send_message(CHAT_ID, msg) elif temp_c <= ALERT_THRESHOLD_C: alert_sent = False except ValueError: pass # Handle Telegram commands updates = get_updates() for update in updates: last_update_id = update["update_id"] if "message" not in update: continue message = update["message"] chat_id = message["chat"]["id"] text = message.get("text", "").strip() print(f"Received: {text}") if text == "/start": send_message(chat_id, "Arduino UNO Q MAX6675 Thermocouple Bot\n" "/temp - Read temperature (°C and °F)\n" "/tempC - Read temperature in Celsius\n" "/tempF - Read temperature in Fahrenheit\n" "/status - Get sensor status") elif text == "/temp": temp_c = Bridge.call("get_temp_c") temp_f = Bridge.call("get_temp_f") send_message(chat_id, f"Temperature: {temp_c}°C = {temp_f}°F") elif text == "/tempC": result = Bridge.call("get_temp_c") send_message(chat_id, f"Temperature: {result}°C") elif text == "/tempF": result = Bridge.call("get_temp_f") send_message(chat_id, f"Temperature: {result}°F") elif text == "/status": result = Bridge.call("get_status") send_message(chat_id, result) else: send_message(chat_id, "Unknown command. Send /start for help.") time.sleep(1) App.run(user_loop=loop)

Detailed Instructions

  • Replace YOUR_TELEGRAM_BOT_TOKEN with your actual bot token from BotFather.
  • Replace YOUR_CHAT_ID with your Telegram chat ID.
  • Paste this Python code into your App's Python file (keep the same MCU sketch).
  • Click the Run button. Send /temp from Telegram, or heat the probe past 100°C to trigger the alert.

App Lab Console Output

DIYables_Apps
Stop
sketch.ino
1#include "Arduino_RouterBridge.h"
Serial Monitor
Python
[2026-04-29 09:10:00] Waiting for Telegram messages... [2026-04-29 09:10:15] 🔥 High temperature alert: 104.50°C / 220.10°F [2026-04-29 09:10:30] Received: /temp [2026-04-29 09:10:45] Received: /tempC
Telegram
Telegram 12:45
Welcome to Telegram!
ArduinoBot 10:19
Chatting with Arduino...
telegram-botfather
BotFather Yesterday
Your bot has been created.

ArduinoBot

bot
Today
/temp
10:15 AM ✓✓
Temperature: 24.50°C = 76.10°F
10:16 AM
/tempC
10:17 AM ✓✓
Temperature: 24.50°C
10:18 AM
/tempF
10:19 AM ✓✓
Temperature: 76.10°F
10:20 AM
/status
10:21 AM ✓✓
Temp: 24.50°C / 76.10°F
10:22 AM
🔥 High temperature alert: 104.50°C / 220.10°F
10:23 AM

OpenClaw

You can adapt the OpenClaw to this tutorial by refering the instruction on Arduino Uno Q - OpenClaw Tutorial

Project Ideas

You can build many useful projects with the MAX6675 and Arduino UNO Q:

  • Kiln or Oven Temperature Logger: Log temperature over time via Bridge and Python, and plot the firing/baking curve on a dashboard
  • Soldering Station Monitor: Track tip temperature and get a Telegram alert if it drifts outside your target range
  • BBQ / Smoker Thermometer: Clip the probe to your grill grate and get remote Telegram updates so you don't have to keep opening the lid
  • 3D Printer Hot End Watchdog: Use the MCU to trigger a relay via Bridge that cuts power if the hot end overheats beyond a safe limit
  • Multi-Zone Furnace Survey: Connect multiple MAX6675 modules to different digital pins and have the Python side poll each one via Bridge for a side-by-side comparison

Challenge Yourself

Ready to go further with the MAX6675 on Arduino UNO Q? Try these challenges:

  • Easy: Add a minimum/maximum tracker in the MCU sketch that remembers the highest and lowest temperature seen since boot.
  • Medium: Add a get_fault(String) Bridge function that reports whether the thermocouple probe is disconnected (the MAX6675 sets a fault bit when the probe is open), and have the Python side print a warning if it's ever true.
  • Advanced: Build a data logger: have the Python side write a timestamped CSV of temperature readings every 5 seconds, then add a Telegram /report command that sends back the highest reading from the last hour.

※ 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!