diff --git a/include/Global.h b/include/Global.h index dc991068..56fdd1ab 100644 --- a/include/Global.h +++ b/include/Global.h @@ -49,11 +49,13 @@ #include "Utils/SerialPrint.h" #include "Utils/StringUtils.h" #include "PeriodicTasks.h" +#include "classes/IoTGpio.h" /********************************************************************************************************************* *****************************************глобальные объекты классов*************************************************** **********************************************************************************************************************/ + extern TickerScheduler ts; extern WiFiClient espClient; extern PubSubClient mqtt; diff --git a/include/classes/IoTGpio.h b/include/classes/IoTGpio.h new file mode 100644 index 00000000..49d783fb --- /dev/null +++ b/include/classes/IoTGpio.h @@ -0,0 +1,25 @@ +#pragma once +#include + +class IoTGpio { + public: + IoTGpio(); + ~IoTGpio(); + + void pinMode(uint8_t pin, uint8_t mode); + void digitalWrite(uint8_t pin, uint8_t val); + int digitalRead(uint8_t pin); + int analogRead(uint8_t pin); + void analogReference(uint8_t mode); + void analogWrite(uint8_t pin, int val); + void analogWriteFreq(uint32_t freq); + void analogWriteRange(uint32_t range); + + void regDriver(IoTGpio* newDriver); + + private: + IoTGpio* _ext1; //ссылка на объект доступа к портам свыше 100 + IoTGpio* _ext2; //200 + IoTGpio* _ext3; //300 + IoTGpio* _ext4; //400 +}; \ No newline at end of file diff --git a/include/classes/IoTItem.h b/include/classes/IoTItem.h index ef02379c..d7f65cdf 100644 --- a/include/classes/IoTItem.h +++ b/include/classes/IoTItem.h @@ -1,4 +1,5 @@ #pragma once +#include "classes/IoTGpio.h" struct IoTValue { float valD = 0; @@ -27,6 +28,8 @@ class IoTItem { IoTValue value; // хранение основного значения, котрое обновляется из сценария, execute(), loop() или doByInterval() + IoTGpio* getGpioDriver(); + protected: String _subtype; String _id; diff --git a/src/ESPConfiguration.cpp b/src/ESPConfiguration.cpp index 9e976008..6fe402e4 100644 --- a/src/ESPConfiguration.cpp +++ b/src/ESPConfiguration.cpp @@ -1,4 +1,7 @@ #include "ESPConfiguration.h" +#include "classes/IoTGpio.h" + +extern IoTGpio IoTgpio; std::vector IoTItems; void* getAPI(String subtype, String params); @@ -19,6 +22,8 @@ void configure(String path) { } else { myIoTItem = (IoTItem*)getAPI(subtype, jsonArrayElement); if (myIoTItem) { + IoTGpio* tmp = myIoTItem->getGpioDriver(); + if (tmp) IoTgpio.regDriver(tmp); IoTItems.push_back(myIoTItem); } } diff --git a/src/Global.cpp b/src/Global.cpp index 9edeee54..69a007fe 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -29,6 +29,7 @@ WebSocketsServer standWebSocket = WebSocketsServer(81); /********************************************************************************************************************* ***********************************************глобальные переменные************************************************** **********************************************************************************************************************/ +IoTGpio IoTgpio = {}; String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти и синхронизированна с flash памятью String errorsHeapJson = "{}"; //переменная в которой хранятся все ошибки, находится в оперативной памяти только diff --git a/src/classes/IoTGpio.cpp b/src/classes/IoTGpio.cpp new file mode 100644 index 00000000..e6b75382 --- /dev/null +++ b/src/classes/IoTGpio.cpp @@ -0,0 +1,52 @@ +#include "classes/IoTGpio.h" + + +IoTGpio::IoTGpio(){ + _ext1 = _ext2 = _ext3 = _ext4 = nullptr; +} + +IoTGpio::~IoTGpio(){ + +} + + +void IoTGpio::pinMode(uint8_t pin, uint8_t mode) { + ::pinMode(pin, mode); +} + +void IoTGpio::digitalWrite(uint8_t pin, uint8_t val) { + ::digitalWrite(pin, val); +} + +int IoTGpio::digitalRead(uint8_t pin) { + return ::digitalRead(pin); +} + + + + +int IoTGpio::analogRead(uint8_t pin) { + return ::analogRead(pin); +} + +void IoTGpio::analogReference(uint8_t mode) { + ::analogReference(mode); +} + +void IoTGpio::analogWrite(uint8_t pin, int val) { + ::analogWrite(pin, val); +} + +void IoTGpio::analogWriteFreq(uint32_t freq) { + ::analogWriteFreq(freq); +} + +void IoTGpio::analogWriteRange(uint32_t range) { + ::analogWriteRange(range); +} + + +void IoTGpio::regDriver(IoTGpio* newDriver) { + +} + diff --git a/src/classes/IoTItem.cpp b/src/classes/IoTItem.cpp index db69a31f..ab9ab61d 100644 --- a/src/classes/IoTItem.cpp +++ b/src/classes/IoTItem.cpp @@ -83,4 +83,8 @@ IoTItem* findIoTItem(String name) { // поиск элемента модуля return nullptr; } -IoTItem* myIoTItem; \ No newline at end of file +IoTItem* myIoTItem; + +IoTGpio* IoTItem::getGpioDriver() { + return nullptr; +} \ No newline at end of file diff --git a/src/modules/AnalogAdc.cpp b/src/modules/AnalogAdc.cpp index ff274289..5167ef81 100644 --- a/src/modules/AnalogAdc.cpp +++ b/src/modules/AnalogAdc.cpp @@ -1,6 +1,8 @@ #include "Global.h" #include "Classes/IoTItem.h" +extern IoTGpio IoTgpio; + //Это файл сенсора, в нем осуществляется чтение сенсора. //для добавления сенсора вам нужно скопировать этот файл и заменить в нем текст AnalogAdc на название вашего сенсора //Название должно быть уникальным, коротким и отражать суть сенсора. @@ -32,7 +34,7 @@ class AnalogAdc : public IoTItem { //не используйте delay - помните, что данный loop общий для всех модулей. Если у вас планируется длительная операция, постарайтесь разбить ее на порции //и выполнить за несколько тактов void doByInterval() { - value.valD = analogRead(_pin); + value.valD = IoTgpio.analogRead(_pin); regEvent(value.valD, "AnalogAdc"); //обязательный вызов хотяб один }