OC
OceanRemote
Low-code IoT platform
Back to Troubleshooting Hub

NTC Thermistor Wrong Reading

Your NTC thermistor temperature readings are inaccurate, non-linear, or inconsistent. The displayed temperature doesn't match the actual temperature. This guide covers voltage divider design, Beta value selection, Steinhart-Hart equation calibration, and ADC configuration for ESP32, ESP8266, and Pico W.

Last updated: April 22, 2026 | 12 min read

Symptoms

  • Temperature readings consistently off by several degrees
  • Error changes with temperature
  • Readings inaccurate at room temperature but correct at extreme temperatures
  • NTC resistance doesn't match datasheet values
  • Temperature jumps or fluctuates erratically
  • Different NTC sensors give different readings at same temperature
  • OceanRemote offset doesn't fix error across entire temperature range

Common Causes

  1. Wrong Beta Value () Most common issue. NTC thermistors have different Beta values . Using wrong Beta causes large non-linear errors
  2. Incorrect Voltage Divider Resistor Series resistor value mismatch with NTC range. 10k NTC needs 10k series resistor for best linearity
  3. ADC Resolution/Saturation ADC reading at extremes indicates voltage divider out of range
  4. Self-Heating of NTC Too much current through NTC warms the sensor, reading high
  5. Poor Thermal Contact NTC not properly contacting measured surface
  6. ADC Reference Voltage Variation ESP32/Pico W 3.3V rail may not be exactly 3.3V
  7. Noise on ADC Input No capacitor filtering on ADC pin

Common NTC 10k Specifications

Parameter Value Notes
Resistance at 25C 10k 1% or 5% Most common value ()
Beta Value () 3435, 3950, 4100 Check datasheet! (!)
Temperature Range ()-40C to +125C Varies by model ()
Dissipation Constant ()~2-10 mW/C Self-heating affects accuracy ()
Thermal Time Constant ()5-15 seconds Response time ()
B Tolerance 1-5% Causes non-linear error ()

Most cheap NTCs have Beta=3950 . Check your datasheet.

10k NTC Resistance Reference

Temperature Resistance () Voltage Divider Output ADC Value
-10C~55,0000.50V~620
0C~32,0000.80V~990
10C~19,9001.10V~1365
20C~12,5001.45V~1800
25C10,0001.65V~2048
30C~8,0001.85V~2295
40C~5,3002.20V~2730
50C~3,6002.45V~3040
60C~2,5002.65V~3290
70C~1,8002.80V~3475
80C~1,3002.90V~3600
100C~7003.05V~3785

ADC should NOT be near 0 or 4095. Adjust series resistor if needed.

Voltage Divider Circuit

        3.3V
         
         
    
       NTC      10k NTC 
    
         
          ADC Pin 
         
    
      R_fixed   10k fixed resistor 
    
         
        GND

Vout = Vref * )
R_ntc = R_fixed *  - 1)

Step-by-Step Fixes

1. Verify Beta Value in OceanRemote

Most common fix use correct Beta value for your NTC:

  • Check your NTC datasheet for Beta value
  • Common values: 3435, 3950, 4100
  • In OceanRemote firmware generation, select correct Beta value
  • If unsure, try 3950 first
  • Test at known temperatures
  • Adjust Beta up or down if readings are consistently off

2. Calculate Beta from Two Temperature Points

Measure actual Beta value for your specific NTC:

// Beta formula:  = ln / 
// R1 = resistance at T1 
// R2 = resistance at T2 

// Example:
// Measure resistance at 25C : R1 = 10,000
// Measure resistance at 85C : R2 = 1,400 (typical)
// 
//  = ln / 
//  = ln / 
//  = 1.966 / 0.000562 = 3,498 

// Use this Beta value in OceanRemote configuration

3. Verify Voltage Divider Resistor Value

Series resistor should match NTC resistance at target temperature:

  • For 10k NTC, use 10k 1% series resistor
  • For best linearity, R_series = R_ntc at target temperature range midpoint
  • For -20C to +80C, use 10k
  • For high temperatures only, use lower series resistor
  • For low temperatures only, use higher series resistor
  • Measure actual series resistor with multimeter

4. Prevent Self-Heating

Excessive current through NTC heats the sensor:

  • Power NTC only when taking readings
  • Use higher series resistor to reduce current
  • Take readings less frequently
  • Check if temperature reading drops when power is removed
  • For 3.3V, 10k series gives ~0.33mA at 0C, ~1.7mA at 100C
// Read NTC only when needed 
unsigned long lastNTCRead = 0;
const unsigned long NTC_READ_INTERVAL = 5000;  // Read every 5 seconds

void loop() {
  if (millis() - lastNTCRead >= NTC_READ_INTERVAL) {
    lastNTCRead = millis();
    
    // Power NTC through GPIO pin (optional)
    // digitalWrite;
    // delay;  // Allow settling
    
    readNTC();  // Take measurement
    
    // digitalWrite;  // Turn off to save power
  }
}

5. Add Capacitor Filtering

Reduce ADC noise with capacitor:

// Hardware fix - Add 0.1F - 1F capacitor between ADC pin and GND
// This filters high-frequency noise

// Software filter - Average multiple readings
float readNTCAverage {
  long sum = 0;
  for  {
    sum += analogRead(pin);
    delayMicroseconds;
  }
  return sum / samples;
}

6. Calibrate Using OceanRemote Offset

After fixing hardware and Beta, use offset calibration:

  • Place NTC and reference thermometer in ice water
  • Wait 10 minutes for temperature to stabilize
  • Record OceanRemote temperature reading
  • Calculate offset = Reference - Reading
  • Enter offset in OceanRemote dashboard
  • Verify at room temperature
  • If error persists, adjust Beta value further

7. Check ADC Reference Voltage

ESP32/Pico W 3.3V may not be exactly 3.3V:

// Measure actual 3.3V pin voltage with multimeter
// Let's say you measure 3.28V 

// Use actual reference voltage in calculations
const float ACTUAL_VREF = 3.28;  // Replace with your measured value

// In Steinhart-Hart, ADC to voltage conversion:
float voltage =  / 4095.0) * ACTUAL_VREF;

// Then calculate resistance:
float r_ntc = R_SERIES *  - 1.0);

Steinhart-Hart Equation

// Steinhart-Hart equation: 1/T = A + Bln + C)
// For 10k NTC :
// A = 0.001129148
// B = 0.000234125  
// C = 0.0000000876741

float readNTCTemperature {
  // Read ADC and calculate resistance
  int adc = analogRead(pin);
  float voltage =  * 3.3;
  float r_ntc = seriesResistor *  - 1.0);
  
  // Steinhart-Hart calculation
  float logR = log(r_ntc);
  float steinhart = A +  + ;
  float temperatureK = 1.0 / steinhart;
  float temperatureC = temperatureK - 273.15;
  
  return temperatureC;
}

// OceanRemote uses Steinhart-Hart with your selected Beta value
// Beta approximation: B = ) * ln
// Less accurate than Steinhart-Hart, but simpler

Prevention Tips

  • Always use 1% tolerance series resistor for voltage divider
  • Choose NTC with known Beta value from datasheet
  • Add 0.1F capacitor between ADC pin and GND
  • Average 16-64 samples to reduce noise
  • Prevent self-heating by reading NTC less frequently
  • Calibrate at two temperatures
  • Use OceanRemote's offset calibration for final adjustment

Related Issues

Frequently Asked Questions

Q: Why does my NTC read correctly at 25C but wrong at 0C and 100C?

A: Beta value is incorrect. Beta determines the curve shape. A correct Beta gives accurate readings across the entire range. Use two-point calibration to calculate correct Beta for your specific NTC.

Q: Can I use 5V for NTC voltage divider?

A: Not directly. ESP32/Pico W ADC input maximum is 3.3V. Using 5V requires a voltage divider to reduce output below 3.3V, or use 3.3V for both reference and ADC. 3.3V is recommended.

Q: OceanRemote offset calibration works, but why is Beta still important?

A: Single offset only corrects error at one temperature. If error changes with temperature , offset won't fix all temperatures. Correct Beta ensures accuracy across entire range; offset then fine-tunes the last 0.5C.

Still having NTC issues? Contact Support or return to the Troubleshooting Hub.