Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Conexión WIFI del ESP 8266 + Server con página web dinámica mas Access Point + Web Socket
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- #include <WebSocketsServer.h>
- // ====== HW & tiempos ======
- #define LED LED_BUILTIN // activo en LOW
- #define T_REINTENTO_MS 4000
- #define BLINK_CONECTANDO 1000
- #define BLINK_DESCONECTADO 500
- #define BLINK_CONECTADO 3000
- // ====== credenciales ======
- const char* WIFI_SSID = "Alumnos";
- const char* WIFI_PASS = "";
- // ====== Access Point ======
- const char* AP_SSID = "ESP8266_AP";
- const char* AP_PASS = "12345678";
- // ====== estado ======
- enum EstadoWifi { DESCONECTADO, CONECTANDO, CONECTADO };
- EstadoWifi estado = DESCONECTADO;
- ESP8266WebServer server(80);
- WebSocketsServer webSocket(81);
- bool serverIniciado = false;
- unsigned long tBlink = 0;
- unsigned long periodoBlink = BLINK_DESCONECTADO;
- bool ledState = false;
- unsigned long tRetry = 0;
- // ====== prototipos ======
- void Conectar();
- void GestionWifi();
- void BlinkLed();
- void IniciarServerSiConectado();
- void IniciarAP();
- void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length);
- // ====== HTTP handlers ======
- void handleRoot() {
- String html = "<h2>ESP8266 OK</h2><p>IP STA: " + WiFi.localIP().toString() + "</p>";
- html += "<p>IP AP: " + WiFi.softAPIP().toString() + "</p>";
- html += "<p>SSID STA: " + String(WIFI_SSID) + "</p>";
- server.send(200, "text/html", html);
- }
- void setup() {
- pinMode(LED, OUTPUT);
- digitalWrite(LED, HIGH); // apagado (inverso)
- Serial.begin(115200);
- Serial.println("Hola");
- // Modo mixto: STA + AP
- WiFi.mode(WIFI_AP_STA);
- IniciarAP();
- Conectar();
- // Inicializar WebSocket
- webSocket.begin();
- webSocket.onEvent(webSocketEvent);
- }
- void loop() {
- GestionWifi();
- BlinkLed();
- IniciarServerSiConectado();
- if (serverIniciado) server.handleClient();
- webSocket.loop();
- }
- // ====== lógica ======
- void Conectar() {
- Serial.printf("Conectando a %s...\n", WIFI_SSID);
- WiFi.begin(WIFI_SSID, WIFI_PASS);
- estado = CONECTANDO;
- periodoBlink = BLINK_CONECTANDO;
- }
- void GestionWifi() {
- wl_status_t st = WiFi.status();
- if (st == WL_CONNECTED) {
- if (estado != CONECTADO) {
- estado = CONECTADO;
- periodoBlink = BLINK_CONECTADO;
- Serial.print("Conectado. IP STA: ");
- Serial.println(WiFi.localIP());
- }
- return;
- }
- // no conectado
- if (estado != CONECTANDO) {
- estado = DESCONECTADO;
- periodoBlink = BLINK_DESCONECTADO;
- }
- if (millis() - tRetry >= T_REINTENTO_MS) {
- tRetry = millis();
- Conectar();
- }
- }
- void BlinkLed() {
- if (millis() - tBlink < periodoBlink) return;
- tBlink = millis();
- ledState = !ledState;
- digitalWrite(LED, ledState ? LOW : HIGH); // LOW enciende
- }
- void IniciarServerSiConectado() {
- if (serverIniciado) return;
- server.on("/", handleRoot);
- server.begin();
- serverIniciado = true;
- Serial.println("HTTP listo -> abre http://<IP>/");
- }
- void IniciarAP() {
- WiFi.softAP(AP_SSID, AP_PASS);
- Serial.print("AP Iniciado. SSID: ");
- Serial.print(AP_SSID);
- Serial.print(" | IP: ");
- Serial.println(WiFi.softAPIP());
- }
- // ====== WebSocket ======
- void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
- switch(type) {
- case WStype_CONNECTED: {
- Serial.printf("Cliente WS [%u] conectado\n", num);
- webSocket.sendTXT(num, "Conectado al WebSocket!");
- break;
- }
- case WStype_DISCONNECTED: {
- Serial.printf("Cliente WS [%u] desconectado\n", num);
- break;
- }
- case WStype_TEXT: {
- String msg = String((char*)payload);
- Serial.printf("WS [%u] dice: %s\n", num, msg.c_str());
- // Responder con eco
- webSocket.sendTXT(num, "Echo: " + msg);
- // Control LED desde WS
- if (msg == "ON") digitalWrite(LED, LOW);
- if (msg == "OFF") digitalWrite(LED, HIGH);
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment