INA3221 3-channel current + voltage monitor with ESP32

Supply 3.3-5 V Bus I2C I2C address 0x40 / 0x41 / 0x42 / 0x43 Measures current, voltage, power
VSGNDSCLSDAWARCRITCPVIN1+IN1-IN2+IN2-IN3+IN3-

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VSPower3V3Pin order differs between boards: check the silkscreen
GNDGroundGND
SCLI2C clock (SCL)D22
SDAI2C data (SDA)D21
WARInterruptD35Warning alert, open drain. Optional
CRIInterruptVPCritical alert, open drain. Optional
TCNot wired to the ESP32—Timing control alert. Leave unconnected
PVNot wired to the ESP32—Power valid alert. Leave unconnected
IN1+Not wired to the ESP32—Channel 1 from the supply. Measured circuit only, up to 26 V
IN1-Not wired to the ESP32—Channel 1 to the load
IN2+Not wired to the ESP32—Channel 2 from the supply
IN2-Not wired to the ESP32—Channel 2 to the load
IN3+Not wired to the ESP32—Channel 3 from the supply
IN3-Not wired to the ESP32—Channel 3 to the load

Suggested wiring for the 30-pin ESP32 DevKit, avoiding flash, input-only and strapping pins. BoardPilot checks it for you as you wire.

Starter code (Arduino)

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);  // SDA = GPIO 21, SCL = GPIO 22
  Wire.beginTransmission(0x40);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "INA3221 3-channel current + voltage monitor found at 0x40" : "Not found: check power, GND and SDA/SCL");
}

void loop() {}

Sources

Try it in 3D in BoardPilot

BoardPilot Part data (JSON)

Related parts

Part data: CC BY 4.0, free to reuse with credit to BoardPilot.