Это по сути эволюция INA219. Он так же прост в использовании (библиотеки аналогичны), но обладает большей точностью и гибкостью.
Почему вам подойдет именно модуль:
Никакой пайки SMD: Чип уже припаян на небольшую плату. Вы просто вставляете модуль в макетную плату или припаиваете к нему обычные провода.
Вся обвязка на месте: На модуле уже есть все необходимые конденсаторы и точные шунтирующие резисторы.
-
Стандартные пины: Выводы расположены с шагом 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 происходит перезагрузка }
⚙️ Важные замечания по реализации
-
Калибровка: Значение
CAL_VALUEкритически важно для точного измерения тока. Рассчитывается по формуле:CAL = 0.00512 / (R_shunt * I_max_LSB), гдеI_max_LSB— желаемое разрешение по току (обычно 0.001А). -
Шунт: Используйте прецизионный резистор с допуском 0.1-1% и мощностью не менее 0.5Вт.
-
Подтяжка I2C: Не забудьте резисторы 4.7 кОм на линии SCL и SDA к 3.3В.
-
Питание: INA226 питается от 3.3В, но может измерять напряжение шины до 36В.
🔧 Что делать, если нужен именно DIP-корпус
Если вы принципиально хотите чип для пайки в DIP-разъем, то:
-
INA226 в SOIC-8 можно установить на DIP-8 переходник (SOIC-to-DIP adapter).
-
MAX471 — старый, но проверенный монитор тока и напряжения в DIP-8. Легко паяется, но менее точен и информативен, чем INA.
💎 Итог
Не паяйте чип INA219. Купите готовый модуль на INA226 (он часто продается как "Модуль INA226 с точным шунтом"). Это:
-
Быстрее и надежнее.
-
Сразу готово к работе.
-
Часто даже дешевле, чем чип отдельно + детали обвязки.
На AliExpress, Amazon или в местных радиомагазинах ищите "INA226 module" или "Монитор тока и напряжения INA226". Это идеальное решение по мониторингу питания для ESP32.