Это по сути эволюция INA219. Он так же прост в использовании (библиотеки аналогичны), но обладает большей точностью и гибкостью. 
Почему вам подойдет именно модуль:
Никакой пайки SMD: Чип уже припаян на небольшую плату. Вы просто вставляете модуль в макетную плату или припаиваете к нему обычные провода.
Вся обвязка на месте: На модуле уже есть все необходимые конденсаторы и точные шунтирующие резисторы.

  1. Стандартные пины: Выводы расположены с шагом 2.54 мм, идеально для макеток.

Схема подключения к ESP32 (проще некуда):

Модуль INA226     ->     ESP32
VCC               ->     3.3V
GND               ->     GND
SCL               ->     GPIO 22 (или любой другой I2C SCL)
SDA               ->     GPIO 21 (или любой другой I2C SDA)

📍 Распиновка INA226 (SOIC-16) и подключение

Ключевые выводы для минимальной схемы:

Вывод 1 (VIN+)  --> К линии питания, которую измеряем (VCC_MCU)
Вывод 2 (VIN-)  --> К нагрузке (сам ESP32)
Вывод 3 (VSUP)  --> Питание самой микросхемы (3.3V от ESP32)
Вывод 4 (GND)   --> Общая земля
Вывод 12 (SCL)  --> GPIO22 (I2C Clock) ESP32
Вывод 13 (SDA)  --> GPIO21 (I2C Data) ESP32
Вывод 14 (A0)   --> На землю (задает адрес 0x40)
Вывод 15 (A1)   --> На землю

💻 Пример кода для INA226 (очень похож на INA219)

#include <Wire.h>
#include <Adafruit_INA226.h>

Adafruit_INA226 ina226 = Adafruit_INA226(0x40); // Адрес по умолчанию

void setup() {
  Serial.begin(115200);
  if (!ina226.begin()) {
    Serial.println("Не найден INA226!");
    while (1);
  }
  ina226.setAveraging(128); // Усреднение 128 выборок для точности
}

void loop() {
  float shuntVoltage_mV = ina226.getShuntVoltage_mV();
  float busVoltage_V = ina226.getBusVoltage_V(); // Напряжение на нагрузке (VCC)
  float current_mA = ina226.getCurrent_mA();

  Serial.print("Напряжение питания (VCC): "); Serial.print(busVoltage_V, 3); Serial.println(" В");
  Serial.print("Ток: "); Serial.print(current_mA, 3); Serial.println(" мА");

  delay(2000);
}

Преимущества INA226 перед INA219

  • Высокая точность: Максимальная погрешность 0.1% (у INA219 — 0.5%).

  • Широкий диапазон: Измеряет напряжение шины 0-36В и ток через внешний шунт.

  • Совместимость по выводам и коду: Распиновка и библиотеки очень похожи на INA219, миграция проста.

  • Корпус: Выпускается в SOIC-16 — он заметно больше SSOP-16 и его реально паять вручную.

ВНИМАНИЕ: Между VIN+ и VIN- должен быть подключен прецизионный шунтирующий резистор (Shunt) для измерения тока. Его номинал зависит от ожидаемого тока (например, 0.1 Ом для тока до 1.5А).

💾 Режимы работы и управление сном

Управление осуществляется через регистр конфигурации (0x00). Основные биты для вашей задачи:

  • Биты [2:0] (MODE): Задают режим работы.

    • 000 - Спящий режим (Power-Down)

    • 111 - Непрерывное измерение напряжения и тока

  • Биты [11:9] (SADC): Усреднение для измерения напряжения.

  • Биты [14:12] (BADC): Усреднение для измерения тока.

Чтобы усыпить INA226, нужно записать в регистр конфигурации значение с MODE=000.

💻 Полный скетч для ESP32 (Сон -> Пробуждение -> Измерение)

В этом примере ESP32 просыпается по таймеру, будит INA226, измеряет напряжение и ток, выводит в Serial и снова засыпает.

#include <Wire.h>

// Адрес INA226 (A0=A1=GND)
#define INA226_ADDR 0x40

// Регистры INA226
#define REG_CONFIG     0x00
#define REG_SHUNT_VOLT 0x01
#define REG_BUS_VOLT   0x02
#define REG_CURRENT    0x04
#define REG_CALIB      0x05

// Конфигурация INA226 для нормального режима
#define INA226_CONFIG_NORMAL 0x4127 // MODE=111 (непрерывный), SADC=001 (усреднение 4), BADC=001, RST=0

// Конфигурация INA226 для спящего режима
#define INA226_CONFIG_SLEEP  0x4120 // MODE=000 (спящий), остальные биты те же

// Калибровочное значение (зависит от шунта! Для 0.1 Ом и максимального тока 1А = 0.00512 / (0.1 * 0.001) = 51.2)
#define CAL_VALUE 5120

void writeINA226(uint8_t reg, uint16_t value) {
  Wire.beginTransmission(INA226_ADDR);
  Wire.write(reg);
  Wire.write((value >> 8) & 0xFF);
  Wire.write(value & 0xFF);
  Wire.endTransmission();
}

uint16_t readINA226(uint8_t reg) {
  Wire.beginTransmission(INA226_ADDR);
  Wire.write(reg);
  Wire.endTransmission();
  
  Wire.requestFrom(INA226_ADDR, 2);
  uint16_t value = Wire.read() << 8;
  value |= Wire.read();
  return value;
}

void setupINA226() {
  // 1. Настраиваем калибровочный регистр
  writeINA226(REG_CALIB, CAL_VALUE);
  
  // 2. Включаем нормальный режим работы
  writeINA226(REG_CONFIG, INA226_CONFIG_NORMAL);
  
  // 3. Ждем готовности (примерно 2 мс)
  delay(2);
}

float readBusVoltage() {
  uint16_t raw = readINA226(REG_BUS_VOLT);
  return raw * 0.00125; // 1.25 мВ на LSB
}

float readCurrent() {
  int16_t raw = (int16_t)readINA226(REG_CURRENT);
  return raw * 0.00001; // 10 мкА на LSB (при CAL=5120)
}

void setup() {
  Serial.begin(115200);
  while(!Serial);
  
  Wire.begin();
  
  // Пробуждаем INA226 из сна
  writeINA226(REG_CONFIG, INA226_CONFIG_NORMAL);
  delay(2); // Ждем запуска АЦП
  
  // Читаем напряжение и ток
  float voltage = readBusVoltage();
  float current = readCurrent();
  
  Serial.print("Напряжение: "); Serial.print(voltage, 3); Serial.println(" В");
  Serial.print("Ток: "); Serial.print(current, 3); Serial.println(" А");
  
  // Усыпляем INA226 перед сном ESP32
  writeINA226(REG_CONFIG, INA226_CONFIG_SLEEP);
  
  Serial.println("Переход в глубокий сон на 10 секунд...");
  Serial.flush();
  
  // Настраиваем таймер для пробуждения
  esp_sleep_enable_timer_wakeup(10 * 1000000); // 10 секунд в микросекундах
  
  // Переходим в глубокий сон
  esp_deep_sleep_start();
}

void loop() {
  // Этот код не выполнится, так как после deep_sleep происходит перезагрузка
}

⚙️ Важные замечания по реализации

  1. Калибровка: Значение CAL_VALUE критически важно для точного измерения тока. Рассчитывается по формуле:
    CAL = 0.00512 / (R_shunt * I_max_LSB), где I_max_LSB — желаемое разрешение по току (обычно 0.001А).

  2. Шунт: Используйте прецизионный резистор с допуском 0.1-1% и мощностью не менее 0.5Вт.

  3. Подтяжка I2C: Не забудьте резисторы 4.7 кОм на линии SCL и SDA к 3.3В.

  4. Питание: INA226 питается от 3.3В, но может измерять напряжение шины до 36В.

 

🔧 Что делать, если нужен именно DIP-корпус

Если вы принципиально хотите чип для пайки в DIP-разъем, то:

  1. INA226 в SOIC-8 можно установить на DIP-8 переходник (SOIC-to-DIP adapter).

  2. MAX471 — старый, но проверенный монитор тока и напряжения в DIP-8. Легко паяется, но менее точен и информативен, чем INA.

💎 Итог

Не паяйте чип INA219. Купите готовый модуль на INA226 (он часто продается как "Модуль INA226 с точным шунтом"). Это:

  • Быстрее и надежнее.

  • Сразу готово к работе.

  • Часто даже дешевле, чем чип отдельно + детали обвязки.

На AliExpress, Amazon или в местных радиомагазинах ищите "INA226 module" или "Монитор тока и напряжения INA226". Это идеальное решение по мониторингу питания для ESP32.