
1、Einführung
Der I2C-Digital-Leistungsmesser ist ein Messgerät, das verschiedene elektronische Module und Stromverbraucher mit einer Spannung von bis zu 26V und einem Strom von bis zu 8A messen kann. Es handelt sich um einen hochauflösenden, hochpräzisen und breitmessungsfähigen Messmodul mit einer maximalen relativen Genauigkeit von ±0,2% (es muss vor der Verwendung eine einfache manuelle Kalibrierung durchgeführt werden).Kann zum Messen des Stromverbrauchs in Solarsystemen, Akkulademessern, Motoren, Hauptbrett oder elektronischen Modulen, zur Bewertung der Batterieleistung und zur Onlineüberwachung der Echtzeit-Spannungsparameter verwendet werden.Das Modul verwendet den TI INA219-Chip mit Nulltemperaturverzerrung für den Strom-/Leistungsmonitoring und einen 2W-Hochleistungs-Niedertemperaturverzerrungs-10mΩ-Halbleiter-Sampelpotentiometer, die Auflösung für Spannung und Strom beträgt jeweils 4mV und 1mA, und die relative maximale Messfehler der Spannung und des Stroms unter vollem Messbereich beträgt nicht mehr als ±0.2%, und bietet 4 I2C-Adressen, die über DIP-Schalter konfiguriert werden können.Der Modul kann den bilateralen Hochseitenstrom (den Strom, der durch die Spannungsquelle oder die positive Pole der Batterie fließt) genau messen. Dies ist besonders nützlich in Solarenergie- oder Coulombmetieranwendungen, bei denen die Batterie sowohl geladen als auch entladen werden muss. Der Benutzer kann durch das Vorzeichen der Stromlesung den Lade- und Entladestatus der Batterie erkennen und auch die Echtzeitspannung, Strom und Leistung der Ladung und Entladung der Batterie verstehen.Im Anwendungsfall von Elektromotoren kann durch Echtzeitüberwachung des Elektromotorstroms überprüft werden, ob der Strom durch Blockieren oder Überlastung zu hoch ist, um rechtzeitig Schutzmaßnahmen zu ergreifen.Außerdem kann mit diesem Modul die Echtzeit-Leistungsaufnahme verschiedener elektronischer Module oder eines gesamten Projekts gemessen werden, um die Batterielaufzeit zu bewerten.
2、Schemazeichnung
I2C-Digitalstrommessmodul-HS-S73P SchemaKlicken Sie zum Anzeigen
3、Modulparameter
Pinbezeichnung | Beschreibung |
|---|---|
G | GND(Spannungsversorgungsminus) |
V | VCC(Spannungsversorgungsplus) |
A | Datenpin |
L | Zeitpin |
Spannungsversorgung: 3.3V-5V
Verbindungsmethode: PH2.0 4P Steckerkabel
Montageart: Schraubenfestigung
4, Platinegröße

5、Arduino IDE Beispielprogramm
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
Anleitung zum Herunterladen und Importieren der Bibliotheksdateien für das Arduino IDE:Klicken Sie zum Anzeigen
Beispielprogramm (UNO-Entwicklerboard):
#include "DFRobot_INA219.h"
#include <Wire.h>
DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS4);
float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;
void setup(){
while (!ina219.begin()) {
Serial.println("INA219 初始化失败:请检查I2C接线/地址是否正确");
delay(1000);
}
ina219.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
Serial.begin(9600);
}
void loop(){
Serial.println(String("总线电压:") + String(ina219.getBusVoltage_V()));
Serial.println(String("分流电压:") + String(ina219.getShuntVoltage_mV()));
Serial.println(String("电流值:") + String(ina219.getCurrent_mA()));
Serial.println(String("功率值") + String(ina219.getPower_mW()));
Serial.println(String("------------------"));
delay(500);
}6、ESP32 Python Beispiel (für Mixly IDE /米思齐)
Entwicklungsboard auswählen Python ESP32 [ESP32 Generic(4MB)] auf den Code-Modus umschalten und hochladen
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:Klicken Sie zum Anzeigen
示例程序(ESP32-Python):
from machine import I2C, Pin
import time
INA219_REG_CONFIG = 0x00
INA219_REG_SHUNTVOLTAGE = 0x01
INA219_REG_BUSVOLTAGE = 0x02
INA219_REG_POWER = 0x03
INA219_REG_CURRENT = 0x04
INA219_REG_CALIBRATION = 0x05
INA219_CONFIG_RESET = 0x8000
INA219_I2C_ADDRESS1 = 0x40
INA219_I2C_ADDRESS2 = 0x41
INA219_I2C_ADDRESS3 = 0x44
INA219_I2C_ADDRESS4 = 0x45
class eIna219BusVolRange_t:
eIna219BusVolRange_16V = 0x0000
eIna219BusVolRange_32V = 0x2000
class eIna219PGABits_t:
eIna219PGABits_1 = 0x0000
eIna219PGABits_2 = 0x0800
eIna219PGABits_4 = 0x1000
eIna219PGABits_8 = 0x1800
class eIna219AdcBits_t:
eIna219AdcBits_9 = 0
eIna219AdcBits_10 = 1
eIna219AdcBits_11 = 2
eIna219AdcBits_12 = 3
class eIna219AdcSample_t:
eIna219AdcSample_1 = 0x00
eIna219AdcSample_2 = 0x01
eIna219AdcSample_4 = 0x02
eIna219AdcSample_8 = 0x03
eIna219AdcSample_16 = 0x04
eIna219AdcSample_32 = 0x05
eIna219AdcSample_64 = 0x06
eIna219AdcSample_128 = 0x07
class eInaMode_t:
eIna219PowerDown = 0x00
eIna219SVolTrig = 0x01
eIna219BVolTrig = 0x02
eIna219SAndBVolTrig = 0x03
eIna219AdcOff = 0x04
eIna219SVolCon = 0x05
eIna219BVolCon = 0x06
eIna219SAndBVolCon = 0x07
class HELLO_STEM_INA219:
def __init__(self, i2c_bus, i2c_addr=INA219_I2C_ADDRESS1):
self._i2c = i2c_bus
self._addr = i2c_addr
self.calValue = 0x0000
self.lastOperateStatus = 'eIna219_InitError'
def _writeReg(self, reg, data):
try:
buffer = bytearray([reg, (data >> 8) & 0xFF, data & 0xFF])
self._i2c.writeto(self._addr, buffer)
self.lastOperateStatus = 'eIna219_ok'
except Exception:
self.lastOperateStatus = 'eIna219_WriteRegError'
def _readReg(self, reg):
try:
self._i2c.writeto(self._addr, bytearray([reg]))
buffer = self._i2c.readfrom(self._addr, 2)
self.lastOperateStatus = 'eIna219_ok'
return (buffer[0] << 8) | buffer[1]
except Exception:
self.lastOperateStatus = 'eIna219_ReadRegError'
return 0
def _readInaReg(self, reg):
value = self._readReg(reg)
if value & 0x8000:
return value - 0x10000
return value
def _readInaRegUnsigned(self, reg):
return self._readReg(reg)
def _writeInaReg(self, reg, value):
self._writeReg(reg, value)
def scan(self):
try:
self._i2c.writeto(self._addr, bytearray([]))
return True
except OSError as e:
if str(e) == '[Errno 5] EIO':
return False
return False
def begin(self):
self.lastOperateStatus = 'eIna219_InitError'
if self.scan():
self.setBRNG(eIna219BusVolRange_t.eIna219BusVolRange_32V)
self.setPGA(eIna219PGABits_t.eIna219PGABits_8)
self.setBADC(eIna219AdcBits_t.eIna219AdcBits_12, eIna219AdcSample_t.eIna219AdcSample_8)
self.setSADC(eIna219AdcBits_t.eIna219AdcBits_12, eIna219AdcSample_t.eIna219AdcSample_8)
self.setMode(eInaMode_t.eIna219SAndBVolCon)
self.calValue = 4096
self._writeInaReg(INA219_REG_CALIBRATION, self.calValue)
self.lastOperateStatus = 'eIna219_ok'
return True
else:
return False
def linearCalibrate(self, ina219Reading_mA, extMeterReading_mA):
if ina219Reading_mA == 0:
return
new_calValue = int((extMeterReading_mA / ina219Reading_mA) * self.calValue) & 0xFFFE
self.calValue = new_calValue
self._writeInaReg(INA219_REG_CALIBRATION, self.calValue)
def getBusVoltage_V(self):
reg_val = self._readInaRegUnsigned(INA219_REG_BUSVOLTAGE)
return float(reg_val >> 3) * 0.004
def getShuntVoltage_mV(self):
reg_val = self._readInaReg(INA219_REG_SHUNTVOLTAGE)
return float(reg_val) * 0.01
def getCurrent_mA(self):
return float(self._readInaReg(INA219_REG_CURRENT))
def getPower_mW(self):
return float(self._readInaReg(INA219_REG_POWER)) * 20.0
def setBRNG(self, value):
conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
conf &= ~0x2000
conf |= value
self._writeInaReg(INA219_REG_CONFIG, conf)
def setPGA(self, bits):
conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
conf &= ~0x1800
conf |= bits
self._writeInaReg(INA219_REG_CONFIG, conf)
def _get_adc_value(self, bits, sample):
if bits < eIna219AdcBits_t.eIna219AdcBits_12 and sample > eIna219AdcSample_t.eIna219AdcSample_1:
return -1
if bits < eIna219AdcBits_t.eIna219AdcBits_12:
return bits
else:
return 0x08 | sample
def setBADC(self, bits, sample):
value = self._get_adc_value(bits, sample)
if value == -1:
return
conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
conf &= ~0x0780
conf |= value << 7
self._writeInaReg(INA219_REG_CONFIG, conf)
def setSADC(self, bits, sample):
value = self._get_adc_value(bits, sample)
if value == -1:
return
conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
conf &= ~0x0078
conf |= value << 3
self._writeInaReg(INA219_REG_CONFIG, conf)
def setMode(self, mode):
conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
conf &= ~0x0007
conf |= mode
self._writeInaReg(INA219_REG_CONFIG, conf)
def reset(self):
self._writeInaReg(INA219_REG_CONFIG, INA219_CONFIG_RESET)
i2c = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
sensor = HELLO_STEM_INA219(i2c, i2c_addr=INA219_I2C_ADDRESS4)
if sensor.begin():
print("INA219 初始化成功!")
else:
print("INA219 初始化失败,请检查接线和地址!")
import machine
while True:
print(('总线电压:' + str(sensor.getBusVoltage_V())))
print(('分流电压:' + str(sensor.getShuntVoltage_mV())))
print(('电流: ' + str(sensor.getCurrent_mA())))
print(('功率: ' + str(sensor.getPower_mW())))
time.sleep(1)
7、米思齐 Mixly 示例程序(图形化语言) in Deutsch
Beispielprogramm (UNO-Entwicklerboard):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE Arduino库文件下载及导入教程:Klicken Sie zum Anzeigen

Beispielprogramm (ESP32-Entwicklungsboard):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:Klicken Sie zum Anzeigen

8、Testumgebung Einrichtung
Testumgebung für Arduino UNO einrichten
Vorbereiten Sie die Komponenten:
UNO-R3 Entwicklungsboard *1
UNO-R3 EXP-Erweiterungsplatte *1
USB type-c Datenkabel *1
HS-S73-P I2C-Digital-Leistungsmessmodul *1
LED-Leuchtmittelmodul *1
PH2.0 4P-Doppelkopfsteckerleitung *1
Schaltplan der Leitung:

9、Video-Tutorial
Video-Tutorial:Klicken Sie zum Anzeigen
10、Testergebnis
Arduino UNO Testergebnis:
Busspannung, Streuspannung, Stromwert, Leistungswert werden auf dem Serielschnittbildschirm angezeigt.

ESP32 Testergebnis:
Wird aktualisiert...