← All parts
INA226 Power Monitor
INA226
Texas Instrumentsic data converter
The INA226 is a 16-bit, ultra-precise current, voltage, and power monitor with an I2C/SMBus interface. It senses bus voltages from 0 to 36 V on the high or low side and reports current and power directly.
In stock
Specifications
8- Operating Voltage
- 2.7 to 5.5 V
- Bus Voltage Range
- 0 to 36 V
- Interface
- I2C/SMBus
- Resolution
- 16 bit
- Accuracy
- 0.1 %
- Supply Current
- 330 uA
- Operating Temperature Range
- -40 to 125 °C
- Package Types
- VSSOP-10
Pinout
10| Pin | Name | Functions | Notes |
|---|---|---|---|
| 1 | A1 | GPIO | Address pin; connect to GND, SCL, SDA, or VS |
| 2 | A0 | GPIO | Address pin; connect to GND, SCL, SDA, or VS |
| 3 | Alert | GPIO | Multi-functional alert, open-drain output |
| 4 | SDA | I2C | Serial bus data line, open-drain input/output |
| 5 | SCL | I2C | Serial bus clock line, open-drain input |
| 6 | VS | POWER | Power supply, 2.7 V to 5.5 V |
| 7 | GND | GND | Ground |
| 8 | VBUS | ADC | Bus voltage input |
| 9 | IN- | ADC | Connect to load side of shunt resistor |
| 10 | IN+ | ADC | Connect to supply side of shunt resistor |
Interactive pinout
Highlight:
INA226
Click a pin to copy its name · tap a tag above to spotlight a bus.
Starter code
Community starter examples — minimal, unofficial, and provided to get you wiring fast. Verify against the manufacturer datasheet before relying on them.
Arduino (C++)
arduino
// INA226 current / power monitor — community starter example
// Bus voltage needs no calibration (1.25 mV/LSB); current needs a cal register
// set for your shunt — use the Rob Tillaart 'INA226' library for that.
#include <Wire.h>
const byte ADDR = 0x40; // A0/A1 -> GND
float readBusVoltage() {
Wire.beginTransmission(ADDR);
Wire.write(0x02); // bus voltage register
Wire.endTransmission();
Wire.requestFrom(ADDR, (byte)2);
uint16_t raw = (Wire.read() << 8) | Wire.read();
return raw * 0.00125; // 1.25 mV/LSB
}
void setup() {
Serial.begin(115200);
Wire.begin();
}
void loop() {
Serial.print("Vbus="); Serial.print(readBusVoltage()); Serial.println(" V");
delay(1000);
}MicroPython
python
# INA226 (ESP32) — community starter example
# Bus voltage (no calibration). For current, set the cal register / use a driver.
from machine import Pin, I2C
import time
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
ADDR = 0x40
while True:
d = i2c.readfrom_mem(ADDR, 0x02, 2) # bus voltage register
raw = (d[0] << 8) | d[1]
print("Vbus", raw * 0.00125, "V")
time.sleep(1)Wiring
| Pin | Arduino Uno R3 | ESP32 DevKitC (WROOM-32) | Notes |
|---|---|---|---|
| VS | +5V | 3V3 | Logic 2.7-5.5 V |
| GND | GND | GND | |
| SCL | A5/SCL | GPIO22 | I2C clock |
| SDA | A4/SDA | GPIO21 | I2C data |
| IN+ / IN- | - | - | Across the shunt, in series with the load (up to 36 V bus) |
| VBUS | - | - | Tie to the bus node being measured |
Typical uses
- Precise bus voltage / current / power
- Battery and supply-rail monitoring