The ADS1115 is one of the easiest ways to improve analogue measurements on an ESP32. It provides a dedicated 16-bit delta-sigma ADC over I²C, four single-ended inputs or two differential input pairs, a programmable gain amplifier and selectable data rates up to 860 samples per second.
That makes it useful when the ESP32’s internal ADC is not stable enough for a project, when you need to measure small sensor voltages, when several analogue channels are required, or when you want the same calibrated measurement behaviour across different ESP32 boards.
ESPHome has native ADS1115 support, so each analogue channel can appear directly in Home Assistant as a voltage sensor or can be converted into pressure, current, level, light or another engineering value using filters.
This guide covers safe 3.3 V wiring, I²C addresses, gain selection, single-ended and differential inputs, calibration, voltage dividers, multiple ADS1115 boards and the common mistakes that cause clipped or misleading readings.
What the ADS1115 Actually Provides
Texas Instruments specifies the ADS1115 as a 16-bit, I²C-compatible, delta-sigma ADC with an internal reference, oscillator, input multiplexer, programmable gain amplifier and comparator. It can sample at data rates from 8 to 860 samples per second.
| Feature | ADS1115 |
|---|---|
| Resolution | 16-bit |
| Inputs | 4 single-ended or 2 differential |
| Interface | I²C |
| Default address | 0x48 |
| Address range | 0x48 to 0x4B |
| Programmable data rate | 8 to 860 SPS |
| Supply voltage | 2.0 to 5.5 V |
| PGA full-scale ranges | ±6.144 V to ±0.256 V |
| ESPHome support | Native ads1115 component |
The ADS1115 is intended for relatively slow precision measurements. It is not an oscilloscope ADC, audio ADC or high-speed waveform digitiser. Its maximum data rate of 860 SPS is excellent for environmental sensors, analogue pressure transducers, battery dividers and many current-sensing applications, but not for tens-of-kilohertz signals.
ADS1115 vs the ESP32 Internal ADC
The ESP32 already contains ADC hardware, so an external converter is not always necessary. For a potentiometer, joystick or rough battery reading, native ADC may be sufficient.
The ADS1115 becomes attractive when repeatability and low-level resolution matter. Its own reference and programmable input range make it easier to achieve consistent scaling, and the I²C interface keeps analogue routing away from many of the ESP32’s internal ADC limitations.
The trade-off is speed. The ADS1115 tops out at 860 samples per second, while the ESP32’s internal ADC can be read much faster. Choose based on the signal, not simply on the larger bit number.
Wiring ADS1115 to an ESP32
For a classic ESP32 DevKit, GPIO21 and GPIO22 are convenient I²C examples. Other valid pins can be used if your board assigns I²C elsewhere.
| ADS1115 | ESP32 | Purpose |
|---|---|---|
| VDD / VCC | 3.3 V | ADC and logic power |
| GND | GND | Common reference |
| SDA | GPIO21 | I²C data |
| SCL | GPIO22 | I²C clock |
| ADDR | GND | Default 0x48 address |
| A0-A3 | Analogue signals | Measurement inputs |
| ALERT/RDY | Optional | Comparator / conversion-ready output |
Powering the module from 3.3 V is the simplest arrangement because the I²C pull-ups and analogue input limits then live in the same voltage domain as the ESP32.
Many breakout boards include SDA and SCL pull-up resistors. If several I²C modules are connected in parallel, remember that all those resistors also appear in parallel. More pull-ups are not automatically better.
The Most Important Voltage Limit
The ADS1115 programmable gain settings include a nominal ±6.144 V full-scale range. That does not mean you can safely apply 6.144 V to an ADS1115 powered from 3.3 V.
Texas Instruments explicitly states that the analogue input pins must not be driven above approximately VDD + 0.3 V. Therefore a 3.3 V-powered device should not be fed 5 V or 6 V directly, regardless of the selected PGA range.
The PGA setting controls ADC scaling. It does not override the electrical limits of the input pin.
ESPHome Minimal Configuration
esphome:
name: esp32-ads1115
friendly_name: ESP32 ADS1115
esp32:
board: esp32dev
logger:
api:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
i2c:
sda: GPIO21
scl: GPIO22
scan: true
ads1115:
- address: 0x48
id: ads1115_hub
sensor:
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A0_GND
gain: 4.096
name: "ADS1115 A0 Voltage"
update_interval: 5s
With the ADDR pin tied to ground, the expected address is 0x48. Keep scan: true enabled while commissioning the hardware so the boot log confirms that the device is actually present.
ADS1115 I²C Addresses
The ADDR pin provides four selectable addresses without an extra multiplexer.
| ADDR connection | I²C address |
|---|---|
| GND | 0x48 |
| VDD | 0x49 |
| SDA | 0x4A |
| SCL | 0x4B |
This allows four ADS1115 devices on one I²C bus, giving as many as sixteen single-ended analogue inputs. If you need still more identical-address I²C branches, see our TCA9548A I²C Multiplexer with ESP32 guide.
Gain Settings and Resolution
ESPHome’s gain value selects the ADS1115 full-scale range. A smaller full-scale range gives finer voltage steps, but it also clips sooner.
| ESPHome gain | Full-scale range | LSB size |
|---|---|---|
| 6.144 | ±6.144 V | 187.5 µV |
| 4.096 | ±4.096 V | 125 µV |
| 2.048 | ±2.048 V | 62.5 µV |
| 1.024 | ±1.024 V | 31.25 µV |
| 0.512 | ±0.512 V | 15.625 µV |
| 0.256 | ±0.256 V | 7.8125 µV |
For a 0–3.3 V signal, gain: 4.096 is usually a sensible starting point. A 2.048 V range would clip above roughly 2.048 V, while the 6.144 V range wastes some resolution when the input can never exceed 3.3 V.
For a low-level sensor that never exceeds 200 mV, the 0.256 V range provides much finer scaling.
Do not choose gain solely to maximise the displayed number of decimal places. Noise, sensor accuracy, wiring, reference behaviour and source impedance can dominate long before the theoretical LSB becomes the real measurement uncertainty.
Four Single-Ended Inputs
The simplest use is to measure each channel relative to ground.
sensor:
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A0_GND
gain: 4.096
name: "Analog A0"
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A1_GND
gain: 4.096
name: "Analog A1"
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A2_GND
gain: 4.096
name: "Analog A2"
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A3_GND
gain: 4.096
name: "Analog A3"
In single-ended mode, the ADS1115 reports each input relative to GND. This is appropriate for potentiometers, analogue-output modules and resistor-divider measurements where all signals share the same reference.
Differential Measurements
Differential mode measures the voltage difference between two analogue inputs rather than measuring one input against ground. ESPHome exposes the supported ADS1115 multiplexer combinations.
A common example is A0 minus A1:
sensor:
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A0_A1
gain: 0.256
name: "Differential A0-A1"
update_interval: 1s
If A0 is 120 mV above A1, the result is approximately +0.120 V. If A0 is below A1, the converter can report a negative differential result.
Differential measurement is useful for small shunt voltages and bridge-style sensors, but both physical input pins must still remain within the permitted common-mode and absolute input limits. A small difference between two dangerously high voltages is still unsafe.
Supported Differential Pairings
The ADS1115 input multiplexer supports A0-A1, A0-A3, A1-A3 and A2-A3 differential combinations in addition to the four single-ended measurements.
This is not equivalent to four completely independent differential ADC channels. If a project needs several differential channels simultaneously, plan the mux combinations carefully or use multiple ADCs.
Measuring a Battery with a Voltage Divider
A battery voltage above the ADS1115 supply must be divided before reaching the analogue input. For example, a 100 kΩ resistor from the battery to A0 and a 33 kΩ resistor from A0 to ground gives a division ratio of approximately 4.03:1.
A 12.6 V battery would then produce about 3.13 V at the ADC input, which fits a 3.3 V-powered ADS1115.
The ESPHome sensor can scale the measured ADC voltage back to battery voltage:
sensor:
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A0_GND
gain: 4.096
name: "Battery Voltage"
update_interval: 10s
filters:
- multiply: 4.0303
unit_of_measurement: "V"
accuracy_decimals: 2
The theoretical divider ratio is (100k + 33k) / 33k = 4.0303. Real resistor tolerances shift that value, so calibrate the finished circuit against a trustworthy multimeter.
Use Resistors Appropriate for the Source
Very high resistor values minimise battery drain but also increase source impedance and susceptibility to noise. The ADS1115 input is not an ideal infinite-impedance voltmeter. For precision work, choose divider values with the ADC input characteristics in mind and add a small capacitor across the lower divider resistor if a low-pass filter is helpful.
Two-Point Calibration in ESPHome
If the raw ADC reading is linear but slightly offset or scaled, ESPHome’s calibrate_linear filter is convenient.
Suppose a calibrated multimeter shows 1.000 V when the ADS1115 reports 0.986 V, and 3.000 V when the ADS1115 reports 2.962 V. You can map those points directly:
filters:
- calibrate_linear:
- 0.986 -> 1.000
- 2.962 -> 3.000
Use calibration points that span the actual operating range. Calibrating a 0–3 V sensor using two points only a few millivolts apart gives little confidence in the full-range result.
Calibration can correct repeatable scale and offset errors. It cannot fix unstable power, a floating input, clipping, a poor sensor or excessive electrical noise.
Converting Voltage into a Real Measurement
Many analogue sensors output a voltage representing pressure, level, force or another physical quantity. Once the ADS1115 voltage is stable, ESPHome can convert it into the engineering unit.
For example, if a pressure sensor produces 0.5 V at 0 bar and 2.5 V at 10 bar:
sensor:
- platform: ads1115
ads1115_id: ads1115_hub
multiplexer: A0_GND
gain: 4.096
name: "Water Pressure"
unit_of_measurement: "bar"
accuracy_decimals: 2
filters:
- calibrate_linear:
- 0.50 -> 0.0
- 2.50 -> 10.0
- clamp:
min_value: 0.0
max_value: 10.0
Home Assistant then receives pressure directly rather than a generic voltage.
Sample Rate vs Update Interval
These are different settings. sample_rate configures how quickly the ADS1115 performs an ADC conversion. update_interval determines how often ESPHome publishes a sensor reading.
A Home Assistant dashboard does not need 860 updates every second. For a battery or tank level, publishing every 5–60 seconds is often enough even if the converter itself uses a faster conversion setting.
Current ESPHome defaults the ADS1115 sensor sample rate to 860 SPS and the publishing interval to 60 seconds.
Continuous Mode
ESPHome normally uses single-shot conversions. The ADS1115 hub also has a continuous_mode option.
ads1115:
- id: ads1115_hub
address: 0x48
continuous_mode: true
ESPHome specifically notes that continuous mode should be enabled when using the ADS1115 as the voltage sampler for its CT Clamp component. That use case needs repeated samples of an AC waveform rather than a single slow DC reading.
For ordinary battery, potentiometer or analogue sensor measurements, leaving continuous mode off is generally appropriate.
Filtering Noisy Analogue Readings
Analogue signals rarely sit perfectly still. ESPHome provides filters that can smooth the value before it reaches Home Assistant.
filters:
- median:
window_size: 5
send_every: 5
send_first_at: 5
A median filter is useful for occasional spikes. A moving average can be better for continuous random noise. Do not over-filter signals where a rapid change matters, such as an alarm threshold.
Multiple ADS1115 Boards
ads1115:
- id: adc_1
address: 0x48
- id: adc_2
address: 0x49
sensor:
- platform: ads1115
ads1115_id: adc_1
multiplexer: A0_GND
gain: 4.096
name: "ADC 1 Channel 0"
- platform: ads1115
ads1115_id: adc_2
multiplexer: A0_GND
gain: 4.096
name: "ADC 2 Channel 0"
Tie the second board’s ADDR pin to VDD to select 0x49. Up to four native addresses can coexist on the same bus.
ADS1115 vs ADS1015
ESPHome’s ADS1115 sensor platform can also work with the ADS1015 when resolution: 12 bits is selected.
| Device | Resolution | Maximum sample rate | Good fit |
|---|---|---|---|
| ADS1115 | 16-bit | 860 SPS | Slower precision measurements |
| ADS1015 | 12-bit | 3300 SPS | Faster measurements where 12-bit resolution is sufficient |
The ADS1015 is not simply a worse ADS1115. If a project values sample rate more than the additional resolution, the 12-bit part can be the better device.
What the 16-Bit Number Really Means
A 16-bit ADC provides 65,536 digital codes across its bipolar full-scale span. In practice, usable accuracy is not automatically sixteen perfect bits. Noise, offset, gain error, resistor tolerance and sensor accuracy all contribute.
The smallest theoretical code step is useful for understanding scaling, but it should not be confused with guaranteed real-world measurement accuracy. Displaying six decimal places in Home Assistant does not create six-decimal-place accuracy.
Troubleshooting: ADS1115 Does Not Appear
- Confirm the module has 3.3 V power and a common ground.
- Check SDA and SCL are not reversed.
- Enable
scan: trueand look for 0x48, 0x49, 0x4A or 0x4B. - Check how the breakout connects the ADDR pin.
- Inspect whether multiple breakout-board pull-ups have made the bus resistance too low.
- Try 100 kHz I²C while diagnosing long or poor wiring.
- Disconnect other I²C modules temporarily to isolate address or bus faults.
Troubleshooting: Reading Is Stuck at the Maximum
A reading that stops increasing usually indicates clipping. Check the selected gain first. A gain: 2.048 setting cannot represent a 3 V signal correctly.
Then verify the physical pin voltage with a multimeter. If the input exceeds the ADS1115 electrical limit, disconnect it and correct the divider or conditioning circuit rather than merely selecting a larger PGA range.
Troubleshooting: Reading Jumps When Nothing Is Connected
An unconnected analogue input is floating. It can pick up mains hum, nearby digital edges and static charge, so apparently random numbers are normal.
Connect the input to a defined source or add an appropriate bias resistor. Software filtering is not a substitute for a defined electrical input.
Troubleshooting: Voltage Is Consistently Wrong
- Measure the voltage directly at the ADS1115 input pin, not only at the sensor output.
- Check the resistor-divider ratio with real resistor values.
- Confirm the correct gain range.
- Verify the ESPHome multiplexer channel matches the physical input.
- Check whether the sensor output needs buffering because of source impedance.
- Calibrate only after the raw circuit is electrically correct and stable.
ADS1115 with Home Assistant
There is no separate Home Assistant ADS1115 integration. ESPHome reads the ADC and exposes the resulting sensor entities through its native API.
This is useful because conversion and filtering can remain local on the ESP32. Home Assistant receives a clean entity such as battery voltage, tank pressure or light level instead of having to understand the ADC’s raw scale.
When ADS1115 Is a Good Choice
- Battery and DC voltage monitoring: with a correctly designed divider.
- Analogue pressure and level sensors: especially when a calibrated engineering value is required.
- Low-level differential signals: where the programmable gain range is useful.
- Several slow analogue channels: four single-ended inputs from one I²C address.
- CT clamp sampling in ESPHome: with continuous mode enabled as required by the CT Clamp component.
- Projects needing more consistent ADC behaviour: across different ESP32 boards.
When to Use Something Else
- Fast waveform capture: 860 SPS is too slow for many high-frequency signals.
- Audio: use a dedicated audio ADC or codec.
- High-voltage measurement: the ADS1115 still requires safe isolation and signal conditioning.
- Many digital inputs: use an MCP23017 instead.
- PWM outputs: use ESP32 LEDC or a PCA9685.
- Current measurement with built-in shunt processing: an INA226, INA260 or similar monitor may be more direct.
Practical Recommendations
- Power the ADS1115 from 3.3 V when connecting directly to an ESP32 I²C bus.
- Use gain: 4.096 as a practical starting point for 0–3.3 V inputs.
- Never use the ±6.144 V range as an excuse to exceed the physical input-voltage limit.
- Use differential mode when you genuinely need the voltage difference between two inputs.
- Calibrate the complete circuit, including voltage dividers and sensors, rather than calibrating the ADC in isolation.
- Use filters only after fixing electrical instability.
- Enable continuous mode for ESPHome CT Clamp use.
- Keep analogue wiring away from relay coils, switching regulators and other noisy conductors where practical.
Final Thoughts
The ADS1115 fills an important gap in ESP32 projects: it provides a simple, well-supported route to higher-resolution and more predictable analogue measurements without complex firmware.
Its biggest strengths are the four-channel multiplexer, programmable gain amplifier and native ESPHome support. Its biggest traps are equally clear: the PGA full-scale value is not the same thing as the safe pin voltage, sixteen digital bits do not guarantee sixteen bits of real-world accuracy, and the device is designed for slow precision signals rather than high-speed capture.
Used within those limits, the ADS1115 is an excellent building block for battery monitoring, analogue pressure sensors, resistive sensor interfaces, CT clamp projects and calibrated Home Assistant instrumentation.
For current configuration syntax, see the ESPHome ADS1115 documentation. Device limits, gain ranges and electrical specifications are available from the Texas Instruments ADS1115 product page.