# I2C pull-up resistors: which value to use on ESP32 and Arduino

> Choose I2C pull-up resistor values: about 4.7 kohm for 100 kHz, lower for 400 kHz, and when too many modules make the bus fail.

Canonical: https://roboticsengineering.in/fix/esp32-i2c-pull-up-resistor-values/ | Published: 2026-11-03 | Updated: 2026-11-04

**A value near 4.7 kohm to 10 kohm to 3.3 V or 5 V works for most short I2C buses at 100 kHz.** Many breakout boards already include pull-ups.

## What the message means

I2C lines are open-drain, so resistors pull them high. Too weak a pull-up gives slow edges and errors; too strong a pull-up asks too much current from the devices.

## Fix it in this order

1. Check whether your modules already carry pull-ups. Several modules in parallel put their resistors in parallel too, lowering the total value.
2. If the bus is unreliable, measure or calculate the combined value. Going far below about 1 kohm is too strong for most devices.
3. For 400 kHz or longer wires, use a lower value such as 2.2 kohm to 3.3 kohm, within the device limits.
4. Pull up to the logic voltage of the weakest device, and use a level shifter when mixing 3.3 V and 5 V devices.
5. Keep wires short and run a scanner after any change.

## Why it happens

I2C lines need pull-up resistors because the devices only pull them low. Many breakout boards already have pull-ups, and several boards in parallel lower the total resistance, which can load the bus.

A common value is 4.7 kΩ to 3.3 V; 2.2 kΩ is used for faster speeds or longer wires, and 10 kΩ for slow buses with short wires. Do not pull up to 5 V on an ESP32 bus. If several breakouts are connected, check whether you have too many pull-ups in parallel.

## If you see this, do this

| You see | Do this |
| --- | --- |
| Works with one module, fails with three | Check the combined pull-up and the wire length. |
| No devices found | See the I2C device not found page. |

## Related

[I2C device not found](https://roboticsengineering.in/fix/i2c-device-not-found-arduino-esp32/), [ESP32 I2C pins](https://roboticsengineering.in/fix/esp32-default-i2c-spi-pins/).

Last reviewed: November 2026. These are the usual causes and the order that finds them fastest. Test on your own board; clones and cables differ.

## Why this happens

I2C devices pull the lines low and let go; they never drive them high. A resistor to the supply pulls each line high again, and the rise time depends on that resistor and the total capacitance of the wires and pins. The standard allows a rise time of 1000 ns at 100 kHz and 300 ns at 400 kHz. A resistor that is too high makes the edges too slow; one too low forces the devices to sink more current than they are specified for.

Both limits can be calculated. The lower limit comes from the current a device can sink while keeping the line low, and the upper limit from the rise time and the bus capacitance. Boards with their own resistors add them in parallel, which lowers the total value.

## How to confirm the cause

- List every module on the bus and note whether it has pull-ups; the schematic or a visual check of the small resistors will show.
- Measure the resistance between SDA and the supply with everything powered off. The reading is the combined pull-up.
- If you have a scope, look at the rising edge. A slow, curved rise means the pull-up is too weak or the wires are too long.
- Disconnect modules one at a time. If the bus starts working at a point, the total capacitance or the combined resistance changed.
- Check that the pull-ups go to the logic voltage of the weakest device.

## Worked example

Calculating both limits for a 3.3 V bus at 100 kHz with 100 pF of capacitance:

```
Minimum = (Vcc - Vol) / Iol = (3.3 - 0.4) / 0.003 = 967 ohm (about 1 k)
Maximum = tr / (0.8473 x C) = 1000 ns / (0.8473 x 100 pF) = 11.8 k

So 4.7 k is in the middle of 1 k to 11.8 k.
Three modules with 4.7 k each in parallel: 4.7 / 3 = 1.57 k.
At 400 kHz: 300 ns / (0.8473 x 100 pF) = 3.5 k maximum.
```

## Common mistakes

- Counting only the pull-ups you added and forgetting those on the modules.
- Relying on the internal pull-ups of the microcontroller, which are weak (tens of kilohms).
- Pulling an ESP32 bus up to 5 V.
- Using 10 k on a long cable at 400 kHz.
- Adding pull-ups at both ends of a long cable, then again on every module.

## If this did not fix it

- Two devices with the same address on the bus, so scans find one or nothing.
- Wires that are too long or run beside motor leads, adding noise and capacitance.
- A device that holds the bus low after a reset; power-cycle the whole bus.
