feat: синхронизация светодиодов между пультами через /peer_led, v1.8
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
|
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
|
||||||
|
|
||||||
#define AP_SSID "Barrier-Setup"
|
#define AP_SSID "Barrier-Setup"
|
||||||
#define FW_VERSION "1.7"
|
#define FW_VERSION "1.8"
|
||||||
#define AP_PASS "barrier123"
|
#define AP_PASS "barrier123"
|
||||||
|
|
||||||
Preferences prefs;
|
Preferences prefs;
|
||||||
@@ -81,6 +81,7 @@ void loadConfig() {
|
|||||||
cfg_self_ip = prefs.getString("self_ip", "");
|
cfg_self_ip = prefs.getString("self_ip", "");
|
||||||
cfg_gateway = prefs.getString("gateway", "");
|
cfg_gateway = prefs.getString("gateway", "");
|
||||||
cfg_subnet = prefs.getString("subnet", "255.255.255.0");
|
cfg_subnet = prefs.getString("subnet", "255.255.255.0");
|
||||||
|
cfg_peer_ip = prefs.getString("peer_ip", "");
|
||||||
prefs.end();
|
prefs.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,9 +95,19 @@ void saveConfig() {
|
|||||||
prefs.putString("self_ip", cfg_self_ip);
|
prefs.putString("self_ip", cfg_self_ip);
|
||||||
prefs.putString("gateway", cfg_gateway);
|
prefs.putString("gateway", cfg_gateway);
|
||||||
prefs.putString("subnet", cfg_subnet);
|
prefs.putString("subnet", cfg_subnet);
|
||||||
|
prefs.putString("peer_ip", cfg_peer_ip);
|
||||||
prefs.end();
|
prefs.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void notifyPeer(int btn) {
|
||||||
|
if (cfg_peer_ip.length() == 0) return;
|
||||||
|
HTTPClient http;
|
||||||
|
http.begin("http://" + cfg_peer_ip + "/peer_led?b=" + String(btn));
|
||||||
|
http.addHeader("X-Token", cfg_token);
|
||||||
|
http.GET();
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
|
|
||||||
void sendCommand(String ip) {
|
void sendCommand(String ip) {
|
||||||
if (!ethConnected && !wifiConnected) {
|
if (!ethConnected && !wifiConnected) {
|
||||||
Serial.println("Нет сети!");
|
Serial.println("Нет сети!");
|
||||||
@@ -187,6 +198,11 @@ input[type=text]:focus,input[type=password]:focus{outline:none;border-color:#219
|
|||||||
<label>Пароль</label>
|
<label>Пароль</label>
|
||||||
<input type='password' name='pass' placeholder='оставь пустым — не менять'>
|
<input type='password' name='pass' placeholder='оставь пустым — не менять'>
|
||||||
|
|
||||||
|
<hr class='sep'>
|
||||||
|
<h3>Второй пульт</h3>
|
||||||
|
<label>IP второго пульта <span class='hint'>(пусто = не синхронизировать)</span></label>
|
||||||
|
<input type='text' name='peer_ip' value=')" + cfg_peer_ip + R"(' placeholder='например 192.168.15.21'>
|
||||||
|
|
||||||
<hr class='sep'>
|
<hr class='sep'>
|
||||||
<h3>IP этого устройства</h3>
|
<h3>IP этого устройства</h3>
|
||||||
<label>Статический IP <span class='hint'>(пусто = DHCP)</span></label>
|
<label>Статический IP <span class='hint'>(пусто = DHCP)</span></label>
|
||||||
@@ -214,6 +230,15 @@ input[type=text]:focus,input[type=password]:focus{outline:none;border-color:#219
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setupRoutes() {
|
void setupRoutes() {
|
||||||
|
server.on("/peer_led", HTTP_GET, []() {
|
||||||
|
String token = server.header("X-Token");
|
||||||
|
if (token != cfg_token) { server.send(401, "text/plain", "unauthorized"); return; }
|
||||||
|
digitalWrite(LED_PIN, HIGH);
|
||||||
|
lastPress1 = millis(); // блокируем debounce
|
||||||
|
lastPress2 = millis();
|
||||||
|
server.send(200, "text/plain", "ok");
|
||||||
|
});
|
||||||
|
|
||||||
server.on("/", HTTP_GET, []() {
|
server.on("/", HTTP_GET, []() {
|
||||||
server.send(200, "text/html", buildPage());
|
server.send(200, "text/html", buildPage());
|
||||||
});
|
});
|
||||||
@@ -236,6 +261,7 @@ void setupRoutes() {
|
|||||||
cfg_self_ip = server.arg("self_ip");
|
cfg_self_ip = server.arg("self_ip");
|
||||||
cfg_gateway = server.arg("gateway");
|
cfg_gateway = server.arg("gateway");
|
||||||
cfg_subnet = server.arg("subnet");
|
cfg_subnet = server.arg("subnet");
|
||||||
|
cfg_peer_ip = server.arg("peer_ip");
|
||||||
String np = server.arg("pass");
|
String np = server.arg("pass");
|
||||||
if (np.length() > 0) cfg_pass = np;
|
if (np.length() > 0) cfg_pass = np;
|
||||||
saveConfig();
|
saveConfig();
|
||||||
@@ -331,6 +357,7 @@ void loop() {
|
|||||||
digitalWrite(LED_PIN, HIGH);
|
digitalWrite(LED_PIN, HIGH);
|
||||||
Serial.println("Кнопка 1");
|
Serial.println("Кнопка 1");
|
||||||
sendCommand(cfg_ip1);
|
sendCommand(cfg_ip1);
|
||||||
|
notifyPeer(1);
|
||||||
}
|
}
|
||||||
// Гасим светодиод когда debounce прошёл
|
// Гасим светодиод когда debounce прошёл
|
||||||
if (now - lastPress1 < DEBOUNCE || now - lastPress2 < DEBOUNCE) {
|
if (now - lastPress1 < DEBOUNCE || now - lastPress2 < DEBOUNCE) {
|
||||||
@@ -344,6 +371,7 @@ void loop() {
|
|||||||
digitalWrite(LED_PIN, HIGH);
|
digitalWrite(LED_PIN, HIGH);
|
||||||
Serial.println("Кнопка 2");
|
Serial.println("Кнопка 2");
|
||||||
sendCommand(cfg_ip2);
|
sendCommand(cfg_ip2);
|
||||||
|
notifyPeer(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|||||||
Reference in New Issue
Block a user