How to set the address
Wire the address pin like this:
A0: GND → 0x60 · VDD → 0x61 (MCP4725A0)
The A0 pin sets the last bit; the other bits are fixed at the factory by the order code (MCP4725A0 = 0x60/0x61, A1 = 0x62/0x63, and so on).
Devices that use the same addresses
Two devices on the same bus can’t answer on the same address. These modules from our list use at least one of these addresses:
| Device | What it is | Shared address |
|---|---|---|
| MCP4728 | 12-bit quad DAC with EEPROM | 0x60–0x67 (8) |
| PCA9685 | 16-channel 12-bit PWM / servo driver | 0x60–0x67 (8) |
| SCD30 | NDIR CO2, temperature and humidity module | 0x61 |
| SCD40 / SCD41 | photoacoustic CO2, temperature and humidity sensor | 0x62 |
If two of them end up on the same address, move one with its address pin, put one behind a TCA9548A multiplexer (0x70–0x77), or use a second I²C bus: the ESP32, ESP32-S3 and RP2040 have two I²C controllers (the ESP32-C3 has one).
Check your whole bus →Add the MCP4725 and your other modules: the checker finds conflicts, suggests free addresses and sizes the pull-ups.
7-bit and 8-bit address
I²C addresses are 7 bits long. Some datasheets and libraries write them as 8-bit numbers, with the read/write bit added on the right: that is why the same chip can appear as 0x60 or 0xC0. Arduino’s Wire library and ESPHome use the 7-bit form.
| 7-bit | Binary | 8-bit write | 8-bit read |
|---|---|---|---|
| 0x60 | 1100000 | 0xC0 | 0xC1 |
| 0x61 | 1100001 | 0xC2 | 0xC3 |
| 0x62 | 1100010 | 0xC4 | 0xC5 |
| 0x63 | 1100011 | 0xC6 | 0xC7 |
| 0x64 | 1100100 | 0xC8 | 0xC9 |
| 0x65 | 1100101 | 0xCA | 0xCB |
| 0x66 | 1100110 | 0xCC | 0xCD |
| 0x67 | 1100111 | 0xCE | 0xCF |
Check that it answers
Upload this sketch with the MCP4725 wired to SDA and SCL: it tries every address the chip can use and prints the one that answers. On an ESP32 the default pins are GPIO21 (SDA) and GPIO22 (SCL); on an Arduino Uno, A4 and A5.
#include <Wire.h>
const byte ADDRS[] = {0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67};
void setup() {
Serial.begin(115200);
Wire.begin();
for (byte a : ADDRS) {
Wire.beginTransmission(a);
if (Wire.endTransmission() == 0) {
Serial.print("MCP4725 answers at 0x");
if (a < 0x10) Serial.print('0');
Serial.println(a, HEX);
return;
}
}
Serial.println("No answer: check the wiring");
}
void loop() {}
In ESPHome the bus is scanned at boot (scan: true is the default): the log lists every address that answers.
i2c:
sda: GPIO21
scl: GPIO22
scan: true
Pull-up resistors
SDA and SCL need pull-up resistors to the supply. Many breakout boards already carry them, often 4.7 kΩ or 10 kΩ, and with several boards on the bus they add up in parallel. The I²C checker works out the allowed range for your bus voltage and speed.
Frequently asked questions
What is the I2C address of the MCP4725?
0x60–0x67, depending on the wiring: A0: GND → 0x60 · VDD → 0x61 (MCP4725A0).
Can I use more than one MCP4725 on the same bus?
Two with the same order code, yes: the A0 pin gives each one its own address. For up to 8, mix the MCP4725A0, A1, A2 and A3 versions.
Why doesn’t the MCP4725 show up in an I2C scan?
Check, in this order: SDA and SCL not swapped; ground shared between the boards; pull-up resistors on SDA and SCL; the module powered at the voltage it is made for; the address pin not left floating; and that your code uses the 7-bit address (0x60), not the 8-bit one (0xC0).
Similar devices
ADS1015 ADS1115 ADS7830 MCP4728 PCF8591
Addresses checked against the MCP4725 datasheet.