diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index 43c802d9..0c9be041 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -1,4 +1,5 @@ #pragma once +#include #include "classes/IoTGpio.h" //#include "classes/IoTBench.h" diff --git a/src/modules/exec/Tca9555/Tca9555.cpp b/src/modules/exec/Tca9555/Tca9555.cpp new file mode 100644 index 00000000..58007543 --- /dev/null +++ b/src/modules/exec/Tca9555/Tca9555.cpp @@ -0,0 +1,98 @@ +#include "Global.h" +#include "classes/IoTItem.h" +#include "classes/IoTGpio.h" +#include "Wire.h" +#include "TCA9555.h" + + +class Tca9555Driver : public IoTGpio { + private: + TCA9555* _tca; + + public: + Tca9555Driver(int index, TCA9555* tca) : IoTGpio(index) { + _tca = tca; + } + + void pinMode(int pin, uint8_t mode) { + _tca->pinMode1(pin, mode); + } + + void digitalWrite(int pin, uint8_t val) { + _tca->write1(pin, val); + } + + int digitalRead(int pin) { + return _tca->read1(pin); + } + + void digitalInvert(int pin) { + _tca->write1(pin, 1 - _tca->read1(pin)); + } + + ~Tca9555Driver() {}; +}; + + +class Tca9555 : public IoTItem { + private: + String _addr; + Tca9555Driver* _driver; + + public: + Tca9555(String parameters) : IoTItem(parameters) { + _driver = nullptr; + Wire.begin(); + + jsonRead(parameters, "addr", _addr); + if (_addr == "") { + scanI2C(); + return; + } + + int index; + jsonRead(parameters, "index", index); + if (index > 4) { + Serial.println(F("TCA9555 wrong index. Must be 0 - 4")); + return; + } + + int mktype; + TCA9555* tca; + jsonRead(parameters, "mktype", mktype); + if (mktype == 35) { + tca = new TCA9535(hexStringToUint8(_addr)); + } else if (mktype == 55) { + tca = new TCA9555(hexStringToUint8(_addr)); + } else { + Serial.println(F("TCA9555 wrong type. Must be 35 or 55")); + return; + } + + _driver = new Tca9555Driver(index, tca); + } + + void doByInterval() { + if (_addr == "") { + scanI2C(); + return; + } + } + + //возвращает ссылку на экземпляр класса Tca9555Driver + IoTGpio* getGpioDriver() { + return _driver; + } + + ~Tca9555() { + delete _driver; + }; +}; + +void* getAPI_Tca9555(String subtype, String param) { + if (subtype == F("Tca9555")) { + return new Tca9555(param); + } else { + return nullptr; + } +} diff --git a/src/modules/exec/Tca9555/modinfo.json b/src/modules/exec/Tca9555/modinfo.json new file mode 100644 index 00000000..2a4c8b34 --- /dev/null +++ b/src/modules/exec/Tca9555/modinfo.json @@ -0,0 +1,47 @@ +{ + "menuSection": "executive_devices", + "configItem": [ + { + "global": 0, + "name": "Расширитель портов Tca9555", + "type": "Reading", + "subtype": "Tca9555", + "id": "Tca", + "widget": "", + "page": "", + "descr": "", + + "mktype": 55, + "addr": "0x20", + "index": 1 + } + ], + "about": { + "authorName": "Ilya Belyakov", + "authorContact": "https://t.me/Biveraxe", + "authorGit": "https://github.com/biveraxe", + "specialThanks": "", + "moduleName": "Tca9555", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "Расширитель портов Tca9555", + "moduleDesc": "Добавляет в систему дополнительные GPIO для элементов, которые поддерживают такую функцию.", + "propInfo": { + "mktype": "Тип устройства: 55 - TCA9555, 35 - TCA9535", + "addr": "Адрес устройства на шине, обычно 0x20", + "index": "Значения от 1 до 4, где при выборе 1 будет нумерация pin 100-115, при выборе 2 200-215 и т.д." + } + }, + "defActive": false, + "usedLibs": { + "esp32*": [ + "https://github.com/RobTillaart/TCA9555" + ], + "esp82*": [ + "https://github.com/RobTillaart/TCA9555" + ] + } +} \ No newline at end of file diff --git a/src/modules/virtual/Math/SimpleTimePeriod.json b/src/modules/virtual/Math/SimpleTimePeriod.json new file mode 100644 index 00000000..1b402876 --- /dev/null +++ b/src/modules/virtual/Math/SimpleTimePeriod.json @@ -0,0 +1,57 @@ +{ + "mark": "iotm", + "config": [ + { + "global": 0, + "type": "Reading", + "subtype": "IoTMath", + "id": "math", + "widget": "anydataValue", + "page": "Ввод", + "descr": "" + }, + { + "global": 0, + "type": "Reading", + "subtype": "Variable", + "id": "start", + "needSave": 0, + "widget": "inputTm", + "page": "Ввод", + "descr": "Введите время", + "int": "0", + "val": "02:00" + }, + { + "global": 0, + "type": "Reading", + "subtype": "Variable", + "id": "stop", + "needSave": 0, + "widget": "inputTm", + "page": "Ввод", + "descr": "Введите время", + "int": "0", + "val": "02:00" + }, + { + "global": 0, + "type": "Writing", + "subtype": "ButtonOut", + "needSave": 0, + "id": "led", + "widget": "toggle", + "page": "Ввод", + "descr": "Освещение", + "int": 0, + "inv": 0, + "pin": 2 + } + ] +} + +scenario=>if start | stop then { +if math.nowInTimePeriod(start, stop) then { +led = 1 +} else led = 0 +} \ No newline at end of file diff --git a/tools/patch8266_16m.py b/tools/patch8266_16m.py index 75aecbb9..b65c22de 100644 --- a/tools/patch8266_16m.py +++ b/tools/patch8266_16m.py @@ -28,4 +28,4 @@ try: fw.write(newData) print(f"Файл изменён, ОК! {mainPyPath}") except FileNotFoundError: - print("Файл не найден или не удается открыть") \ No newline at end of file + print("Файл не найден или не удается открыть")