For 90% of microcontroller temperature sensing tasks—like monitoring battery packs, 3D printer hotends, or ambient room conditions—a 10K NTC thermistor sensor paired with a precision pull-up resistor is the undisputed default choice. They are cheap, highly sensitive, and require no external amplification. However, getting accurate readings requires understanding their non-linear analog output and compensating for microcontroller-specific ADC quirks. This guide provides the exact wiring, raw-to-unit math, and a concrete component pick to get your sensor reading accurately in Celsius.

The Sensing Principle: How NTC Thermistor Sensors Work

NTC (Negative Temperature Coefficient) thermistor sensors are semiconductor resistors whose resistance drops predictably as temperature rises. Unlike RTDs which use pure metals like platinum for a linear response, NTCs use sintered metal oxides (manganese, nickel, cobalt) to achieve a highly sensitive, non-linear exponential response.

Because the resistance change is massive compared to an RTD—for example, a standard 10K NTC might drop to 2.5K at 50°C—you get high resolution without needing expensive instrumentation amplifiers. The trade-off is that the curve is logarithmic, requiring mathematical linearization in your firmware to extract an accurate physical temperature.

Wiring and Pinout: Analog Output Setup

A thermistor itself outputs resistance, not voltage. To read it with a microcontroller, you must build a voltage divider. The output is a ratiometric analog voltage (0V to VCC) that scales inversely with temperature. As the thermistor heats up, its resistance drops, pulling the analog signal voltage closer to ground (assuming a high-side pull-up configuration).

Callout Tip: The ESP32 ADC Non-Linearity Trap
The ESP32's internal 12-bit ADC is notoriously non-linear below 0.15V and above 3.1V. If you use a standard 10K series resistor with a 10K NTC at 3.3V, high temperatures will push the voltage into the non-linear bottom rail. Using a 4.7K series resistor on the ESP32 shifts the voltage curve upward, keeping your readings in the accurate 0.5V - 2.8V sweet spot for most ambient and liquid sensing tasks.
Thermistor Voltage Divider Wiring & Supply Table
Microcontroller Logic Level ADC Resolution VCC Supply Range Series Resistor (R1) GPIO Pin
Arduino Uno / Nano 5.0V 10-bit (0-1023) 4.5V - 5.5V (USB/Reg) 10K Ω (1% tol) A0
ESP32 DevKit V1 3.3V 12-bit (0-4095) 3.1V - 3.4V (3V3 Pin) 4.7K Ω (1% tol) GPIO 34 (Input only)
Raspberry Pi Pico 3.3V 12-bit (0-4095) 3.2V - 3.4V (3V3 Out) 10K Ω (1% tol) GP26 (ADC0)

The Math: Converting Raw ADC Readings to Celsius

To turn the raw ADC integer into a usable Celsius value, you must pass the reading through two mathematical stages: calculating the thermistor's current resistance, and then applying the Steinhart-Hart equation (or the simplified Beta parameter equation).

Step 1: Calculate Thermistor Resistance ($R_{ntc}$)
Because the voltage divider is ratiometric, you don't actually need to calculate the exact voltage. You can derive resistance directly from the ADC reading. For a high-side pull-up resistor ($R_{series}$) and a low-side NTC thermistor:

R_ntc = R_series * (ADC_reading / (ADC_max - ADC_reading))

Example for ESP32 (12-bit, ADC_max = 4095, R_series = 4700):
If the raw reading is 2150 at room temperature:
R_ntc = 4700 * (2150 / (4095 - 2150)) = 4700 * (2150 / 1945) = 5195 Ω

Step 2: Resistance to Temperature (Beta Equation)
While the full Steinhart-Hart equation uses three coefficients, the simplified Beta ($\beta$) equation is accurate to within ±0.5°C for most hobbyist ranges (-20°C to +100°C). You need the Beta value from your thermistor's datasheet (typically 3950K or 3977K) and the nominal resistance ($R_0$) at 25°C (298.15K).

1 / T_kelvin = (1 / T_0) + (1 / Beta) * ln(R_ntc / R_0)
T_celsius = T_kelvin - 273.15

For a deeper dive into the semiconductor physics and multi-point Steinhart-Hart coefficients, refer to the Vishay NTC Thermistors Introduction guide, which details how manufacturers derive these curves during sintering.

Calibration, Scaling, and Interference Sources

Even with perfect math, real-world physics will introduce errors if you ignore calibration and interference. Here is what you must account for on the bench.

  • Calibration & Scaling: A standard 1% tolerance NTC thermistor can be off by up to ±1.5°C right out of the bag. For precision work, perform a 1-point ice-bath calibration. Submerge the sealed sensor in a stirred mix of distilled water and crushed ice (0.0°C). Record the raw ADC value, calculate the offset error, and hardcode this offset into your firmware's final Celsius calculation.
  • Self-Heating (Dissipation Constant): Current flowing through the voltage divider heats the thermistor. If your VCC is 5V and your total resistance is 10K, you are pushing 0.5mA, which can cause a 0.2°C self-heating error in still air. Keep the current below 100µA by using higher value resistors or pulsing the VCC supply via a MOSFET.
  • EMI and Long Leads: Thermistors are high-impedance analog devices. Running 3 feet of untwisted wire near a switching power supply or AC motor will induce noise that looks like rapid temperature jitter. Always use twisted-pair wire for the leads and solder a 100nF ceramic capacitor directly across the ADC input pin and GND to form a low-pass hardware filter.
  • ADC Reference Drift: If your microcontroller's VCC sags (e.g., an Arduino powered via a noisy USB hub), the analog reading will shift. Because the thermistor divider is ratiometric (powered by the same VCC as the ADC reference), this error naturally cancels out—provided you are reading the ADC against the default VCC reference, not an external fixed voltage reference.

Decision Path: Which Thermistor Sensor Should You Buy?

Not every temperature sensing task requires an NTC thermistor. Use the decision matrix below to determine if an NTC is the right tool, terminating in a specific, high-reliability part number for your bill of materials.

Sensor Selection Decision Tree
Application Scenario Required Range Recommended Sensor Type
Extreme heat (kilns, exhaust, >250°C) -200°C to +1250°C K-Type Thermocouple + MAX6675 amplifier
Medical / Human body core temp 30°C to 45°C Digital IR Sensor (MLX90614) or Medical-grade NTC
Industrial HVAC / Lab precision -50°C to +200°C PT100 RTD + MAX31865 amplifier
Ambient, Liquid, Battery, 3D Printer Bed -40°C to +125°C 10K NTC Thermistor (Glass Encapsulated)
The Concrete Pick: Vishay NTCLE100E3103JB0
If your application falls into the final row (ambient, liquid, battery monitoring), do not buy unbranded epoxy-coated beads from bulk marketplaces; they suffer from moisture ingress and Beta drift over time.

Buy the Vishay NTCLE100E3103JB0. It is a 10K ohm, 1% tolerance, glass-encapsulated NTC with a Beta of 3977K. The glass coating ensures long-term stability and waterproofing for liquid immersion. It costs roughly $0.60 in single quantities.

Pair it with: A Susumu RG1608P-103-B-T5 (10K Ω, 0.1% tolerance, 25ppm/°C thin-film resistor) for your voltage divider. This combination guarantees a baseline hardware accuracy of ±0.3°C before software calibration. For ESP32 implementations dealing with complex ADC calibration routines, consult the Espressif ADC Calibration API documentation to apply factory-burned eFuse corrections to your raw readings.