Hola que tal, estoy intentando programar por primera vez el código yo solo para controlar 8 relés con una placa ESP8266 a través de WiFi. He seguido los consejos de varios foros, redes y he modificado el código innumerables veces para intentar corregir un error que hace que se active el modo reinicio de la placa sin resultados (cambiando tiempos de llamada, expresiones de tiempo(delay, milis...) potencia de la señal, etc.) En principio el código se compila correctamente, pero debe de haber una parte del código que hace que entre en loop y se reinicie o algún tiempo de espera que produce el mismo error. He configurado la red en ESP8266 la puedo detectar pero se reinicia.
**ECodigo de error: **
13:45:02.609 -> *wm:AutoConnect: FAILED for 11469 ms
13:45:02.654 -> *wm:StartAP with SSID: ESP8266WiFiManager
13:45:03.753 -> *wm:AP IP address: 192.168.4.1
13:45:03.753 -> *wm:Starting Web Portal
13:45:36.091 -> *wm:2 networks found
13:46:12.098 -> *wm:2 networks found
13:47:32.856 -> *wm:No networks found
13:47:56.290 -> *wm:Connecting to NEW AP: MIWIFI_TNjN
13:47:56.337 -> *w:connectTimeout not set, ESP waitForConnectResult...
13:47:59.980 -> *wm:Connect to new AP [SUCCESS]
13:48:00.013 -> *wm:Got IP Address:
13:48:00.013 -> *wm:192.168.1.187
13:48:01.018 -> *wm:confia
13:48:08.414 -> ets Jan 8 2013,rst cause:4, boot mode:(3,6)
13:48:08.414 ->
Código
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <ArduinoJson.h>
#define NUM_RELAYS 8
const int relayPins[NUM_RELAYS] = {1, 2, 3, 4, 5, 6, 7, 8}; // Cambiar los pines según la configuración
bool relayStates[NUM_RELAYS] = {false};
ESP8266WebServer server(80);
DNSServer dns;
const char config_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
<title>Control de Relés</title>
<style>
body { font-family: Arial, sans-serif; }
.container { display: flex; flex-direction: column; align-items: center; }
.relay { margin-bottom: 10px; }
.relay input[type="submit"] { padding: 5px 10px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; }
.relay input[type="submit"]:hover { background-color: #45a049; }
</style>
</head><body>
<h1>Control de Relés</h1>
<div class="container">
%BUTTONS%
</div>
</body></html>
)rawliteral";
unsigned long previousMillis = 0;
const long interval = 100;
void setup() {
Serial.begin(115200);
Serial.println("Inicializando...");
WiFi.setOutputPower(20.00);
// Configuración de WiFi y modo AP
WiFiManager wifiManager;
wifiManager.autoConnect("ESP8266WiFiManager");
setupServer();
initRelays();
Serial.println("Inicialización completa.");
}
void loop() {
unsigned long currentMillis = millis();
server.handleClient();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
yield();
}
}
void setupServer() {
Serial.println("Configurando servidor web...");
server.on("/", HTTP_GET, []() {
String buttons = "";
for (int i = 0; i < NUM_RELAYS; i++) {
buttons += "<div class=\"relay\"><h2>Relé " + String(i+1) + "</h2><form action=\"/toggle\" method=\"POST\"><input type=\"hidden\" name=\"id\" value=\"" + String(i) + "\">";
buttons += String("<input type=\"submit\" value=\"") + (relayStates[i] ? "Apagar" : "Encender") + "\"></form></div>";
}
String page = String(config_html);
page.replace("%BUTTONS%", buttons);
server.send(200, "text/html", page);
yield();
});
server.on("/toggle", HTTP_POST, []() {
yield();
String relayId;
if (server.hasArg("id")) {
relayId = server.arg("id");
int id = relayId.toInt();
if (id >= 0 && id < NUM_RELAYS) {
relayStates[id] = !relayStates[id];
digitalWrite(relayPins[id], relayStates[id] ? HIGH : LOW);
server.send(200, "text/plain", "OK");
} else {
server.send(400, "text/plain", "ID de relé inválido.");
}
} else {
server.send(400, "text/plain", "Parámetros faltantes.");
}
yield();
});
server.begin();
Serial.println("Servidor web iniciado.");
}
void initRelays() {
Serial.println("Inicializando relés...");
for (int i = 0; i < NUM_RELAYS; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW);
}
Serial.println("Relés inicializados.");
}
Quería probarlo para ver como queda la pagina HTML y modificarla para que sea más curiosa pero no puedo seguir al no poder corregir el error. Si me podéis guiar quizás lo tenga delante de mis ojos pero estoy ciego.
Gracias
NOTA: Editado por Moderador