feat: синхронизация светодиодов между пультами через /peer_led, v1.8

This commit is contained in:
Aleksei
2026-06-17 11:29:30 +00:00
parent 52740b26c6
commit 957987bc6c
+29 -1
View File
@@ -19,7 +19,7 @@
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define AP_SSID "Barrier-Setup"
#define FW_VERSION "1.7"
#define FW_VERSION "1.8"
#define AP_PASS "barrier123"
Preferences prefs;
@@ -81,6 +81,7 @@ void loadConfig() {
cfg_self_ip = prefs.getString("self_ip", "");
cfg_gateway = prefs.getString("gateway", "");
cfg_subnet = prefs.getString("subnet", "255.255.255.0");
cfg_peer_ip = prefs.getString("peer_ip", "");
prefs.end();
}
@@ -94,9 +95,19 @@ void saveConfig() {
prefs.putString("self_ip", cfg_self_ip);
prefs.putString("gateway", cfg_gateway);
prefs.putString("subnet", cfg_subnet);
prefs.putString("peer_ip", cfg_peer_ip);
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) {
if (!ethConnected && !wifiConnected) {
Serial.println("Нет сети!");
@@ -187,6 +198,11 @@ input[type=text]:focus,input[type=password]:focus{outline:none;border-color:#219
<label>Пароль</label>
<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'>
<h3>IP этого устройства</h3>
<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() {
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.send(200, "text/html", buildPage());
});
@@ -236,6 +261,7 @@ void setupRoutes() {
cfg_self_ip = server.arg("self_ip");
cfg_gateway = server.arg("gateway");
cfg_subnet = server.arg("subnet");
cfg_peer_ip = server.arg("peer_ip");
String np = server.arg("pass");
if (np.length() > 0) cfg_pass = np;
saveConfig();
@@ -331,6 +357,7 @@ void loop() {
digitalWrite(LED_PIN, HIGH);
Serial.println("Кнопка 1");
sendCommand(cfg_ip1);
notifyPeer(1);
}
// Гасим светодиод когда debounce прошёл
if (now - lastPress1 < DEBOUNCE || now - lastPress2 < DEBOUNCE) {
@@ -344,6 +371,7 @@ void loop() {
digitalWrite(LED_PIN, HIGH);
Serial.println("Кнопка 2");
sendCommand(cfg_ip2);
notifyPeer(2);
}
delay(10);