From ed7037f280fa0e9069f61d70203692a50e5414df Mon Sep 17 00:00:00 2001 From: Ilya Belyakov Date: Tue, 13 Aug 2024 18:28:37 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=20=D0=BF=D0=BE=D1=80=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20Tca9555=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=20=D0=9D=D0=BE=20=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/Tca9555/Tca9555.cpp | 98 +++++++++++++++++++++++++++ src/modules/exec/Tca9555/modinfo.json | 47 +++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 src/modules/exec/Tca9555/Tca9555.cpp create mode 100644 src/modules/exec/Tca9555/modinfo.json 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