mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
new version Ina219
This commit is contained in:
@@ -61,6 +61,13 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "anydatamWtt",
|
||||
"label": "миллиВатты",
|
||||
"widget": "anydata",
|
||||
"after": "mW",
|
||||
"icon": "speedometer",
|
||||
},
|
||||
{
|
||||
"name": "anydataWth",
|
||||
"label": "Энергия",
|
||||
|
||||
@@ -61,6 +61,13 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "anydatamWtt",
|
||||
"label": "миллиВатты",
|
||||
"widget": "anydata",
|
||||
"after": "mW",
|
||||
"icon": "speedometer",
|
||||
},
|
||||
{
|
||||
"name": "anydataWth",
|
||||
"label": "Энергия",
|
||||
|
||||
@@ -11,126 +11,198 @@
|
||||
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_INA219.h>
|
||||
#include <map>
|
||||
|
||||
Adafruit_INA219 ina219;
|
||||
// Adafruit_INA219 ina219;
|
||||
// Структура для хранения данных с датчика
|
||||
struct Ina219Value
|
||||
{
|
||||
float shuntvoltage = 0;
|
||||
float busvoltage = 0;
|
||||
};
|
||||
// глобальные списки необходимы для хранения данных, полученных разными датчиками из модуля. Ключ - адрес
|
||||
std::map<uint8_t, Ina219Value *> ina219ValueArray;
|
||||
|
||||
float shuntvoltage = 0;
|
||||
float busvoltage = 0;
|
||||
float current_mA = 0;
|
||||
float loadvoltage = 0;
|
||||
float power_mW = 0;
|
||||
// глобальные списки необходимы для хранения объектов используемых разными датчиками из модуля. Ключ - адрес
|
||||
std::map<uint8_t, Adafruit_INA219 *> ina219Array;
|
||||
|
||||
// shuntvoltage = ina219.getShuntVoltage_mV(); // Получение напряжение на шунте
|
||||
// busvoltage = ina219.getBusVoltage_V(); // Получение значение напряжения V
|
||||
// current_mA = ina219.getCurrent_mA(); // Получение значение тока в мА
|
||||
// power_mW = ina219.getPower_mW(); // Получение значение мощности
|
||||
// loadvoltage = busvoltage + (shuntvoltage / 1000); // Расчет напряжение на нагрузки
|
||||
// Функция инициализации библиотечного класса, возвращает Единстрвенный указать на библиотеку
|
||||
Adafruit_INA219 *instanceIna219(uint8_t ADDR)
|
||||
{
|
||||
/** default I2C address **/
|
||||
if (ADDR == 0)
|
||||
ADDR = INA219_ADDRESS; // 1000000 (A0+A1=GND)
|
||||
|
||||
class Ina219loadvoltage : public IoTItem {
|
||||
public:
|
||||
Ina219loadvoltage(String parameters) : IoTItem(parameters) {
|
||||
// учитываем, что библиотека может работать с несколькими линиями на разных пинах, поэтому инициируем библиотеку, если линия ранее не использовалась
|
||||
if (ina219Array.find(ADDR) == ina219Array.end())
|
||||
{
|
||||
ina219Array[ADDR] = new Adafruit_INA219((uint8_t)ADDR);
|
||||
ina219Array[ADDR]->begin();
|
||||
ina219ValueArray[ADDR] = new Ina219Value;
|
||||
}
|
||||
return ina219Array[ADDR];
|
||||
}
|
||||
|
||||
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
|
||||
/*
|
||||
float shuntvoltage = 0;
|
||||
float busvoltage = 0;
|
||||
float current_mA = 0;
|
||||
float loadvoltage = 0;
|
||||
float power_mW = 0;
|
||||
*/
|
||||
// shuntvoltage = ina219.getShuntVoltage_mV(); // Получение напряжение на шунте
|
||||
// busvoltage = ina219.getBusVoltage_V(); // Получение значение напряжения V
|
||||
// current_mA = ina219.getCurrent_mA(); // Получение значение тока в мА
|
||||
// power_mW = ina219.getPower_mW(); // Получение значение мощности
|
||||
// loadvoltage = busvoltage + (shuntvoltage / 1000); // Расчет напряжение на нагрузки
|
||||
|
||||
class Ina219loadvoltage : public IoTItem
|
||||
{
|
||||
private:
|
||||
uint8_t _addr = 0;
|
||||
|
||||
public:
|
||||
Ina219loadvoltage(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
String sAddr;
|
||||
jsonRead(parameters, "addr", sAddr);
|
||||
if (sAddr == "")
|
||||
scanI2C();
|
||||
else
|
||||
_addr = hexStringToUint8(sAddr);
|
||||
}
|
||||
|
||||
void doByInterval() {
|
||||
|
||||
loadvoltage = busvoltage + (shuntvoltage / 1000);
|
||||
value.valD = loadvoltage;
|
||||
|
||||
regEvent(value.valD, "Ina219loadvoltage");
|
||||
void doByInterval()
|
||||
{
|
||||
value.valD = ina219ValueArray[_addr]->busvoltage + (ina219ValueArray[_addr]->shuntvoltage / 1000);
|
||||
regEvent(value.valD, "Ina219loadvoltage");
|
||||
}
|
||||
|
||||
~Ina219loadvoltage(){};
|
||||
};
|
||||
|
||||
class Ina219busvoltage : public IoTItem {
|
||||
public:
|
||||
Ina219busvoltage(String parameters) : IoTItem(parameters) {
|
||||
class Ina219busvoltage : public IoTItem
|
||||
{
|
||||
private:
|
||||
uint8_t _addr = 0;
|
||||
|
||||
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
|
||||
public:
|
||||
Ina219busvoltage(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
String sAddr;
|
||||
jsonRead(parameters, "addr", sAddr);
|
||||
if (sAddr == "")
|
||||
scanI2C();
|
||||
else
|
||||
_addr = hexStringToUint8(sAddr);
|
||||
}
|
||||
|
||||
void doByInterval() {
|
||||
|
||||
busvoltage = ina219.getBusVoltage_V();
|
||||
value.valD = busvoltage;
|
||||
|
||||
regEvent(value.valD, "Ina219busvoltage");
|
||||
void doByInterval()
|
||||
{
|
||||
ina219ValueArray[_addr]->busvoltage = instanceIna219(_addr)->getBusVoltage_V();
|
||||
value.valD = ina219ValueArray[_addr]->busvoltage;
|
||||
regEvent(value.valD, "Ina219busvoltage");
|
||||
}
|
||||
|
||||
~Ina219busvoltage(){};
|
||||
};
|
||||
|
||||
class Ina219shuntvoltage : public IoTItem
|
||||
{
|
||||
private:
|
||||
uint8_t _addr = 0;
|
||||
|
||||
class Ina219curr : public IoTItem {
|
||||
public:
|
||||
Ina219curr(String parameters) : IoTItem(parameters) {
|
||||
|
||||
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
|
||||
public:
|
||||
Ina219shuntvoltage(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
String sAddr;
|
||||
jsonRead(parameters, "addr", sAddr);
|
||||
if (sAddr == "")
|
||||
scanI2C();
|
||||
else
|
||||
_addr = hexStringToUint8(sAddr);
|
||||
}
|
||||
void doByInterval() {
|
||||
|
||||
current_mA = ina219.getCurrent_mA();
|
||||
value.valD = current_mA;
|
||||
|
||||
regEvent(value.valD, "Ina219curr");
|
||||
}
|
||||
|
||||
~Ina219curr(){};
|
||||
};
|
||||
|
||||
class Ina219shuntvoltage : public IoTItem {
|
||||
public:
|
||||
Ina219shuntvoltage(String parameters) : IoTItem(parameters) {
|
||||
|
||||
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
|
||||
}
|
||||
void doByInterval() {
|
||||
|
||||
shuntvoltage = ina219.getShuntVoltage_mV();
|
||||
value.valD = shuntvoltage;
|
||||
|
||||
regEvent(value.valD, "Ina219shuntvoltage");
|
||||
void doByInterval()
|
||||
{
|
||||
ina219ValueArray[_addr]->shuntvoltage = instanceIna219(_addr)->getShuntVoltage_mV();
|
||||
value.valD = ina219ValueArray[_addr]->shuntvoltage;
|
||||
regEvent(value.valD, "Ina219shuntvoltage");
|
||||
}
|
||||
|
||||
~Ina219shuntvoltage(){};
|
||||
};
|
||||
|
||||
class Power_mW : public IoTItem {
|
||||
public:
|
||||
Power_mW(String parameters) : IoTItem(parameters) {
|
||||
class Ina219curr : public IoTItem
|
||||
{
|
||||
private:
|
||||
uint8_t _addr = 0;
|
||||
|
||||
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
|
||||
public:
|
||||
Ina219curr(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
String sAddr;
|
||||
jsonRead(parameters, "addr", sAddr);
|
||||
if (sAddr == "")
|
||||
scanI2C();
|
||||
else
|
||||
_addr = hexStringToUint8(sAddr);
|
||||
}
|
||||
void doByInterval() {
|
||||
|
||||
power_mW = ina219.getPower_mW();
|
||||
value.valD = power_mW;
|
||||
|
||||
regEvent(value.valD, "Ina219power"); // TODO: найти способ понимания ошибки получения данных
|
||||
|
||||
void doByInterval()
|
||||
{
|
||||
value.valD = instanceIna219(_addr)->getCurrent_mA();
|
||||
regEvent(value.valD, "Ina219curr");
|
||||
}
|
||||
|
||||
~Power_mW(){};
|
||||
~Ina219curr(){};
|
||||
};
|
||||
void* getAPI_Ina219(String subtype, String param) {
|
||||
if (subtype == F("Ina219curr")) {
|
||||
ina219.begin();
|
||||
|
||||
class Ina219Power_mW : public IoTItem
|
||||
{
|
||||
private:
|
||||
uint8_t _addr = 0;
|
||||
|
||||
public:
|
||||
Ina219Power_mW(String parameters) : IoTItem(parameters)
|
||||
{
|
||||
String sAddr;
|
||||
jsonRead(parameters, "addr", sAddr);
|
||||
if (sAddr == "")
|
||||
scanI2C();
|
||||
else
|
||||
_addr = hexStringToUint8(sAddr);
|
||||
}
|
||||
void doByInterval()
|
||||
{
|
||||
value.valD = instanceIna219(_addr)->getPower_mW();
|
||||
regEvent(value.valD, "Ina219power"); // TODO: найти способ понимания ошибки получения данных
|
||||
}
|
||||
|
||||
~Ina219Power_mW(){};
|
||||
};
|
||||
void *getAPI_Ina219(String subtype, String param)
|
||||
{
|
||||
if (subtype == F("Ina219curr"))
|
||||
{
|
||||
return new Ina219curr(param);
|
||||
} else if (subtype == F("Ina219shuntvoltage")) {
|
||||
ina219.begin();
|
||||
}
|
||||
else if (subtype == F("Ina219shuntvoltage"))
|
||||
{
|
||||
return new Ina219shuntvoltage(param);
|
||||
} else if (subtype == F("power_mW")) {
|
||||
ina219.begin();
|
||||
return new Power_mW(param);
|
||||
} else if (subtype == F("Ina219busvoltage")) {
|
||||
ina219.begin();
|
||||
}
|
||||
else if (subtype == F("Ina219power_mW"))
|
||||
{
|
||||
return new Ina219Power_mW(param);
|
||||
}
|
||||
else if (subtype == F("Ina219busvoltage"))
|
||||
{
|
||||
return new Ina219busvoltage(param);
|
||||
} else if (subtype == F("Ina219loadvoltage")) {
|
||||
ina219.begin();
|
||||
}
|
||||
else if (subtype == F("Ina219loadvoltage"))
|
||||
{
|
||||
return new Ina219loadvoltage(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"widget": "anydatamAmp",
|
||||
"page": "INA 219",
|
||||
"descr": "219 Датчик тока",
|
||||
"addr": "0x40",
|
||||
"int": 10
|
||||
},
|
||||
{
|
||||
@@ -21,17 +22,19 @@
|
||||
"widget": "anydataVlt",
|
||||
"page": "INA 219",
|
||||
"descr": "219 Датчик напряжения",
|
||||
"addr": "0x40",
|
||||
"int": 10
|
||||
},
|
||||
{
|
||||
"global": 0,
|
||||
"name": "INA219 Мощность",
|
||||
"type": "Reading",
|
||||
"subtype": "power_mW",
|
||||
"subtype": "Ina219power_mW",
|
||||
"id": "Ina219power",
|
||||
"widget": "anydatamWtt",
|
||||
"page": "INA 219",
|
||||
"descr": "219 Мощность",
|
||||
"addr": "0x40",
|
||||
"int": 10
|
||||
},
|
||||
{
|
||||
@@ -43,6 +46,7 @@
|
||||
"widget": "anydataVlt",
|
||||
"page": "INA 219",
|
||||
"descr": "219 Напряжение нагрузки",
|
||||
"addr": "0x40",
|
||||
"int": 10
|
||||
},
|
||||
{
|
||||
@@ -54,6 +58,7 @@
|
||||
"widget": "anydatamVlt",
|
||||
"page": "INA 219",
|
||||
"descr": "219 Напряжение шунта",
|
||||
"addr": "0x40",
|
||||
"int": 10
|
||||
}],
|
||||
|
||||
@@ -61,9 +66,9 @@
|
||||
"authorName": "Serghei Crasnicov",
|
||||
"authorContact": "https://t.me/Serghei63",
|
||||
"authorGit": "https://github.com/Serghei63",
|
||||
"specialThanks": "Дмитрий , Serg",
|
||||
"specialThanks": "Дмитрий, Serg, v2.0 - Mitchel @Mit4bmw",
|
||||
"moduleName": "Ina219",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleVersion": "2.0",
|
||||
"usedRam": {
|
||||
"esp32_4mb": 15,
|
||||
"esp8266_4mb": 15
|
||||
@@ -71,14 +76,15 @@
|
||||
"subTypes": [
|
||||
"Ina219curr",
|
||||
"Ina219busvoltage",
|
||||
"power_mW",
|
||||
"Ina219power_mW",
|
||||
"Ina219loadvoltage",
|
||||
"Ina219shuntvoltage"
|
||||
],
|
||||
"title": "Милливатметр постоянного тока",
|
||||
"moduleDesc": "Измеряет постоянный ток до 3.2 ампера, напряжение до 26 вольт и мощность на нагрузке",
|
||||
"propInfo": {
|
||||
"int": "Количество секунд между опросами датчика."
|
||||
"int": "Количество секунд между опросами датчика.",
|
||||
"addr": "Адрес датчика на шине, обычно 0x40. Если оставить поле пустым, то запуститься сканер I2C и подключение к адресу 0x40"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user