Skip to content
Buy 10+ on select items — save 10% auto-applied
Free US shipping on orders $35+
Order by 3pm ET — ships same-day from the US
Skip to main content

Arduino Nano INA219: Measure Voltage, Current, Power | ShillehTek

May 18, 2026 25 views

Arduino Nano INA219: Measure Voltage, Current, Power | ShillehTek
Project

Build an Arduino Nano INA219 wattmeter to read voltage, current, and power over I2C for accurate low-current monitoring, using parts from ShillehTek.

15 min Beginner3 parts

Project Overview

Arduino Nano + INA219 wattmeter: In this build, an Arduino Nano reads live current (mA), voltage (V), and power (mW) from an INA219 precision current sensor over I2C so you can measure low-power devices accurately.

The INA219 is a precision current, voltage, and power meter designed for low-current measurement. It is a good fit for solar panels, LiPo battery monitoring, low-power IoT devices, and energy-budget calculations.

  • Time: ~15 minutes
  • Skill level: Beginner
  • What you will build: An Arduino reading live current (mA), voltage (V), and power (mW) over I2C from the INA219.
INA219 current sensor module connected to an Arduino Nano for measuring voltage, current, and power
INA219 - I2C, 12-bit ADC, ±3.2A range, <1% accuracy.

Parts List

From ShillehTek

External

  • A load (LED strip, motor, ESP32, or anything pulling current)
  • Power supply for the load

Note: INA219 default I2C address is 0x40. Solder A0/A1 jumpers to use up to 4 addresses on one bus.

Step-by-Step Guide

Step 1 - Inspect the Module

Goal: Identify the measurement terminals and the I2C interface pins.

What to do: Locate Vin+ and Vin- (these carry the measured current) and the I2C pins (VCC, GND, SDA, SCL) that connect to your microcontroller.

Top view of the INA219 breakout board showing the on-board shunt resistor and Vin+ and Vin- terminals
The breakout has a 0.1Ω shunt resistor on the board. Current flows through Vin+ and Vin-.
INA219 pinout diagram showing Vin+ and Vin- for current path and VCC, GND, SDA, SCL for I2C to Arduino
Vin+ and Vin- carry the measured current; VCC + GND + SDA + SCL talk to the Arduino.

Expected result: You know which terminals go inline with the load and which pins go to the Arduino for I2C communication.

Step 2 - Wire It In Series With Your Load

Goal: Place the INA219 inline so it can measure current through the load.

What to do: Wire the I2C pins to the Arduino, then put the INA219 between the power supply positive and the load positive (series connection on the positive rail).

Wiring diagram of an Arduino Nano connected to an INA219 over I2C with the INA219 wired in series between power supply positive and load positive
The INA219 sits inline between the power supply + and the load.
  • VCC -> 5V (or 3.3V on ESP32/Pico)
  • GND -> GND
  • SDA -> A4, SCL -> A5
  • Vin+ -> power supply +
  • Vin- -> load + (measured current flows here)

Expected result: The load still powers normally, and the INA219 is physically inline so all load current flows from Vin+ to Vin-.

Step 3 - Upload the Sketch

Goal: Read voltage, current, and power from the INA219 and print values to Serial.

What to do: In the Arduino IDE, install Adafruit INA219 via the Library Manager, then upload the sketch below.

Code:

#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina;
void setup() {
  Serial.begin(9600);
  if (!ina.begin()) { Serial.println("INA219 not found"); while(1); }
}
void loop() {
  float shunt = ina.getShuntVoltage_mV();
  float bus   = ina.getBusVoltage_V();
  float ma    = ina.getCurrent_mA();
  float mw    = ina.getPower_mW();
  Serial.print("V="); Serial.print(bus, 2);
  Serial.print(" I="); Serial.print(ma, 2); Serial.print("mA");
  Serial.print(" P="); Serial.print(mw, 2); Serial.println("mW");
  delay(500);
}

Expected result: The sketch uploads successfully and the Arduino is ready to stream measurements over the Serial port.

Step 4 - Watch the Output

Goal: Confirm that readings update in real time.

What to do: Open the Serial Monitor at 9600 baud and power your load. You should see voltage, current, and power update about twice per second.

Arduino Serial Monitor displaying INA219 voltage, current in mA, and power in mW updating repeatedly
Live voltage, current, and power readings updating twice per second.
INA219 measurement values shown on an SSD1306 OLED display as a standalone wattmeter
Pair with an SSD1306 OLED for a standalone wattmeter.

Expected result: You see stable, repeating lines with V, I (mA), and P (mW) that change when the load changes.

Step 5 - Where to Take It Next

Goal: Extend the same INA219 measurements into a more complete power-monitoring project.

What to do: Choose an upgrade path and build on the same wiring and sketch structure.

  • Build a coulomb counter - integrate current over time for battery state-of-charge
  • Solar-panel monitor - log Vin + I + W to a CSV via SD adapter
  • ESP32 deep-sleep power profiling - see exactly how many µA your project draws
  • Combine with INA219 boards at multiple addresses to monitor a whole battery bank

Expected result: You have a clear next step that still uses the same core INA219 readings.

Conclusion

You built an Arduino Nano INA219 wattmeter that measures bus voltage, current, and power over I2C and prints live values to the Serial Monitor. This setup is ideal when you need precision at low currents for battery, solar, or low-power IoT measurement.

Want the exact parts used in this build? Grab them from ShillehTek.com. If you want help customizing this project or building something for your product, check out our IoT consulting services.

Credit: INA219 photos and code are credited to Instructables. The original guide served as the reference for this ShillehTek version.