diff --git a/data_svelte/items.json b/data_svelte/items.json index e295be90..14e8aa0b 100644 --- a/data_svelte/items.json +++ b/data_svelte/items.json @@ -92,8 +92,22 @@ "pin": 2 }, { - "name": "7. MP3 плеер", + "name": "7. Сервопривод", "num": 7, + "type": "Writing", + "subtype": "IoTServo", + "id": "servo", + "widget": "range", + "page": "servo", + "descr": "угол", + "int": 0, + "pin": 12, + "apin": -1, + "amap": "0, 4096, 0, 180" + }, + { + "name": "8. MP3 плеер", + "num": 8, "type": "Reading", "subtype": "Mp3", "id": "mp3", @@ -105,8 +119,8 @@ "volume": 20 }, { - "name": "8. Телеграм-Бот", - "num": 8, + "name": "9. Телеграм-Бот", + "num": 9, "type": "Writing", "subtype": "Telegram", "id": "tg", @@ -120,8 +134,8 @@ "chatID": "" }, { - "name": "9. Таймер", - "num": 9, + "name": "10. Таймер", + "num": 10, "type": "Writing", "subtype": "Timer", "id": "timer", @@ -138,8 +152,8 @@ "header": "Сенсоры" }, { - "name": "10. Датчик напряжения ADS1115", - "num": 10, + "name": "11. Датчик напряжения ADS1115", + "num": 11, "type": "Reading", "subtype": "Ads1115", "id": "Ads3", @@ -155,8 +169,8 @@ "int": 10 }, { - "name": "11. Cенсор температуры AHT20", - "num": 11, + "name": "12. Cенсор температуры AHT20", + "num": 12, "type": "Reading", "subtype": "Aht20t", "id": "Temp20", @@ -168,8 +182,8 @@ "round": 1 }, { - "name": "12. Cенсор влажности AHT20", - "num": 12, + "name": "13. Cенсор влажности AHT20", + "num": 13, "type": "Reading", "subtype": "Aht20h", "id": "Hum20", @@ -181,8 +195,8 @@ "round": 1 }, { - "name": "13. Аналоговый сенсор", - "num": 13, + "name": "14. Аналоговый сенсор", + "num": 14, "type": "Reading", "subtype": "AnalogAdc", "id": "t", @@ -197,8 +211,8 @@ "int": 15 }, { - "name": "14. Cенсор температуры Bme280", - "num": 14, + "name": "15. Cенсор температуры Bme280", + "num": 15, "type": "Reading", "subtype": "Bme280t", "id": "tmp3", @@ -210,8 +224,8 @@ "round": 1 }, { - "name": "15. Cенсор давления Bme280", - "num": 15, + "name": "16. Cенсор давления Bme280", + "num": 16, "type": "Reading", "subtype": "Bme280p", "id": "Press3", @@ -223,8 +237,8 @@ "round": 1 }, { - "name": "16. Cенсор влажности Bme280", - "num": 16, + "name": "17. Cенсор влажности Bme280", + "num": 17, "type": "Reading", "subtype": "Bme280h", "id": "Hum3", @@ -236,8 +250,8 @@ "round": 1 }, { - "name": "17. Cенсор температуры Bmp280", - "num": 17, + "name": "18. Cенсор температуры Bmp280", + "num": 18, "type": "Reading", "subtype": "Bmp280t", "id": "tmp3", @@ -249,8 +263,8 @@ "round": 1 }, { - "name": "18. Cенсор давления Bmp280", - "num": 18, + "name": "19. Cенсор давления Bmp280", + "num": 19, "type": "Reading", "subtype": "Bmp280p", "id": "Press3", @@ -262,8 +276,8 @@ "round": 1 }, { - "name": "19. Cенсор температуры dht11", - "num": 19, + "name": "20. Cенсор температуры dht11", + "num": 20, "type": "Reading", "subtype": "Dht1122t", "id": "tmp3", @@ -275,8 +289,8 @@ "senstype": "dht11" }, { - "name": "20. Cенсор влажности dht11", - "num": 20, + "name": "21. Cенсор влажности dht11", + "num": 21, "type": "Reading", "subtype": "Dht1122h", "id": "Hum3", @@ -288,8 +302,8 @@ "senstype": "dht11" }, { - "name": "21. Cенсор температуры ds18b20", - "num": 21, + "name": "22. Cенсор температуры ds18b20", + "num": 22, "type": "Reading", "subtype": "Ds18b20", "id": "dstmp", @@ -303,8 +317,8 @@ "round": 1 }, { - "name": "22. Датчик тока", - "num": 22, + "name": "23. Датчик тока", + "num": 23, "type": "Reading", "subtype": "I", "id": "current", @@ -318,8 +332,8 @@ "multiply": 1 }, { - "name": "23. Датчик напряжения", - "num": 23, + "name": "24. Датчик напряжения", + "num": 24, "type": "Reading", "subtype": "U", "id": "voltage", @@ -333,8 +347,8 @@ "multiply": 1 }, { - "name": "24. Cенсор температуры GY21", - "num": 24, + "name": "25. Cенсор температуры GY21", + "num": 25, "type": "Reading", "subtype": "GY21t", "id": "tmp4", @@ -345,8 +359,8 @@ "int": 15 }, { - "name": "25. Cенсор влажности GY21", - "num": 25, + "name": "26. Cенсор влажности GY21", + "num": 26, "type": "Reading", "subtype": "GY21h", "id": "Hum4", @@ -357,8 +371,8 @@ "int": 15 }, { - "name": "26. Cенсор температуры HDC1080", - "num": 26, + "name": "27. Cенсор температуры HDC1080", + "num": 27, "type": "Reading", "subtype": "Hdc1080t", "id": "Temp1080", @@ -370,8 +384,8 @@ "round": 1 }, { - "name": "27. Cенсор влажности HDC1080", - "num": 27, + "name": "28. Cенсор влажности HDC1080", + "num": 28, "type": "Reading", "subtype": "Hdc1080h", "id": "Hum1080", @@ -383,8 +397,8 @@ "round": 1 }, { - "name": "28. Cенсор температуры MAX6675", - "num": 28, + "name": "29. Cенсор температуры MAX6675", + "num": 29, "type": "Reading", "subtype": "Max6675t", "id": "maxtmp", @@ -397,8 +411,8 @@ "CLK": 14 }, { - "name": "29. Датчик CO2 MHZ-19 UART", - "num": 29, + "name": "30. Датчик CO2 MHZ-19 UART", + "num": 30, "type": "Reading", "subtype": "Mhz19uart", "id": "co2uart", @@ -416,8 +430,8 @@ "ABC": 1 }, { - "name": "30. Датчик CO2 MHZ-19 PWM", - "num": 30, + "name": "31. Датчик CO2 MHZ-19 PWM", + "num": 31, "type": "Reading", "subtype": "Mhz19pwm", "id": "co2pwm", @@ -431,8 +445,8 @@ "int": 300 }, { - "name": "31. Cенсор температуры от MHZ-19 UART", - "num": 31, + "name": "32. Cенсор температуры от MHZ-19 UART", + "num": 32, "type": "Reading", "subtype": "Mhz19temp", "id": "Mhz19temp", @@ -448,8 +462,8 @@ "int": 30 }, { - "name": "32. Рабочий диапазон от MHZ-19 UART", - "num": 32, + "name": "33. Рабочий диапазон от MHZ-19 UART", + "num": 33, "type": "Reading", "subtype": "Mhz19range", "id": "Mhz19range", @@ -466,8 +480,8 @@ "int": 30 }, { - "name": "33. Автокалибровка от MHZ-19 UART", - "num": 33, + "name": "34. Автокалибровка от MHZ-19 UART", + "num": 34, "type": "Reading", "subtype": "Mhz19ABC", "id": "Mhz19ABC", @@ -481,8 +495,8 @@ "int": 30 }, { - "name": "34. Датчик пыли SDS011 PM25", - "num": 34, + "name": "35. Датчик пыли SDS011 PM25", + "num": 35, "type": "Reading", "subtype": "Sds011_25", "id": "pmuart25", @@ -499,8 +513,8 @@ "period": 300 }, { - "name": "35. Датчик пыли SDS011 PM10", - "num": 35, + "name": "36. Датчик пыли SDS011 PM10", + "num": 36, "type": "Reading", "subtype": "Sds011_10", "id": "pmuart10", @@ -517,8 +531,8 @@ "period": 300 }, { - "name": "36. Cенсор температуры Sht20", - "num": 36, + "name": "37. Cенсор температуры Sht20", + "num": 37, "type": "Reading", "subtype": "Sht20t", "id": "tmp2", @@ -529,8 +543,8 @@ "round": 1 }, { - "name": "37. Cенсор влажности Sht20", - "num": 37, + "name": "38. Cенсор влажности Sht20", + "num": 38, "type": "Reading", "subtype": "Sht20h", "id": "Hum2", @@ -541,8 +555,8 @@ "round": 1 }, { - "name": "38. Сонар HC-SR04", - "num": 38, + "name": "39. Сонар HC-SR04", + "num": 39, "type": "Reading", "subtype": "Sonar", "id": "sonar", @@ -557,8 +571,8 @@ "header": "Экраны" }, { - "name": "39. LCD экран 2004", - "num": 39, + "name": "40. LCD экран 2004", + "num": 40, "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", @@ -572,8 +586,8 @@ "id2show": "id датчика" }, { - "name": "40. LCD экран 1602", - "num": 40, + "name": "41. LCD экран 1602", + "num": 41, "type": "Reading", "subtype": "Lcd2004", "id": "Lcd", diff --git a/platformio.ini b/platformio.ini index a00c5e25..ce72e005 100644 --- a/platformio.ini +++ b/platformio.ini @@ -47,7 +47,7 @@ lib_deps_external = lib_deps = adafruit/Adafruit MCP23017 Arduino Library@^2.0.2 dfrobot/DFRobotDFPlayerMini @ ^1.0.5 - CTBot @2.1.9 + witnessmenow/UniversalTelegramBot @ ^1.3.0 adafruit/Adafruit ADS1X15 @ ^2.3.0 Adafruit AHTX0 adafruit/Adafruit BME280 Library @@ -62,12 +62,14 @@ lib_deps = robtillaart/SHT2x@^0.1.1 marcoschwartz/LiquidCrystal_I2C@^1.1.4 build_src_filter = + - [env:esp32_4mb_fromitems] lib_deps = adafruit/Adafruit MCP23017 Arduino Library@^2.0.2 + https://github.com/RoboticsBrno/ServoESP32 dfrobot/DFRobotDFPlayerMini @ ^1.0.5 - CTBot @2.1.9 + witnessmenow/UniversalTelegramBot @ ^1.3.0 adafruit/Adafruit ADS1X15 @ ^2.3.0 Adafruit AHTX0 adafruit/Adafruit BME280 Library @@ -82,4 +84,5 @@ lib_deps = robtillaart/SHT2x@^0.1.1 marcoschwartz/LiquidCrystal_I2C@^1.1.4 build_src_filter = + - diff --git a/src/modules/API.cpp b/src/modules/API.cpp index 1cd0d2d8..d16c29ca 100644 --- a/src/modules/API.cpp +++ b/src/modules/API.cpp @@ -6,6 +6,7 @@ void* getAPI_SysExt(String subtype, String params); void* getAPI_Variable(String subtype, String params); 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_Telegram(String subtype, String params); void* getAPI_Timer(String subtype, String params); @@ -34,6 +35,7 @@ if ((tmpAPI = getAPI_SysExt(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Variable(subtype, params)) != nullptr) return tmpAPI; 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_Telegram(subtype, params)) != nullptr) return tmpAPI; if ((tmpAPI = getAPI_Timer(subtype, params)) != nullptr) return tmpAPI; diff --git a/src/modules/exec/IoTServo/IoTServo.cpp b/src/modules/exec/IoTServo/IoTServo.cpp new file mode 100644 index 00000000..380c327d --- /dev/null +++ b/src/modules/exec/IoTServo/IoTServo.cpp @@ -0,0 +1,69 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +#include + +class IoTServo : public IoTItem { + private: + Servo servObj; + int _apin, _oldValue; + int _locmap1, _locmap2, _locmap3, _locmap4; + + public: + IoTServo(String parameters): IoTItem(parameters) { + int pin; + jsonRead(parameters, "pin", pin); + servObj.attach(pin); + + jsonRead(parameters, "apin", _apin); + + String map; + jsonRead(parameters, F("amap"), map, false); + if (map != "") { + _locmap1 = selectFromMarkerToMarker(map, ",", 0).toInt(); + _locmap2 = selectFromMarkerToMarker(map, ",", 1).toInt(); + _locmap3 = selectFromMarkerToMarker(map, ",", 2).toInt(); + _locmap4 = selectFromMarkerToMarker(map, ",", 3).toInt(); + } + } + + void doByInterval() { + if (_apin >= 0) { + value.valD = map(analogRead(_apin), _locmap1, _locmap2, _locmap3, _locmap4); + if (abs(_oldValue - value.valD) > 1) { + _oldValue = value.valD; + servObj.write(_oldValue); + } + } + } + + IoTValue execute(String command, std::vector ¶m) { + if (command == "rotate") { + if (param.size()) { + value.valD = param[0].valD; + servObj.write(value.valD); + regEvent(value.valD, "IoTServo"); + } + } + return {}; + } + + void setValue(IoTValue Value) { + value = Value; + if (value.isDecimal & (_oldValue != value.valD)) { + _oldValue = value.valD; + servObj.write(_oldValue); + regEvent(value.valD, "IoTServo"); + } + } + + ~IoTServo() {}; +}; + +void* getAPI_IoTServo(String subtype, String param) { + if (subtype == F("IoTServo")) { + return new IoTServo(param); + } else { + return nullptr; + } +} diff --git a/src/modules/exec/IoTServo/items.json b/src/modules/exec/IoTServo/items.json new file mode 100644 index 00000000..8a67b505 --- /dev/null +++ b/src/modules/exec/IoTServo/items.json @@ -0,0 +1,17 @@ +[ + { + "name": "Сервопривод", + "num": 30, + "type": "Writing", + "subtype": "IoTServo", + "id": "servo", + "widget": "range", + "page": "servo", + "descr": "угол", + + "int": 0, + "pin": 12, + "apin": -1, + "amap": "0, 4096, 0, 180" + } +] \ No newline at end of file diff --git a/src/modules/exec/IoTServo/platformio.ini b/src/modules/exec/IoTServo/platformio.ini new file mode 100644 index 00000000..8933c36f --- /dev/null +++ b/src/modules/exec/IoTServo/platformio.ini @@ -0,0 +1,7 @@ +[env:esp8266_4mb] +lib_deps = + + +[env:esp32_4mb] +lib_deps = + https://github.com/RoboticsBrno/ServoESP32