mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 06:32:19 +03:00
@@ -96,7 +96,24 @@
|
||||
"num": 6
|
||||
},
|
||||
{
|
||||
"name": "7. Таймер",
|
||||
"name": "7. PWM ESP32",
|
||||
"type": "Writing",
|
||||
"subtype": "Pwm32",
|
||||
"id": "pwm",
|
||||
"widget": "range",
|
||||
"page": "Кнопки",
|
||||
"descr": "PWM",
|
||||
"int": 0,
|
||||
"pin": 2,
|
||||
"freq": 5000,
|
||||
"ledChannel": 2,
|
||||
"PWM_resolution": 12,
|
||||
"val": 0,
|
||||
"apin": -1,
|
||||
"num": 7
|
||||
},
|
||||
{
|
||||
"name": "8. Таймер",
|
||||
"type": "Writing",
|
||||
"subtype": "Timer",
|
||||
"id": "timer",
|
||||
@@ -108,13 +125,13 @@
|
||||
"ticker": 0,
|
||||
"repeat": 0,
|
||||
"needSave": 0,
|
||||
"num": 7
|
||||
"num": 8
|
||||
},
|
||||
{
|
||||
"header": "Сенсоры"
|
||||
},
|
||||
{
|
||||
"name": "8. Cенсор температуры AHT20",
|
||||
"name": "9. Cенсор температуры AHT20",
|
||||
"type": "Reading",
|
||||
"subtype": "Aht20t",
|
||||
"id": "Temp20",
|
||||
@@ -124,10 +141,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x38",
|
||||
"round": 1,
|
||||
"num": 8
|
||||
"num": 9
|
||||
},
|
||||
{
|
||||
"name": "9. Cенсор влажности AHT20",
|
||||
"name": "10. Cенсор влажности AHT20",
|
||||
"type": "Reading",
|
||||
"subtype": "Aht20h",
|
||||
"id": "Hum20",
|
||||
@@ -137,10 +154,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x38",
|
||||
"round": 1,
|
||||
"num": 9
|
||||
"num": 10
|
||||
},
|
||||
{
|
||||
"name": "10. Аналоговый сенсор",
|
||||
"name": "11. Аналоговый сенсор",
|
||||
"type": "Reading",
|
||||
"subtype": "AnalogAdc",
|
||||
"id": "t",
|
||||
@@ -154,10 +171,10 @@
|
||||
"pin": 0,
|
||||
"int": 15,
|
||||
"avgSteps": 1,
|
||||
"num": 10
|
||||
"num": 11
|
||||
},
|
||||
{
|
||||
"name": "11. Cенсор температуры Bme280",
|
||||
"name": "12. Cенсор температуры Bme280",
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280t",
|
||||
"id": "tmp3",
|
||||
@@ -167,10 +184,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1,
|
||||
"num": 11
|
||||
"num": 12
|
||||
},
|
||||
{
|
||||
"name": "12. Cенсор давления Bme280",
|
||||
"name": "13. Cенсор давления Bme280",
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280p",
|
||||
"id": "Press3",
|
||||
@@ -180,10 +197,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1,
|
||||
"num": 12
|
||||
"num": 13
|
||||
},
|
||||
{
|
||||
"name": "13. Cенсор влажности Bme280",
|
||||
"name": "14. Cенсор влажности Bme280",
|
||||
"type": "Reading",
|
||||
"subtype": "Bme280h",
|
||||
"id": "Hum3",
|
||||
@@ -193,10 +210,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1,
|
||||
"num": 13
|
||||
"num": 14
|
||||
},
|
||||
{
|
||||
"name": "14. Cенсор температуры Bmp280",
|
||||
"name": "15. Cенсор температуры Bmp280",
|
||||
"type": "Reading",
|
||||
"subtype": "Bmp280t",
|
||||
"id": "tmp3",
|
||||
@@ -206,10 +223,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1,
|
||||
"num": 14
|
||||
"num": 15
|
||||
},
|
||||
{
|
||||
"name": "15. Cенсор давления Bmp280",
|
||||
"name": "16. Cенсор давления Bmp280",
|
||||
"type": "Reading",
|
||||
"subtype": "Bmp280p",
|
||||
"id": "Press3",
|
||||
@@ -219,10 +236,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x77",
|
||||
"round": 1,
|
||||
"num": 15
|
||||
"num": 16
|
||||
},
|
||||
{
|
||||
"name": "16. Cенсор температуры dht11",
|
||||
"name": "17. Cенсор температуры dht11",
|
||||
"type": "Reading",
|
||||
"subtype": "Dht1122t",
|
||||
"id": "tmp3",
|
||||
@@ -232,10 +249,10 @@
|
||||
"int": 15,
|
||||
"pin": 0,
|
||||
"senstype": "dht11",
|
||||
"num": 16
|
||||
"num": 17
|
||||
},
|
||||
{
|
||||
"name": "17. Cенсор влажности dht11",
|
||||
"name": "18. Cенсор влажности dht11",
|
||||
"type": "Reading",
|
||||
"subtype": "Dht1122h",
|
||||
"id": "Hum3",
|
||||
@@ -245,10 +262,10 @@
|
||||
"int": 15,
|
||||
"pin": 0,
|
||||
"senstype": "dht11",
|
||||
"num": 17
|
||||
"num": 18
|
||||
},
|
||||
{
|
||||
"name": "18. Cенсор температуры ds18b20",
|
||||
"name": "19. Cенсор температуры ds18b20",
|
||||
"type": "Reading",
|
||||
"subtype": "Ds18b20",
|
||||
"id": "dstmp",
|
||||
@@ -260,10 +277,10 @@
|
||||
"index": 0,
|
||||
"addr": "",
|
||||
"round": 1,
|
||||
"num": 18
|
||||
"num": 19
|
||||
},
|
||||
{
|
||||
"name": "19. Cенсор температуры GY21",
|
||||
"name": "20. Cенсор температуры GY21",
|
||||
"type": "Reading",
|
||||
"subtype": "GY21t",
|
||||
"id": "tmp4",
|
||||
@@ -272,10 +289,10 @@
|
||||
"descr": "Температура",
|
||||
"round": 1,
|
||||
"int": 15,
|
||||
"num": 19
|
||||
"num": 20
|
||||
},
|
||||
{
|
||||
"name": "20. Cенсор влажности GY21",
|
||||
"name": "21. Cенсор влажности GY21",
|
||||
"type": "Reading",
|
||||
"subtype": "GY21h",
|
||||
"id": "Hum4",
|
||||
@@ -284,10 +301,10 @@
|
||||
"descr": "Влажность",
|
||||
"round": 1,
|
||||
"int": 15,
|
||||
"num": 20
|
||||
"num": 21
|
||||
},
|
||||
{
|
||||
"name": "21. Cенсор температуры HDC1080",
|
||||
"name": "22. Cенсор температуры HDC1080",
|
||||
"type": "Reading",
|
||||
"subtype": "Hdc1080t",
|
||||
"id": "Temp1080",
|
||||
@@ -297,10 +314,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x40",
|
||||
"round": 1,
|
||||
"num": 21
|
||||
"num": 22
|
||||
},
|
||||
{
|
||||
"name": "22. Cенсор влажности HDC1080",
|
||||
"name": "23. Cенсор влажности HDC1080",
|
||||
"type": "Reading",
|
||||
"subtype": "Hdc1080h",
|
||||
"id": "Hum1080",
|
||||
@@ -310,10 +327,10 @@
|
||||
"int": 15,
|
||||
"addr": "0x40",
|
||||
"round": 1,
|
||||
"num": 22
|
||||
"num": 23
|
||||
},
|
||||
{
|
||||
"name": "23. Cенсор температуры MAX6675",
|
||||
"name": "24. Cенсор температуры MAX6675",
|
||||
"type": "Reading",
|
||||
"subtype": "Max6675t",
|
||||
"id": "maxtmp",
|
||||
@@ -324,11 +341,11 @@
|
||||
"DO": 12,
|
||||
"CS": 13,
|
||||
"CLK": 14,
|
||||
"num": 23
|
||||
"num": 24
|
||||
},
|
||||
{
|
||||
"name": "24. Сканер кнопок 433 MHz",
|
||||
"num": 24,
|
||||
"name": "25. Сканер кнопок 433 MHz",
|
||||
"num": 25,
|
||||
"type": "Reading",
|
||||
"subtype": "RCswitch",
|
||||
"id": "rsw",
|
||||
@@ -337,7 +354,7 @@
|
||||
"pinTx": 12
|
||||
},
|
||||
{
|
||||
"name": "25. Cенсор температуры Sht20",
|
||||
"name": "26. Cенсор температуры Sht20",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht20t",
|
||||
"id": "tmp2",
|
||||
@@ -346,10 +363,10 @@
|
||||
"descr": "Температура",
|
||||
"int": 15,
|
||||
"round": 1,
|
||||
"num": 25
|
||||
"num": 26
|
||||
},
|
||||
{
|
||||
"name": "26. Cенсор влажности Sht20",
|
||||
"name": "27. Cенсор влажности Sht20",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht20h",
|
||||
"id": "Hum2",
|
||||
@@ -358,11 +375,35 @@
|
||||
"descr": "Влажность",
|
||||
"int": 15,
|
||||
"round": 1,
|
||||
"num": 26
|
||||
"num": 27
|
||||
},
|
||||
{
|
||||
"name": "27. Сонар HC-SR04",
|
||||
"num": 27,
|
||||
"name": "28. Cенсор температуры Sht30",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht30t",
|
||||
"id": "tmp30",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "SHT30 Температура",
|
||||
"int": 15,
|
||||
"round": 1,
|
||||
"num": 28
|
||||
},
|
||||
{
|
||||
"name": "29. Cенсор влажности Sht30",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht30h",
|
||||
"id": "Hum30",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "SHT30 Влажность",
|
||||
"int": 15,
|
||||
"round": 1,
|
||||
"num": 29
|
||||
},
|
||||
{
|
||||
"name": "30. Сонар HC-SR04",
|
||||
"num": 30,
|
||||
"type": "Reading",
|
||||
"subtype": "Sonar",
|
||||
"id": "sonar",
|
||||
@@ -377,7 +418,7 @@
|
||||
"header": "Расширения"
|
||||
},
|
||||
{
|
||||
"name": "28. Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"name": "31. Поддержка DS1302(1), DS1307(2), DS3231(3), RX8025(4)",
|
||||
"type": "Reading",
|
||||
"subtype": "IarduinoRTC",
|
||||
"id": "RTC",
|
||||
@@ -391,10 +432,10 @@
|
||||
"dat": 4,
|
||||
"defFormat": "d-m-Y",
|
||||
"ticker": 0,
|
||||
"num": 28
|
||||
"num": 31
|
||||
},
|
||||
{
|
||||
"name": "29. Расширитель портов Mcp23017",
|
||||
"name": "32. Расширитель портов Mcp23017",
|
||||
"type": "Reading",
|
||||
"subtype": "Mcp23017",
|
||||
"id": "Mcp",
|
||||
@@ -404,10 +445,10 @@
|
||||
"int": "0",
|
||||
"addr": "0x20",
|
||||
"index": 1,
|
||||
"num": 29
|
||||
"num": 32
|
||||
},
|
||||
{
|
||||
"name": "30. Доп. функции системы",
|
||||
"name": "33. Доп. функции системы",
|
||||
"type": "Reading",
|
||||
"subtype": "SysExt",
|
||||
"id": "SysExt",
|
||||
@@ -415,10 +456,10 @@
|
||||
"page": "",
|
||||
"descr": "",
|
||||
"int": 15,
|
||||
"num": 30
|
||||
"num": 33
|
||||
},
|
||||
{
|
||||
"name": "31. Переменная",
|
||||
"name": "34. Переменная",
|
||||
"type": "Reading",
|
||||
"subtype": "Variable",
|
||||
"id": "var",
|
||||
@@ -427,6 +468,6 @@
|
||||
"descr": "",
|
||||
"int": "0",
|
||||
"val": "0",
|
||||
"num": 31
|
||||
"num": 34
|
||||
}
|
||||
]
|
||||
@@ -62,6 +62,7 @@ lib_deps =
|
||||
adafruit/MAX6675 library
|
||||
rc-switch @ ^2.6.4
|
||||
robtillaart/SHT2x@^0.1.1
|
||||
WEMOS SHT3x@1.0.0
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
adafruit/Adafruit BusIO @ ^1.13.0
|
||||
build_src_filter =
|
||||
@@ -70,6 +71,7 @@ build_src_filter =
|
||||
+<modules\exec\ButtonOut>
|
||||
+<modules\exec\IoTServo>
|
||||
+<modules\exec\Mp3>
|
||||
+<modules\exec\Pwm8266>
|
||||
+<modules\exec\Timer>
|
||||
+<modules\sensors\Aht20>
|
||||
+<modules\sensors\AnalogAdc>
|
||||
@@ -82,6 +84,7 @@ build_src_filter =
|
||||
+<modules\sensors\Max6675>
|
||||
+<modules\sensors\RCswitch>
|
||||
+<modules\sensors\Sht20>
|
||||
+<modules\sensors\Sht30>
|
||||
+<modules\sensors\Sonar>
|
||||
+<modules\system\IarduinoRTC>
|
||||
+<modules\system\Mcp23017>
|
||||
@@ -103,6 +106,7 @@ lib_deps =
|
||||
adafruit/MAX6675 library
|
||||
rc-switch @ ^2.6.4
|
||||
robtillaart/SHT2x@^0.1.1
|
||||
WEMOS SHT3x@1.0.0
|
||||
adafruit/Adafruit MCP23017 Arduino Library@^2.0.2
|
||||
adafruit/Adafruit BusIO @ ^1.13.0
|
||||
build_src_filter =
|
||||
@@ -111,6 +115,7 @@ build_src_filter =
|
||||
+<modules\exec\ButtonOut>
|
||||
+<modules\exec\IoTServo>
|
||||
+<modules\exec\Mp3>
|
||||
+<modules\exec\Pwm32>
|
||||
+<modules\exec\Timer>
|
||||
+<modules\sensors\Aht20>
|
||||
+<modules\sensors\AnalogAdc>
|
||||
@@ -123,6 +128,7 @@ build_src_filter =
|
||||
+<modules\sensors\Max6675>
|
||||
+<modules\sensors\RCswitch>
|
||||
+<modules\sensors\Sht20>
|
||||
+<modules\sensors\Sht30>
|
||||
+<modules\sensors\Sonar>
|
||||
+<modules\system\IarduinoRTC>
|
||||
+<modules\system\Mcp23017>
|
||||
|
||||
@@ -5,6 +5,7 @@ void* getAPI_ButtonIn(String subtype, String params);
|
||||
void* getAPI_ButtonOut(String subtype, String params);
|
||||
void* getAPI_IoTServo(String subtype, String params);
|
||||
void* getAPI_Mp3(String subtype, String params);
|
||||
void* getAPI_Pwm32(String subtype, String params);
|
||||
void* getAPI_Timer(String subtype, String params);
|
||||
void* getAPI_Aht20(String subtype, String params);
|
||||
void* getAPI_AnalogAdc(String subtype, String params);
|
||||
@@ -17,6 +18,7 @@ void* getAPI_Hdc1080(String subtype, String params);
|
||||
void* getAPI_Max6675(String subtype, String params);
|
||||
void* getAPI_RCswitch(String subtype, String params);
|
||||
void* getAPI_Sht20(String subtype, String params);
|
||||
void* getAPI_Sht30(String subtype, String params);
|
||||
void* getAPI_Sonar(String subtype, String params);
|
||||
void* getAPI_IarduinoRTC(String subtype, String params);
|
||||
void* getAPI_Mcp23017(String subtype, String params);
|
||||
@@ -30,6 +32,7 @@ if ((tmpAPI = getAPI_ButtonIn(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_ButtonOut(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_IoTServo(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mp3(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Pwm32(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Timer(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Aht20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_AnalogAdc(subtype, params)) != nullptr) return tmpAPI;
|
||||
@@ -42,6 +45,7 @@ if ((tmpAPI = getAPI_Hdc1080(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Max6675(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_RCswitch(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sht20(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sht30(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Sonar(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_IarduinoRTC(subtype, params)) != nullptr) return tmpAPI;
|
||||
if ((tmpAPI = getAPI_Mcp23017(subtype, params)) != nullptr) return tmpAPI;
|
||||
|
||||
74
src/modules/exec/Pwm32/Pwm32.cpp
Normal file
74
src/modules/exec/Pwm32/Pwm32.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
#include "Arduino.h"
|
||||
|
||||
#include "esp32-hal.h"
|
||||
#include "esp32-hal-ledc.h"
|
||||
|
||||
extern IoTGpio IoTgpio;
|
||||
|
||||
class Pwm32 : public IoTItem {
|
||||
private:
|
||||
int _pin;
|
||||
int _freq;
|
||||
int _apin, _oldValue;
|
||||
bool _freezVal = true;
|
||||
int _ledChannel;
|
||||
int _resolution;
|
||||
|
||||
public:
|
||||
Pwm32(String parameters): IoTItem(parameters) {
|
||||
_interval = _interval / 1000; // корректируем величину интервала int, теперь он в миллисекундах
|
||||
|
||||
jsonRead(parameters, "pin", _pin);
|
||||
jsonRead(parameters, "freq", _freq);
|
||||
jsonRead(parameters, "ledChannel", _ledChannel);
|
||||
jsonRead(parameters, "PWM_resolution", _resolution);
|
||||
|
||||
pinMode(_pin, OUTPUT);
|
||||
ledcSetup(_ledChannel, _freq, _resolution);
|
||||
ledcAttachPin(_pin, _ledChannel);
|
||||
ledcWrite(_ledChannel, value.valD);
|
||||
|
||||
_resolution = pow(2, _resolution); // переводим биты в значение
|
||||
|
||||
jsonRead(parameters, "apin", _apin);
|
||||
if (_apin >= 0) IoTgpio.pinMode(_apin, INPUT);
|
||||
}
|
||||
|
||||
void doByInterval() {
|
||||
if (_apin >= 0) {
|
||||
value.valD = map(IoTgpio.analogRead(_apin), 0, 4095, 0, _resolution);
|
||||
if (value.valD > _resolution - 6) value.valD = _resolution; // нивелируем погрешность установки мин и макс
|
||||
else if (value.valD < 9) value.valD = 0; // из-за смягчения значений
|
||||
if (abs(_oldValue - value.valD) > 20) {
|
||||
_oldValue = value.valD;
|
||||
ledcWrite(_ledChannel, value.valD);
|
||||
_freezVal = false;
|
||||
} else {
|
||||
if (!_freezVal) { // отправляем событие только раз после серии изменений, чтоб не спамить события
|
||||
regEvent(value.valD, "Pwm32");
|
||||
_freezVal = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setValue(IoTValue Value) {
|
||||
value = Value;
|
||||
ledcWrite(_ledChannel, value.valD);
|
||||
regEvent(value.valD, "Pwm32");
|
||||
}
|
||||
//=======================================================================================================
|
||||
|
||||
~Pwm32() {};
|
||||
};
|
||||
|
||||
|
||||
void* getAPI_Pwm32(String subtype, String param) {
|
||||
if (subtype == F("Pwm32")) {
|
||||
return new Pwm32(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
44
src/modules/exec/Pwm32/modinfo.json
Normal file
44
src/modules/exec/Pwm32/modinfo.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "PWM ESP32",
|
||||
"type": "Writing",
|
||||
"subtype": "Pwm32",
|
||||
"id": "pwm",
|
||||
"widget": "range",
|
||||
"page": "Кнопки",
|
||||
"descr": "PWM",
|
||||
"int": 0,
|
||||
"pin": 2,
|
||||
"freq": 5000,
|
||||
"ledChannel": 2,
|
||||
"PWM_resolution": 10,
|
||||
"val": 0,
|
||||
"apin": -1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Avaks",
|
||||
"authorContact": "https://t.me/Avaks",
|
||||
"authorGit": "https://github.com/avaksru",
|
||||
"specialThanks": "Serghei Crasnicov @Serghei63",
|
||||
"moduleName": "Pwm32",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет управлять Широтно-Импульсной Модуляцией на конкретном пине платы.",
|
||||
"propInfo": {
|
||||
"int": "Количество миллисекунд между опросами аналога. 0 - выключено.",
|
||||
"pin": "Управляемый пин",
|
||||
"apin": "Номер GPIO аналогового пина. Если -1, то функция отключена.",
|
||||
"ledChannel": "Канал ШИМ",
|
||||
"PWM_resolution": "Разрешение, определяет диапазон значений от 1 до 16 => от 1 до 65536",
|
||||
"freq": "Частота"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": []
|
||||
}
|
||||
}
|
||||
64
src/modules/exec/Pwm8266/Pwm8266.cpp
Normal file
64
src/modules/exec/Pwm8266/Pwm8266.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
#include "Arduino.h"
|
||||
|
||||
extern IoTGpio IoTgpio;
|
||||
|
||||
class Pwm8266 : public IoTItem {
|
||||
private:
|
||||
int _pin;
|
||||
int _freq;
|
||||
int _apin, _oldValue;
|
||||
bool _freezVal = true;
|
||||
|
||||
public:
|
||||
Pwm8266(String parameters): IoTItem(parameters) {
|
||||
_interval = _interval / 1000; // корректируем величину интервала int, теперь он в миллисекундах
|
||||
|
||||
jsonRead(parameters, "pin", _pin);
|
||||
jsonRead(parameters, "freq", _freq);
|
||||
|
||||
IoTgpio.pinMode(_pin, OUTPUT);
|
||||
analogWriteFreq(_freq);
|
||||
IoTgpio.analogWrite(_pin, value.valD);
|
||||
|
||||
jsonRead(parameters, "apin", _apin);
|
||||
if (_apin >= 0) IoTgpio.pinMode(_apin, INPUT);
|
||||
}
|
||||
|
||||
void doByInterval() {
|
||||
if (_apin >= 0) {
|
||||
value.valD = IoTgpio.analogRead(_apin);
|
||||
if (value.valD > 1018) value.valD = 1024; // нивелируем погрешность установки мин и макс
|
||||
else if (value.valD < 9) value.valD = 0; // из-за смягчения значений
|
||||
if (abs(_oldValue - value.valD) > 5) {
|
||||
_oldValue = value.valD;
|
||||
analogWrite(_pin,value.valD);
|
||||
_freezVal = false;
|
||||
} else {
|
||||
if (!_freezVal) { // отправляем событие только раз после серии изменений, чтоб не спамить события
|
||||
regEvent(value.valD, "Pwm8266");
|
||||
_freezVal = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setValue(IoTValue Value) {
|
||||
value = Value;
|
||||
IoTgpio.analogWrite(_pin, value.valD);
|
||||
regEvent(value.valD, "Pwm8266");
|
||||
}
|
||||
//=======================================================================================================
|
||||
|
||||
~Pwm8266() {};
|
||||
};
|
||||
|
||||
|
||||
void* getAPI_Pwm8266(String subtype, String param) {
|
||||
if (subtype == F("Pwm8266")) {
|
||||
return new Pwm8266(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
40
src/modules/exec/Pwm8266/modinfo.json
Normal file
40
src/modules/exec/Pwm8266/modinfo.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"menuSection": "Модули управления",
|
||||
|
||||
"configItem": [{
|
||||
"name": "PWM ESP8266",
|
||||
"type": "Writing",
|
||||
"subtype": "Pwm8266",
|
||||
"id": "pwm",
|
||||
"widget": "range",
|
||||
"page": "Кнопки",
|
||||
"descr": "PWM",
|
||||
"int": 0,
|
||||
"pin": 15,
|
||||
"freq": 5000,
|
||||
"val": 0,
|
||||
"apin": -1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Avaks",
|
||||
"authorContact": "https://t.me/Avaks",
|
||||
"authorGit": "https://github.com/avaksru",
|
||||
"specialThanks": "Serghei Crasnicov @Serghei63",
|
||||
"moduleName": "Pwm8266",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет управлять Широтно-Импульсной Модуляцией на конкретном пине платы.",
|
||||
"propInfo": {
|
||||
"int": "Количество миллисекунд между опросами аналога. 0 - выключено.",
|
||||
"pin": "Управляемый пин",
|
||||
"apin": "Номер GPIO аналогового пина. Если -1, то функция отключена.",
|
||||
"freq": "Частота"
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp8266_4mb": []
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
"propInfo": {
|
||||
"pinRx": "GPIO номер, к которому подключен радио приемник 433 MHz. Если < 0, то приемник выключен",
|
||||
"pinTx": "GPIO номер, к которому подключен радио передатчик 433 MHz. Если < 0, то передатчик выключен",
|
||||
"int": "Количество миллисекунд между опросами датчика. 0 - читаем постоянно. (устранение повторений при нажатой кнопке)"
|
||||
"int": "Количество миллисекунд между опросами датчика. 0 - выключено. (устранение повторений при нажатой кнопке)"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
61
src/modules/sensors/Sht30/Sht30.cpp
Normal file
61
src/modules/sensors/Sht30/Sht30.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
/******************************************************************
|
||||
Simple library for the WEMOS SHT30 Shield.
|
||||
|
||||
https://github.com/wemos/WEMOS_SHT3x_Arduino_Library
|
||||
|
||||
adapted for version 4 @Serghei63
|
||||
******************************************************************/
|
||||
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
|
||||
#include "Wire.h"
|
||||
#include <WEMOS_SHT3X.h>
|
||||
|
||||
SHT3X sht30(0x45);
|
||||
|
||||
class Sht30t : public IoTItem {
|
||||
public:
|
||||
Sht30t(String parameters): IoTItem(parameters) { }
|
||||
|
||||
void doByInterval() {
|
||||
if(sht30.get()==0){
|
||||
value.valD = sht30.cTemp;
|
||||
|
||||
SerialPrint("E", "Sensor Sht30t", "OK");
|
||||
|
||||
if (value.valD < -46.85F) regEvent(value.valD, "Sht30t"); // TODO: найти способ понимания ошибки получения данных
|
||||
else SerialPrint("E", "Sensor Sht30t", "Error");
|
||||
}
|
||||
}
|
||||
~Sht30t() {};
|
||||
};
|
||||
|
||||
class Sht30h : public IoTItem {
|
||||
public:
|
||||
Sht30h(String parameters): IoTItem(parameters) { }
|
||||
|
||||
void doByInterval() {
|
||||
if(sht30.get()==0){
|
||||
value.valD = sht30.humidity;
|
||||
|
||||
SerialPrint("E", "Sensor Sht30h", "OK");
|
||||
if (value.valD != -6) regEvent(value.valD, "Sht30h"); // TODO: найти способ понимания ошибки получения данных
|
||||
else SerialPrint("E", "Sensor Sht30h", "Error");
|
||||
}
|
||||
}
|
||||
~Sht30h() {};
|
||||
};
|
||||
|
||||
|
||||
void* getAPI_Sht30(String subtype, String param) {
|
||||
if (subtype == F("Sht30t")){
|
||||
return new Sht30t(param);
|
||||
}
|
||||
if (subtype == F("Sht30h")) {
|
||||
return new Sht30h(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
50
src/modules/sensors/Sht30/modinfo.json
Normal file
50
src/modules/sensors/Sht30/modinfo.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"menuSection": "Сенсоры",
|
||||
|
||||
"configItem": [{
|
||||
"name": "Cенсор температуры Sht30",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht30t",
|
||||
"id": "tmp30",
|
||||
"widget": "anydataTmp",
|
||||
"page": "Сенсоры",
|
||||
"descr": "SHT30 Температура",
|
||||
"int": 15,
|
||||
"round": 1
|
||||
},
|
||||
{
|
||||
"name": "Cенсор влажности Sht30",
|
||||
"type": "Reading",
|
||||
"subtype": "Sht30h",
|
||||
"id": "Hum30",
|
||||
"widget": "anydataHum",
|
||||
"page": "Сенсоры",
|
||||
"descr": "SHT30 Влажность",
|
||||
"int": 15,
|
||||
"round": 1
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Serghei Crasnicov",
|
||||
"authorContact": "https://t.me/Serghei63",
|
||||
"authorGit": "https://github.com/Serghei63",
|
||||
"specialThanks": "",
|
||||
"moduleName": "Sht30",
|
||||
"moduleVersion": "1.0",
|
||||
"moduleDesc": "Позволяет получить температуру и влажность с датчика Sht30.",
|
||||
"propInfo": {
|
||||
"int": "Количество секунд между опросами датчика."
|
||||
}
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"devices": {
|
||||
"esp32_4mb": [
|
||||
"WEMOS SHT3x@1.0.0"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"WEMOS SHT3x@1.0.0"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user