From 466fad0525323a5eb8d06516d96dd825e1c1b89a Mon Sep 17 00:00:00 2001 From: biver Date: Sun, 13 Nov 2022 21:32:30 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D1=8C=20Ina219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/sensors/Ina219/Ina219.cpp | 136 ++++++++++++++++++++++++ src/modules/sensors/Ina219/modinfo.json | 99 +++++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 src/modules/sensors/Ina219/Ina219.cpp create mode 100644 src/modules/sensors/Ina219/modinfo.json diff --git a/src/modules/sensors/Ina219/Ina219.cpp b/src/modules/sensors/Ina219/Ina219.cpp new file mode 100644 index 00000000..6ab65897 --- /dev/null +++ b/src/modules/sensors/Ina219/Ina219.cpp @@ -0,0 +1,136 @@ +/****************************************************************** + Used Adafruit INA219 Current Sensor + Support for INA219 + https://github.com/adafruit/Adafruit_INA219 + + adapted for version 4dev @Serghei63 + ******************************************************************/ + +#include "Global.h" +#include "classes/IoTItem.h" + +#include +#include + +Adafruit_INA219 ina219; + + 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 { + public: + Ina219loadvoltage(String parameters) : IoTItem(parameters) { + + // Wire.begin(2,0); // Инициализация шины I2C для модуля E01 + } + + void doByInterval() { + + loadvoltage = busvoltage + (shuntvoltage / 1000); + value.valD = loadvoltage; + + regEvent(value.valD, "Ina219loadvoltage"); + } + + ~Ina219loadvoltage(){}; +}; + + class Ina219busvoltage : public IoTItem { + public: + Ina219busvoltage(String parameters) : IoTItem(parameters) { + + // Wire.begin(2,0); // Инициализация шины I2C для модуля E01 + } + + void doByInterval() { + + busvoltage = ina219.getBusVoltage_V(); + value.valD = busvoltage; + + regEvent(value.valD, "Ina219busvoltage"); + } + + ~Ina219busvoltage(){}; +}; + + +class Ina219curr : public IoTItem { + public: + Ina219curr(String parameters) : IoTItem(parameters) { + + // Wire.begin(2,0); // Инициализация шины I2C для модуля E01 + } + 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"); + } + + ~Ina219shuntvoltage(){}; +}; + +class Power_mW : public IoTItem { + public: + Power_mW(String parameters) : IoTItem(parameters) { + + // Wire.begin(2,0); // Инициализация шины I2C для модуля E01 + } + void doByInterval() { + + power_mW = ina219.getPower_mW(); + value.valD = power_mW; + + regEvent(value.valD, "Ina219power"); // TODO: найти способ понимания ошибки получения данных + + } + + ~Power_mW(){}; +}; +void* getAPI_Ina219(String subtype, String param) { + if (subtype == F("Ina219curr")) { + ina219.begin(); + return new Ina219curr(param); + } else if (subtype == F("Ina219shuntvoltage")) { + ina219.begin(); + return new Ina219shuntvoltage(param); + } else if (subtype == F("power_mW")) { + ina219.begin(); + return new Power_mW(param); + } else if (subtype == F("Ina219busvoltage")) { + ina219.begin(); + return new Ina219busvoltage(param); + } else if (subtype == F("Ina219loadvoltage")) { + ina219.begin(); + return new Ina219loadvoltage(param); + } else { + return nullptr; + } +} diff --git a/src/modules/sensors/Ina219/modinfo.json b/src/modules/sensors/Ina219/modinfo.json new file mode 100644 index 00000000..1dc9638f --- /dev/null +++ b/src/modules/sensors/Ina219/modinfo.json @@ -0,0 +1,99 @@ +{ + "menuSection": "Сенсоры", + + "configItem": [{ + "global": 0, + "name": "INA219 Tок", + "type": "Reading", + "subtype": "Ina219curr", + "id": "Ina219current", + "widget": "anydatamAmp", + "page": "INA 219", + "descr": "219 Датчик тока", + "int": 10 + }, + { + "global": 0, + "name": "INA219 Напряжение", + "type": "Reading", + "subtype": "Ina219busvoltage", + "id": "Ina219busvoltage", + "widget": "anydataVlt", + "page": "INA 219", + "descr": "219 Датчик напряжения", + "int": 10 + }, + { + "global": 0, + "name": "INA219 Мощность", + "type": "Reading", + "subtype": "power_mW", + "id": "Ina219power", + "widget": "anydatamWtt", + "page": "INA 219", + "descr": "219 Мощность", + "int": 10 + }, + { + "global": 0, + "name": "INA219 Напряжение нагрузки", + "type": "Reading", + "subtype": "Ina219loadvoltage", + "id": "Ina219loadvoltage", + "widget": "anydataVlt", + "page": "INA 219", + "descr": "219 Напряжение нагрузки", + "int": 10 + }, + { + "global": 0, + "name": "INA219 Шунт", + "type": "Reading", + "subtype": "Ina219shuntvoltage", + "id": "Ina219shuntvoltage", + "widget": "anydatamVlt", + "page": "INA 219", + "descr": "219 Напряжение шунта", + "int": 10 + }], + + "about": { + "authorName": "Serghei Crasnicov", + "authorContact": "https://t.me/Serghei63", + "authorGit": "https://github.com/Serghei63", + "specialThanks": "Дмитрий , Serg", + "moduleName": "Ina219", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "subTypes": [ + "Ina219curr", + "Ina219busvoltage", + "power_mW", + "Ina219loadvoltage", + "Ina219shuntvoltage" + ], + "title": "Милливатметр постоянного тока", + "moduleDesc": "Измеряет постоянный ток до 3.2 ампера, напряжение до 26 вольт и мощность на нагрузке", + "propInfo": { + "int": "Количество секунд между опросами датчика." + } + }, + + "defActive": false, + + "usedLibs": { + "esp32_4mb": [ + "https://github.com/adafruit/Adafruit_INA219.git" + ], + + "esp8266_4mb": [ + "https://github.com/adafruit/Adafruit_INA219.git" + ] + } + + } + + \ No newline at end of file