mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
add web socket and stepper control
This commit is contained in:
43
Cmd.ino
43
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//====================================================================================================================================================
|
||||
/*
|
||||
|
||||
7
Init.ino
7
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===============================================================================
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
20
Upgrade.ino
20
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
6
WiFi.ino
6
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("; ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"}
|
||||
10
data/configs/stepper.config.txt
Normal file
10
data/configs/stepper.config.txt
Normal 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 то будет вращаться против часовой стрелки
|
||||
6
data/configs/stepper.scenario.txt
Normal file
6
data/configs/stepper.scenario.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
button1 = 1
|
||||
stepperSet 1 100 5
|
||||
end
|
||||
button1 = 0
|
||||
stepperSet 1 -100 5
|
||||
end
|
||||
@@ -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.
BIN
data/edit.htm.gz
BIN
data/edit.htm.gz
Binary file not shown.
Binary file not shown.
@@ -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
BIN
data/index.json.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -53,8 +53,7 @@
|
||||
"type": "password",
|
||||
"title": "Введите пароль",
|
||||
"name":"ssidPass",
|
||||
"state": "{{password}}",
|
||||
"pattern": ".{8,20}"
|
||||
"state": "{{password}}"
|
||||
},
|
||||
{
|
||||
"type": "button",
|
||||
|
||||
@@ -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() {
|
||||
|
||||
23
main.ino
23
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;
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
5
mqtt.ino
5
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;
|
||||
}
|
||||
}
|
||||
|
||||
7
set.h
7
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 <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;
|
||||
|
||||
Reference in New Issue
Block a user