Hardware Matrix

Is ADS1115 16-bit 4-Channel Precision ADC Compatible with Home Assistant (ESPHome)?

Verdict Badge
VERDICT: [ COMPATIBLE (MANUAL CONFIG REQUIRED) ]
Protocol: I2C Bus / 3.3V
Bridge Needed: NO

Electrical Specifications

Always confirm pin assignments against the manufacturer datasheet before wiring.

Not yet documented. Electrical specifications for this device have not been confirmed against a manufacturer datasheet, so none are shown here rather than showing estimates. Submit verified specifications if you have the datasheet to hand.

Compatibility Overview

16-bit high-resolution ADC expander adding 4 precision analog measurement channels with programmable gain amplifier.

Wiring ADS1115 16-bit 4-Channel Precision ADC to ESP32

Module pin ESP32 Note
VDD 3V3 No input may go above VDD + 0.3V whatever the gain, so the supply sets the measurable range. Breakouts pull SDA and SCL up to VDD, so 3.3V also keeps the bus at ESP32 levels.
GND GND
SCL GPIO22
SDA GPIO21
ADDR GND 0x48, as in the config. To VDD is 0x49, to SDA 0x4A, to SCL 0x4B.
ALRT unconnected The comparator and conversion-ready output. ESPHome does not use it.
A0 the signal Measured against GND (multiplexer A0_GND). A1–A3 are free for more sensor blocks.

Host pins are the ones the configuration on this page uses. Move a pin here and change it in the YAML — they are documented together so they cannot disagree.

Technical Specification Matrix

Feature / Attribute Specification / Status
Hardware Protocol I2C Bus / 3.3V
Bridge Required NO
Border Router Needed None
Hardware Capabilities & Peripherals
Analog Channel A0 (V) Channel A1 (V) Channel A2 (V) Channel A3 (V)

Note: these entities come from the ESPHome configuration you flash — each one needs its matching component in that YAML before it appears.

Pairing Complexity Intermediate
Factory Reset Instruction Press BOOT button while resetting.

Wire, Flash, Adopt, Check

1

Wire it up

Follow the wiring table above. The ESP32 pins there are the ones the configuration uses, so if you move one, change it in both places.

2

Flash the configuration

Create a new device in the ESPHome dashboard (the Home Assistant add-on) and paste the configuration below into it, or save it as emb_esp32_ads1115_ard.yaml and run esphome run emb_esp32_ads1115_ard.yaml. The first flash goes over USB. If it is not detected, press BOOT button while resetting to put it in download mode. Every update after that is over the air.

3

Adopt it in Home Assistant

Settings → Devices & Services. A node on the same network shows up as a discovered ESPHome device within a minute of joining Wi-Fi; choose Configure and enter the API encryption key from your secrets.yaml. If discovery does not find it, add the ESPHome integration by hand with the node's IP address.

4

Check it works

The I2C scan at boot lists 0x48. A0 tied to GND reads close to 0V, and A0 on the 3.3V rail reads close to 3.3V and agrees with a multimeter. No 0x48 in the scan is SDA and SCL swapped or ADDR not at ground. A value that never moves is the multiplexer pointing at a different channel from the one wired. A reading a steady few millivolts low on every channel can be a clone chip, and calibrates out.

ESPHome Configuration

Starting configuration for ADS1115 16-bit 4-Channel Precision ADC on ESP32. Untested on hardware — verify wiring and pins against your own board.

# ESPHome configuration for ADS1115 16-bit 4-Channel Precision ADC
# Host: ESP32. Pin numbers below are host-side defaults — any free
# GPIO will do, and you should change them to match your own wiring.

esphome:
  name: emb_esp32_ads1115_ard
  friendly_name: "ADS1115 16-bit 4-Channel Precision ADC"

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

i2c:
  id: i2c_main
  sda: GPIO21
  scl: GPIO22
  scan: true

# The ADDR pin selects 0x48-0x4B. 0x48 is ADDR tied to GND, which is how
# most breakouts ship.
ads1115:
  - address: 0x48

sensor:
  - platform: ads1115
    multiplexer: 'A0_GND'
    gain: 6.144
    name: "ADC Channel A0"
    update_interval: 60s

Before you flash: the !secret values come from your secrets.yaml, and the GPIO numbers are host-side defaults rather than properties of this part — change them to match how you actually wired it.

If the device is not found: it is usually the I2C address, not the config. Many breakouts strap their address with solder jumpers, so two boards of the same part can differ. This config leaves scan: true on — the boot log lists every address actually present on the bus, and you can copy the right one from there.

What Appears in Home Assistant

ADC Channel A0
sensor

Volts on A0, single-ended, every 60s. Scale it into the real quantity with a multiply or calibrate_linear filter.

Channels A1–A3
sensor

Optional, not in the config: one more sensor block each, with multiplexer A1_GND, A2_GND or A3_GND. The differential pairs are A0_A1, A0_A3, A1_A3 and A2_A3.

Known Problems and Fixes

gain: 6.144 wastes codes at 3.3V

The gain value is the full-scale range, not a voltage the pin can take. At a 3.3V supply nothing above 3.6V may reach an input, so gain: 6.144 leaves nearly half the positive codes unused. gain: 4.096 still covers 0–3.3V, in 125µV steps instead of 187.5µV.

Single-ended is 15 bits

The 16 bits span negative to positive full scale. Measured against ground a signal cannot go negative, so single-ended readings use half the codes: 32,768 steps from zero to full scale.

Differential does not mean negative volts

A0_A1 reads the difference between two pins and can come out negative, but each pin must still stay between GND − 0.3V and VDD + 0.3V. An AC signal centred on ground needs biasing up before it reaches the chip.

High-impedance sources read low

The input stage is switched-capacitor and looks like a few megohms to whatever drives it. A divider built from megohm resistors — a common way to watch a 12V battery — is loaded by it and reads low. Keep divider resistors in the tens of kilohms, or buffer the signal.

ESPHome samples at 860 per second

The component defaults to the chip's fastest rate. At the more sensitive gains noise grows with rate, so for a slow signal — a battery, a pressure transducer, a soil probe — sample_rate: 128 or lower is the quieter setting.

Behind ct_clamp it needs continuous mode

By default the component triggers one conversion per update. To use the ADS1115 as the ADC for ct_clamp, with a current clamp at better resolution than the ESP32's own ADC, set continuous_mode: on in the ads1115: block.

Cheap boards, clone chips

Genuine TI ADS1115s in the usual package are marked BOGI. Hackaday tested low-cost boards and found chips that worked but ran off their rated data rate and read around 12mV low at 2.5V. If accuracy matters, check against a multimeter and correct with calibrate_linear.

Shares I²C address 0x48

These parts default to the same address. At least one can be re-strapped, so they can coexist once you change it:

ADDR pin selects 0x48-0x4B. Check a full build in the planner · The ways out of an address conflict

🛠️ Hardware Correction & Field Contributions

Report a Pinout Error or Submit Tested Code Snippets

Found a pin mapping quirk or built a custom ESPHome YAML driver for ADS1115 16-bit 4-Channel Precision ADC? Submit a pull request or report corrections to our index.

Frequently Asked Questions

Does ADS1115 16-bit 4-Channel Precision ADC work without an internet connection?
Local I2C bus analog reading.
How is ADS1115 16-bit 4-Channel Precision ADC powered and wired to the host board?
3.3V VCC SDA=GPIO21 SCL=GPIO22 ADDR=GND.
How does the host board reach Home Assistant (ESPHome)?
Wi-Fi 2.4GHz.

Alternatives

Guides for this part

Related Compatibility Matrix Guides