add web socket and stepper control

This commit is contained in:
Dmitry Borisenko
2020-03-16 00:00:59 +01:00
parent e2f8aaf505
commit e1ef489706
22 changed files with 189 additions and 45 deletions

43
Cmd.ino
View File

@@ -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());
}
}
//====================================================================================================================================================
/*

View File

@@ -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===============================================================================

View File

@@ -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;

View File

@@ -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();
}
}
}

View File

@@ -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) {

View File

@@ -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("; ");
}
}
}

View File

@@ -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"}
{"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"}

View File

@@ -0,0 +1,10 @@
stepper 1 12 13
button 1 na Открыть#штору Шторы 0 1
//добавляем шаговый двигатель с параметрами:
//1 - номер шагового двигателя, 12 - номер пина количества шагов, 13 - номер пина напрвления
//stepperSet 1 100 5 - прокрутить шаговик номер 1 на 100 шагов по часовой стрелке
//с задержкой между шагами 5 милисекунд (чем меньше задержка тем больше скорость)
//если поставить -100 то будет вращаться против часовой стрелки

View File

@@ -0,0 +1,6 @@
button1 = 1
stepperSet 1 100 5
end
button1 = 0
stepperSet 1 -100 5
end

View File

@@ -36,22 +36,23 @@
"style":"display:inline",
"title": {
"#":"Выбирите то, во что Вы хотите превратить ESP <span class=\"caret\"></span>",
"/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":"Настройки по умолчанию"
}
},

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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"
},
{

BIN
data/index.json.gz Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -53,8 +53,7 @@
"type": "password",
"title": "Введите пароль",
"name":"ssidPass",
"state": "{{password}}",
"pattern": ".{8,20}"
"state": "{{password}}"
},
{
"type": "button",

View File

@@ -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() {

View File

@@ -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;
@@ -278,3 +278,16 @@ void getMemoryLoad(String text) {
//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);
}

View File

@@ -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;
}
}

7
set.h
View File

@@ -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 <Arduino.h>
#include "time.h"
#ifdef OTA_enable
#include <ArduinoOTA.h>
@@ -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;