Overview
The MF52-103 is a 10K NTC thermistor — a temperature sensor distilled to its simplest possible form: a blue epoxy bead marked "103" with two legs. NTC stands for Negative Temperature Coefficient: its resistance is 10k ohm at 25°C and falls as things warm up (roughly 3.3k at 50°C, over 30k near 0°C). Put it in a voltage divider with a plain 10k resistor, read the midpoint with an ADC, run the Beta equation, and you have temperature in °C — no protocol, no library, no address.
What it gives up in convenience versus digital sensors, it returns in flexibility and speed: the tiny bead reacts to temperature changes in seconds, it works at any voltage your ADC uses, costs almost nothing, and the leads can be extended, sleeved, or epoxied right onto the thing you're measuring — a motor housing, a heatsink, a water line, a 3D-printer bed (that's exactly what printer bed sensors are).
The "103" marking is standard EIA code: 10 followed by 3 zeros — 10,000 ohms at 25°C. With the common Beta value of 3950 and the code below, expect accuracy around ±1-2°C across the 0-70°C range — comparable to a DHT11 but with far faster response and a fraction of the failure modes.
At a Glance
Specifications
| Parameter | Value |
| Type | MF52 epoxy-bead NTC thermistor |
| Nominal Resistance | 10k ohm at 25°C (code 103) |
| Beta (B25/50) | ~3950 K (±1%) |
| Resistance Tolerance | ±1% typical |
| Temperature Range | -40°C to +125°C |
| Accuracy (with Beta model) | ~±1-2°C over 0-70°C |
| Response Time | ~5-10 s in still air, <2 s in liquid (sleeved) |
| Dissipation Constant | ~1-2 mW/°C (keep sense current tiny) |
| Example Values | ~32.6k @ 0°C · 10k @ 25°C · ~3.6k @ 50°C · ~1.5k @ 75°C |
| Wiring | Series with fixed 10k as a voltage divider |
| Polarity | Non-polarized, two interchangeable terminals |
Pinout Diagram
Two terminals, no polarity — either leg can face either way. The standard hookup is a divider: one leg to 3.3V (or 5V on Arduino), the other leg to the ADC pin, and a fixed 10k resistor from the ADC pin to GND. Warmer bead → lower thermistor resistance → higher voltage at the ADC node.
Wiring Guide
All four platforms use the same divider — thermistor on top (to the supply), fixed 10k on the bottom (to GND), ADC at the junction. The code assumes exactly this arrangement.
Arduino Wiring
| Connection | Details |
|---|---|
| Thermistor leg 1 → 5V | Top of divider |
| Thermistor leg 2 → A0 | Divider midpoint |
| 10k resistor: A0 → GND | Bottom of divider (1% part best) |
ESP32 Wiring
| Connection | Details |
|---|---|
| Thermistor leg 1 → 3V3 | Top of divider |
| Thermistor leg 2 → GPIO 34 | ADC1, input-only pin |
| 10k resistor: GPIO 34 → GND | Bottom of divider |
Raspberry Pi Wiring
No analog input on the Pi, so the divider feeds an ADS1115 I2C ADC.
| Connection | Details |
|---|---|
| Thermistor leg 1 → Pin 1 (3.3V) | Top of divider |
| Thermistor leg 2 → ADS1115 A0 | Divider midpoint |
| 10k resistor: A0 → GND | Bottom of divider |
| ADS1115 VDD/GND/SDA/SCL | 3.3V / GND / Pin 3 / Pin 5 |
Raspberry Pi Pico Wiring
| Connection | Details |
|---|---|
| Thermistor leg 1 → 3V3(OUT) (pin 36) | Top of divider |
| Thermistor leg 2 → GP26 (pin 31) | ADC0 input |
| 10k resistor: GP26 → GND | Bottom of divider |
Code Examples
All four examples read the divider, convert to thermistor resistance, and apply the Beta equation (B=3950) to print °C and °F. Adjust SERIES_R to your measured fixed resistor for best accuracy.
Arduino
// MF52-103 10K NTC Thermistor - Arduino Example
// Divider: 5V - thermistor - A0 - 10k - GND
#include <math.h>
const int PIN = A0;
const float SERIES_R = 10000.0; // fixed resistor (measure yours!)
const float NOMINAL = 10000.0; // 10k at 25 C
const float B_COEFF = 3950.0;
const float T_NOMINAL = 25.0;
float readTempC() {
long total = 0;
for (int i = 0; i < 20; i++) { total += analogRead(PIN); delay(5); }
float adc = total / 20.0; // 0..1023
// Thermistor is on TOP of the divider:
// Vout = Vcc * R_fixed / (R_ntc + R_fixed) => R_ntc = R_fixed*(1023/adc - 1)
float rNtc = SERIES_R * (1023.0 / adc - 1.0);
float steinhart = logf(rNtc / NOMINAL) / B_COEFF // Beta equation
+ 1.0 / (T_NOMINAL + 273.15);
return 1.0 / steinhart - 273.15;
}
void setup() {
Serial.begin(9600);
Serial.println("MF52-103 thermistor ready");
}
void loop() {
float c = readTempC();
Serial.print("Temperature: ");
Serial.print(c, 1);
Serial.print(" C / ");
Serial.print(c * 9.0 / 5.0 + 32.0, 1);
Serial.println(" F");
delay(1000);
}
ESP32 (MicroPython)
# MF52-103 10K NTC Thermistor - ESP32 MicroPython Example
# Divider: 3V3 - thermistor - GPIO34 - 10k - GND
from machine import ADC, Pin
import math, time
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)
VCC = 3.3
SERIES_R = 10000.0
NOMINAL = 10000.0
B_COEFF = 3950.0
def read_temp_c():
total = 0
for _ in range(20):
total += adc.read_uv()
time.sleep_ms(5)
volts = total / 20 / 1_000_000
r_ntc = SERIES_R * (VCC / volts - 1.0) # thermistor on top
steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
+ 1.0 / (25.0 + 273.15))
return 1.0 / steinhart - 273.15
print("MF52-103 thermistor ready")
while True:
c = read_temp_c()
print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
time.sleep(1)
Raspberry Pi (Python + ADS1115)
#!/usr/bin/env python3
# MF52-103 10K NTC Thermistor - Raspberry Pi + ADS1115 Example
# Divider: 3.3V - thermistor - ADS1115 A0 - 10k - GND
# Install: pip3 install adafruit-circuitpython-ads1x15
import time, math
import board, busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
VCC, SERIES_R, NOMINAL, B_COEFF = 3.3, 10000.0, 10000.0, 3950.0
i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c)
ads.gain = 1
chan = AnalogIn(ads, ADS.P0)
def read_temp_c():
volts = sum(chan.voltage for _ in range(10)) / 10
r_ntc = SERIES_R * (VCC / volts - 1.0)
steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
+ 1.0 / (25.0 + 273.15))
return 1.0 / steinhart - 273.15
print("MF52-103 thermistor ready")
try:
while True:
c = read_temp_c()
print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
time.sleep(1)
except KeyboardInterrupt:
print("Stopped by user")
Raspberry Pi Pico (MicroPython)
# MF52-103 10K NTC Thermistor - Pico MicroPython Example
# Divider: 3V3 - thermistor - GP26 - 10k - GND
from machine import ADC
import math, time
adc = ADC(26)
VCC, SERIES_R, NOMINAL, B_COEFF = 3.3, 10000.0, 10000.0, 3950.0
def read_temp_c():
total = 0
for _ in range(20):
total += adc.read_u16()
time.sleep_ms(5)
volts = total / 20 / 65535 * VCC
r_ntc = SERIES_R * (VCC / volts - 1.0)
steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
+ 1.0 / (25.0 + 273.15))
return 1.0 / steinhart - 273.15
print("MF52-103 thermistor ready")
while True:
c = read_temp_c()
print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
time.sleep(1)