diff --git a/Cmd.ino b/Cmd.ino index 90ec9fd9..c157e56e 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -4,6 +4,8 @@ void CMD_init() { sCmd.addCommand("buttonSet", buttonSet); sCmd.addCommand("buttonChange", buttonChange); + //sCmd.addCommand("button_touch", button_touch); + sCmd.addCommand("pinSet", pinSet); sCmd.addCommand("pinChange", pinChange); @@ -22,6 +24,9 @@ void CMD_init() { sCmd.addCommand("dhtComfort", dhtComfort); sCmd.addCommand("dhtDewpoint", dhtDewpoint); + sCmd.addCommand("stepper", stepper); + sCmd.addCommand("stepperSet", stepperSet); + sCmd.addCommand("logging", logging); sCmd.addCommand("inputDigit", inputDigit); @@ -322,6 +327,44 @@ void textSet() { sendSTATUS("textSet" + number, text); } +//===================================================================================================================================== +//=========================================Модуль шагового мотора====================================================================== + +//stepper 1 12 13 +void stepper() { + String stepper_number = sCmd.next(); + String pin_step = sCmd.next(); + String pin_dir = sCmd.next(); + + jsonWrite(optionJson, "stepper" + stepper_number, pin_step + " " + pin_dir); + pinMode(pin_step.toInt(), OUTPUT); + pinMode(pin_dir.toInt(), OUTPUT); +} + +//stepperSet 1 100 5 +void stepperSet() { + String stepper_number = sCmd.next(); + String steps = sCmd.next(); + String stepper_speed = sCmd.next(); + + String pin_step = selectToMarker (jsonRead(optionJson, "stepper" + stepper_number), " "); + String pin_dir = deleteBeforeDelimiter (jsonRead(optionJson, "stepper" + stepper_number), " "); + + Serial.println(pin_step); + Serial.println(pin_dir); + + if (steps.toInt() > 0) digitalWrite(pin_dir.toInt(), HIGH); + if (steps.toInt() < 0) digitalWrite(pin_dir.toInt(), LOW); + + for (int x = 0; x < abs(steps.toInt()); x++) + { + digitalWrite(pin_step.toInt(), HIGH); + delay(stepper_speed.toInt()); + digitalWrite(pin_step.toInt(), LOW); + delay(stepper_speed.toInt()); + } +} + //==================================================================================================================================================== /* diff --git a/Init.ino b/Init.ino index af386335..9549c6cd 100644 --- a/Init.ino +++ b/Init.ino @@ -187,6 +187,13 @@ void prsets_init() { request->redirect("/page.htm?configuration"); }); + server.on("/stepper", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/stepper.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/stepper.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); + }); //default=============================================================================== diff --git a/Sensors.ino b/Sensors.ino index b67fd036..bdcb37da 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -19,7 +19,7 @@ void analog() { static int analog_old; #ifdef ESP32 //int pin_int = pin.toInt(); - int analog_in;// = analogRead(pin_int); + int analog_in = analogRead(34); #endif #ifdef ESP8266 int analog_in = analogRead(A0); @@ -36,6 +36,7 @@ void analog() { sendSTATUS("analog", String(analog)); if (client.connected()) { Serial.println("[i] sensor 'analog' send date " + String(analog)); + //web_print("sensor 'analog' send date " + String(analog)); } // } analog_old = analog; @@ -83,6 +84,7 @@ void level() { sendSTATUS("level", String(level)); if (client.connected()) { Serial.println("[i] sensor tank 'level' send date " + String(level)); + //web_print("sensor tank 'level' send date " + String(level)); } //} level_old = level; @@ -114,6 +116,7 @@ void dallas() { sendSTATUS("dallas", String(temp)); if (client.connected()) { Serial.println("[i] sensor 'dallas' send date " + String(temp)); + //web_print("sensor 'dallas' send date " + String(temp)); } //} temp_old = temp; @@ -153,6 +156,7 @@ void dhtT() { sendSTATUS("dhtT", String(value)); if (client.connected()) { Serial.println("[i] sensor 'dhtT' send date " + String(value)); + //web_print("sensor 'dhtT' send date " + String(value)); } //} value_old = value; @@ -191,6 +195,7 @@ void dhtH() { sendSTATUS("dhtH", String(value)); if (client.connected()) { Serial.println("[i] sensor 'dhtH' send date " + String(value)); + //web_print("sensor 'dhtH' send date " + String(value)); } //} value_old = value; diff --git a/Upgrade.ino b/Upgrade.ino index af38ae4d..e195f044 100644 --- a/Upgrade.ino +++ b/Upgrade.ino @@ -41,6 +41,8 @@ void upgrade_firmware() { configSetup_for_update = configSetup; Serial.println("Start upgrade SPIFFS, please wait..."); + web_print("Start upgrade SPIFFS, please wait..."); + WiFiClient client_for_upgrade; #ifdef ESP32 @@ -61,21 +63,25 @@ void upgrade_firmware() { Serial.println("SPIFFS upgrade done!"); Serial.println("Start upgrade BUILD, please wait..."); + web_print("SPIFFS upgrade done!"); + web_print("Start upgrade BUILD, please wait..."); #ifdef ESP32 - httpUpdate.rebootOnUpdate(true); + //httpUpdate.rebootOnUpdate(true); t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin"); #endif #ifdef ESP8266 - ESPhttpUpdate.rebootOnUpdate(true); + //ESPhttpUpdate.rebootOnUpdate(true); t_httpUpdate_return ret = ESPhttpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin"); #endif - Serial.println("BUILD upgrade done!"); - Serial.println("Restart ESP...."); - - } else { - //upgrade_status(t_httpUpdate_return ret); + if (ret == HTTP_UPDATE_OK) { + web_print("BUILD upgrade done!"); + web_print("Restart ESP...."); + Serial.println("BUILD upgrade done!"); + Serial.println("Restart ESP...."); + ESP.restart(); + } } } diff --git a/Web_server.ino b/Web_server.ino index 1093e013..d537103a 100644 --- a/Web_server.ino +++ b/Web_server.ino @@ -41,7 +41,7 @@ void Web_server_init() { server.addHandler(&ws); events.onConnect([](AsyncEventSourceClient * client) { - client->send("hello!", NULL, millis(), 1000); + //!!!client->send("hello!", NULL, millis(), 1000); }); server.addHandler(&events); @@ -144,14 +144,22 @@ void Web_server_init() { server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest * request) { request->send(200, "application/json", configSetup); }); + + // ------------------Выполнение команды из запроса + server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest * request) { //http://192.168.88.45/cmd?command=rel 1 1 + String com = request->getParam("command")->value(); + Serial.println(com); + order_loop += com + ","; + request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + }); } //========================================WS========================================================================================= #ifdef WS_enable void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { if (type == WS_EVT_CONNECT) { Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); - client->printf(configJson.c_str(), client->id()); - client->ping(); + client->printf(json.c_str(), client->id()); + //client->ping(); } else if (type == WS_EVT_DISCONNECT) { Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id()); } else if (type == WS_EVT_ERROR) { diff --git a/WiFi.ino b/WiFi.ino index 3f5ad044..22013113 100644 --- a/WiFi.ino +++ b/WiFi.ino @@ -147,14 +147,14 @@ boolean RouterFind(String ssid) { } else { Serial.print(i); Serial.print(")"); - Serial.print(ssid); - Serial.print("<=>"); + //Serial.print(ssid); + //Serial.print("<=>"); if (i == n) { Serial.print(WiFi.SSID(i)); Serial.println("; "); } else { Serial.print(WiFi.SSID(i)); - Serial.print("; "); + Serial.println("; "); } } } diff --git a/data/config.json b/data/config.json index 0479064d..52ac45a5 100644 --- a/data/config.json +++ b/data/config.json @@ -1 +1 @@ -{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"your_ssid","password":"your_pass","timezone":3,"mqttServer":"","mqttPort":0,"mqttUser":"","mqttPass":"","scenario":"1","timers":"0","pushingbox_id":"","web_login":"admin","web_pass":"admin"} \ No newline at end of file +{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"MW40V_782C","password":"05978600","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"","web_login":"admin","web_pass":"admin"} \ No newline at end of file diff --git a/data/configs/stepper.config.txt b/data/configs/stepper.config.txt new file mode 100644 index 00000000..c9064aea --- /dev/null +++ b/data/configs/stepper.config.txt @@ -0,0 +1,10 @@ +stepper 1 12 13 +button 1 na Открыть#штору Шторы 0 1 + + +//добавляем шаговый двигатель с параметрами: +//1 - номер шагового двигателя, 12 - номер пина количества шагов, 13 - номер пина напрвления + +//stepperSet 1 100 5 - прокрутить шаговик номер 1 на 100 шагов по часовой стрелке +//с задержкой между шагами 5 милисекунд (чем меньше задержка тем больше скорость) +//если поставить -100 то будет вращаться против часовой стрелки \ No newline at end of file diff --git a/data/configs/stepper.scenario.txt b/data/configs/stepper.scenario.txt new file mode 100644 index 00000000..cb4cd521 --- /dev/null +++ b/data/configs/stepper.scenario.txt @@ -0,0 +1,6 @@ +button1 = 1 +stepperSet 1 100 5 +end +button1 = 0 +stepperSet 1 -100 5 +end \ No newline at end of file diff --git a/data/configuration.json b/data/configuration.json index 843e77e1..24079b45 100644 --- a/data/configuration.json +++ b/data/configuration.json @@ -36,22 +36,23 @@ "style":"display:inline", "title": { "#":"Выбирите то, во что Вы хотите превратить ESP ", - "/relay":"Вкл. выкл. локального реле", - "/relay_timer":"Вкл. выкл. локального реле в определенное время", - "/relay_countdown":"Вкл. выкл. локального реле на определенный период времени", - "/relay_several":"Вкл. выкл. нескольких локальных реле кнопкой в приложении", - "/relay_switch":"Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", - "/relay_button_remote":"Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", - "/relay_switch_remote":"Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", - "/pwm":"Широтно импульсная модуляция", - "/dht11":"Сенсор DHT11", - "/dht22":"Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", - "/analog":"Аналоговый сенсор", - "/dallas":"Сенсор DS18B20", - "/termostat":"Термостат на DS18B20 с переключением в ручной режим", - "/level":"Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)", - "/moution_relay":"Датчик движения включающий свет", - "/moution_security":"Охранный датчик движения", + "/relay":"1.Вкл. выкл. локального реле", + "/relay_timer":"2.Вкл. выкл. локального реле в определенное время", + "/relay_countdown":"3.Вкл. выкл. локального реле на определенный период времени", + "/relay_several":"4.Вкл. выкл. нескольких локальных реле кнопкой в приложении", + "/relay_switch":"5.Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", + "/relay_button_remote":"6.Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", + "/relay_switch_remote":"7.Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", + "/pwm":"8.Широтно импульсная модуляция", + "/dht11":"9.Сенсор DHT11", + "/dht22":"10.Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", + "/analog":"11.Аналоговый сенсор", + "/dallas":"12.Сенсор DS18B20", + "/termostat":"13.Термостат на DS18B20 с переключением в ручной режим", + "/level":"14.Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)", + "/moution_relay":"15.Датчик движения включающий свет", + "/moution_security":"16.Охранный датчик движения", + "/stepper":"17.Система управления шаговым двигателем (открытие закрытие штор)", "/default":"Настройки по умолчанию" } }, diff --git a/data/css/build.css.gz b/data/css/build.css.gz index 4bf6e060..a37a1ac1 100644 Binary files a/data/css/build.css.gz and b/data/css/build.css.gz differ diff --git a/data/edit.htm.gz b/data/edit.htm.gz index f1e48f7e..bdfe12d3 100644 Binary files a/data/edit.htm.gz and b/data/edit.htm.gz differ diff --git a/data/index.htm.gz b/data/index.htm.gz index 139f0040..618ee19a 100644 Binary files a/data/index.htm.gz and b/data/index.htm.gz differ diff --git a/data/index.json b/data/index.json index ee3f5021..e168b134 100644 --- a/data/index.json +++ b/data/index.json @@ -3,6 +3,11 @@ "/config.live.json", "/config.setup.json" ], + + "socket": [ + "ws://{{ip}}/ws" + ], + "title": "Главная", "class": "col-sm-offset-1 col-sm-10 col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6", "content": [ @@ -31,6 +36,36 @@ "type": "h4", "title": "SPIFFS version: 2.3" }, + { + "type": "hr" + }, + { + "type": "h6", + "title": "{{test1}}" + }, + { + "type": "h6", + "title": "{{test2}}" + }, + { + "type": "h6", + "title": "{{test3}}" + }, + { + "type": "h6", + "title": "{{test4}}" + }, + { + "type": "h6", + "title": "{{test5}}" + }, + { + "type": "h6", + "title": "{{test6}}" + }, + { + "type": "hr" + }, { "type": "link", "title": "Конфигурация устройства", @@ -64,7 +99,7 @@ { "type":"h3", "name":"my-block", - "style":"position:fixed;top:30%;left:50%;width:400px;margin-left:-200px;text-align:center;", + "style":"position:fixed;top:50%;left:50%;width:400px;margin-left:-200px;text-align:center;", "class":"hidden" }, { diff --git a/data/index.json.gz b/data/index.json.gz new file mode 100644 index 00000000..5f590a7f Binary files /dev/null and b/data/index.json.gz differ diff --git a/data/js/build.chart.js.gz b/data/js/build.chart.js.gz index ac021668..8e92fd30 100644 Binary files a/data/js/build.chart.js.gz and b/data/js/build.chart.js.gz differ diff --git a/data/js/function.js.gz b/data/js/function.js.gz index 443fbca2..3ab843f3 100644 Binary files a/data/js/function.js.gz and b/data/js/function.js.gz differ diff --git a/data/setup.json b/data/setup.json index d9295724..2b998ff4 100644 --- a/data/setup.json +++ b/data/setup.json @@ -53,8 +53,7 @@ "type": "password", "title": "Введите пароль", "name":"ssidPass", - "state": "{{password}}", - "pattern": ".{8,20}" + "state": "{{password}}" }, { "type": "button", diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino index e618efe4..2cc12527 100644 --- a/esp32-esp8266_iot-manager_modules_firmware.ino +++ b/esp32-esp8266_iot-manager_modules_firmware.ino @@ -59,7 +59,7 @@ void setup() { //-------------------------------------------------------------- Serial.print("[i] Date compiling: "); Serial.println(DATE_COMPILING); - + getMemoryLoad("[i] After loading"); #ifdef ESP8266 @@ -72,11 +72,12 @@ void setup() { Serial.print("[i] Last firmware version: "); Serial.println(new_version); - ts.add(TEST, statistics_update, [&](void*) { + //ts.add(TEST, statistics_update, [&](void*) { - statistics(); + // statistics(); + + //}, nullptr, false); - }, nullptr, false); } void loop() { diff --git a/main.ino b/main.ino index c6a2662f..7e0f51a7 100644 --- a/main.ino +++ b/main.ino @@ -156,7 +156,7 @@ String safeDataToFile(String data, String Folder) fileName.replace("..", "."); fileName = Folder + "/" + fileName + ".txt"; - // addFile(fileName, GetTime() + "/" + data); + // addFile(fileName, GetTime() + "/" + data); Serial.println(fileName); jsonWrite(configJson, "test", fileName); @@ -259,12 +259,12 @@ void led_blink(int pin, int fq, String blink_satus) { #endif void getMemoryLoad(String text) { - #ifdef ESP8266 +#ifdef ESP8266 int all_memory = 53312; - #endif - #ifdef ESP32 +#endif +#ifdef ESP32 int all_memory = 362868; - #endif +#endif int memory_remain = ESP.getFreeHeap(); int memory_used = all_memory - memory_remain; int memory_load = (memory_used * 100) / all_memory; @@ -273,8 +273,21 @@ void getMemoryLoad(String text) { Serial.print(String(memory_load) + "%; "); Serial.print("memory remain:"); Serial.println(String(memory_remain) + " k bytes"); - + } //esp32 full memory = 362868 k bytes //esp8266 full memory = 53312 k bytes + +void web_print (String text) { + + jsonWrite(json, "test1", jsonRead(json, "test2")); + jsonWrite(json, "test2", jsonRead(json, "test3")); + jsonWrite(json, "test3", jsonRead(json, "test4")); + jsonWrite(json, "test4", jsonRead(json, "test5")); + jsonWrite(json, "test5", jsonRead(json, "test6")); + + jsonWrite(json, "test6", GetTime() + " " + text); + + ws.textAll(json); +} diff --git a/mqtt.ino b/mqtt.ino index 963caec0..aaee2113 100644 --- a/mqtt.ino +++ b/mqtt.ino @@ -51,6 +51,7 @@ void MQTT_init() { Serial.println("[V] WiFi-ok"); if (client.connected()) { Serial.println("[V] MQTT-ok"); + web_print("MQTT-ok"); } else { MQTT_Connecting(); mqtt_lost_error++; @@ -79,6 +80,7 @@ boolean MQTT_Connecting() { if ((mqtt_server != "")) { static boolean first = true; if (!first) Serial.println("[E] Lost MQTT connection, start reconnecting"); + web_print("Lost MQTT connection, start reconnecting"); first = false; //ssl//espClient.setCACert(local_root_ca1); client.setServer(mqtt_server.c_str(), jsonReadtoInt(configSetup, "mqttPort")); @@ -87,6 +89,7 @@ boolean MQTT_Connecting() { Serial.println("[V] Connecting to MQTT server commenced"); if (client.connect(chipID.c_str(), jsonRead(configSetup, "mqttUser").c_str(), jsonRead(configSetup, "mqttPass").c_str())) { Serial.println("[V] MQTT connected"); + web_print("MQTT connected"); client.setCallback(callback); client.subscribe(prefix.c_str()); // Для приема получения HELLOW и подтверждения связи client.subscribe((prefix + "/" + chipID + "/+/control").c_str()); // Подписываемся на топики control @@ -95,6 +98,7 @@ boolean MQTT_Connecting() { client.subscribe((prefix + "/ids").c_str()); // Подписываемся на топики ids sendMQTT("test", "work"); Serial.println("[V] Callback set, subscribe done"); + web_print("Callback set, subscribe done"); //if (out_date_send) outcoming_date(); //отправляем данные в виджеты return true; } else { @@ -105,6 +109,7 @@ boolean MQTT_Connecting() { } } else { Serial.println("[E] No date for MQTT connection"); + web_print("No date for MQTT connection"); return false; } } diff --git a/set.h b/set.h index a1370d4c..604aa719 100644 --- a/set.h +++ b/set.h @@ -4,7 +4,7 @@ String new_version; //#define OTA_enable //#define MDNS_enable -//#define WS_enable +#define WS_enable #define TIME_COMPILING String(__TIME__) #define DATE_COMPILING String(__DATE__) @@ -58,6 +58,7 @@ ESP8266HTTPUpdateServer httpUpdater; #endif //==общие библиотеки и объекты==// +#include #include "time.h" #ifdef OTA_enable #include @@ -105,12 +106,16 @@ DHTesp dht; Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021(); //----------------------------------------------------------------- + + const char* hostName = "IoT Manager"; String configSetup = "{}"; String configJson = "{}"; String optionJson = "{}"; +String json = "{}"; + String chipID = ""; String prefix = "/IoTmanager"; String prex;