From d4c2eeb752747b33a48c69a14f831eea71db7fe3 Mon Sep 17 00:00:00 2001 From: biver Date: Mon, 28 Nov 2022 07:46:15 +0300 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=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D1=83=20Mcp23008?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/Mcp23008/Mcp23008.cpp | 85 ++++++++++++++++++++++++++ src/modules/exec/Mcp23008/modinfo.json | 67 ++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/modules/exec/Mcp23008/Mcp23008.cpp create mode 100644 src/modules/exec/Mcp23008/modinfo.json diff --git a/src/modules/exec/Mcp23008/Mcp23008.cpp b/src/modules/exec/Mcp23008/Mcp23008.cpp new file mode 100644 index 00000000..fef91121 --- /dev/null +++ b/src/modules/exec/Mcp23008/Mcp23008.cpp @@ -0,0 +1,85 @@ +#include "Global.h" +#include "classes/IoTItem.h" +#include "classes/IoTGpio.h" +#include + +class Mcp23008Driver : public IoTGpio { + private: + Adafruit_MCP23X08 _mcp; + + public: + Mcp23008Driver(int index, String addr) : IoTGpio(index) { + if (!_mcp.begin_I2C(hexStringToUint8(addr))) { + Serial.println("MCP23X08 Init Error."); + } + } + + void pinMode(uint8_t pin, uint8_t mode) { + _mcp.pinMode(pin, mode); + } + + void digitalWrite(uint8_t pin, uint8_t val) { + _mcp.digitalWrite(pin, val); + } + + int digitalRead(uint8_t pin) { + return _mcp.digitalRead(pin); + } + + void digitalInvert(uint8_t pin) { + _mcp.digitalWrite(pin, 1 - _mcp.digitalRead(pin)); + } + + ~Mcp23008Driver() {}; +}; + + +class Mcp23008 : public IoTItem { + private: + Mcp23008Driver* _driver; + String _addr; + + public: + Mcp23008(String parameters) : IoTItem(parameters) { + _driver = nullptr; + + jsonRead(parameters, "addr", _addr); + if (_addr == "") { + scanI2C(); + return; + } + + int index; + jsonRead(parameters, "index", index); + if (index > 4) { + Serial.println("MCP23X08 wrong index. Must be 0 - 4"); + return; + } + + _driver = new Mcp23008Driver(index, _addr); + } + + void doByInterval() { + if (_addr == "") { + scanI2C(); + return; + } + } + + //возвращает ссылку на экземпляр класса Mcp23008Driver + IoTGpio* getGpioDriver() { + return _driver; + } + + ~Mcp23008() { + delete _driver; + }; +}; + +void* getAPI_Mcp23008(String subtype, String param) { + if (subtype == F("Mcp23008")) { + return new Mcp23008(param); + } else { + return nullptr; + } +} diff --git a/src/modules/exec/Mcp23008/modinfo.json b/src/modules/exec/Mcp23008/modinfo.json new file mode 100644 index 00000000..6181b062 --- /dev/null +++ b/src/modules/exec/Mcp23008/modinfo.json @@ -0,0 +1,67 @@ +{ + "menuSection": "Исполнительные устройства", + + "configItem": [{ + "global": 0, + "name": "Расширитель портов Mcp23008", + "type": "Reading", + "subtype": "Mcp23008", + "id": "Mcp", + "widget": "", + "page": "", + "descr": "", + + "int": "0", + "addr": "0x20", + "index": 1 + }], + + "about": { + "authorName": "Ilya Belyakov", + "authorContact": "https://t.me/Biveraxe", + "authorGit": "https://github.com/biveraxe", + "specialThanks": "", + "moduleName": "Mcp23008", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "Расширитель портов Mcp23008", + "moduleDesc": "Добавляет в систему дополнительные GPIO для элементов, которые поддерживают такую функцию.", + "propInfo": { + "int": "Не используется", + "addr": "Адрес устройства на шине, обычно 0x20", + "index": "Значения от 1 до 4, где при выборе 1 будет нумерация pin 100-115, при выборе 2 200-215 и т.д." + } + }, + + "defActive": false, + + "usedLibs": { + "esp32_4mb": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ], + "esp8266_4mb": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ], + "esp8266_1mb": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ], + "esp8266_1mb_ota": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ], + "esp8285_1mb": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ], + "esp8285_1mb_ota": [ + "adafruit/Adafruit Mcp23017 Arduino Library@^2.1.0", + "adafruit/Adafruit BusIO @ ^1.13.2" + ] + } +} \ No newline at end of file