diff --git a/src/modules/sensors/Hx711/Hx711.cpp b/src/modules/sensors/Hx711/Hx711.cpp new file mode 100644 index 00000000..9e08c3e4 --- /dev/null +++ b/src/modules/sensors/Hx711/Hx711.cpp @@ -0,0 +1,56 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +#include + + +class GyverHX711g : public IoTItem { + + private: + GyverHX711* _thermocouple = nullptr; + + public: + GyverHX711g(String parameters) : IoTItem(parameters) { + int data, clock, chan; + jsonRead(parameters, "data", data); + jsonRead(parameters, "clock", clock); + jsonRead(parameters, "chan", chan); + _thermocouple = new GyverHX711(data, clock, chan); + + _thermocouple->tare(); // калибровка нуля + } + + void doByInterval() { + if (!_thermocouple->available()) return; + + value.valD = _thermocouple->read(); + regEvent(value.valD, "Hx711"); + } + + IoTValue execute(String command, std::vector ¶m) { + if (command == "tare") { + _thermocouple->tare(); + } else if (command == "sleepMode") { + if (param.size() == 1) { + _thermocouple->sleepMode(param[0].valD); + } + } else if (command == "read") { + value.valD = _thermocouple->read(); + regEvent(value.valD, "Hx711"); + return value; + } + return {}; + } + + ~GyverHX711g() { + if (_thermocouple) delete _thermocouple; + }; +}; + +void* getAPI_Hx711(String subtype, String param) { + if (subtype == F("Hx711")) { + return new GyverHX711g(param); + } else { + return nullptr; + } +} diff --git a/src/modules/sensors/Hx711/modinfo.json b/src/modules/sensors/Hx711/modinfo.json new file mode 100644 index 00000000..6e9ef872 --- /dev/null +++ b/src/modules/sensors/Hx711/modinfo.json @@ -0,0 +1,71 @@ +{ + "menuSection": "Сенсоры", + + "configItem": [{ + "name": "HX711 Cенсор весов", + "type": "Reading", + "subtype": "Hx711", + "id": "hx", + "widget": "anydataDef", + "page": "Весы", + "descr": "HX вес", + "int": 15, + "map": "1024,1024,1,100", + "plus": 0, + "multiply": 1, + "round": 1, + "data": 3, + "clock": 2, + "chan": 2 + }], + + "about": { + "authorName": "Serghei Crasnicov", + "authorContact": "https://t.me/Serghei63", + "authorGit": "https://github.com/Serghei63", + "specialThanks": "", + "moduleName": "Hx711", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "HX711 Cенсор весов", + "moduleDesc": "Позволяет получить вес в килограммах с датчика Hx711", + "propInfo": { + "clock": "GPIO шины данных", + "data": "GPIO шины данных", + "chan": "Канал и усиление: =0 (HX_GAIN128_A) - канал А усиление 128, =1 (HX_GAIN32_B) - канал B усиление 32, =2 (HX_GAIN64_A) - канал А усиление 64", + "int": "Количество секунд между опросами датчика." + }, + "retInfo": "Содержит RAW значение датчика, необходима калибровка", + "funcInfo": [ + { + "name": "tare", + "descr": "Авто установка нуля", + "params": [] + }, + { + "name": "sleepMode", + "descr": "Перевести в режим сна", + "params": ["=1 режим сна, =0 проснуться"] + }, + { + "name": "read", + "descr": "Прочитать текущее значение. Полезно использовать при Int=0 и считывать вес по событию.", + "params": [] + } + ] + }, + + "defActive": true, + + "usedLibs": { + "esp32_4mb": [ + "GyverHX711@1.2" + ], + "esp8266_4mb": [ + "GyverHX711@1.2" + ] + } +} \ No newline at end of file