#include <WiFi.h>
#define LED_PIN 2
// Pin donde está conectado el LED
#define BUTTON_PIN 13 // Pin donde está conectado el botón
bool parpadeo = false;
// Variable para controlar el estado de parpadeo
bool rapido = false;
// Variable para controlar el parpadeo rápido
unsigned long lastDebounceTime = 0; // Tiempo para controlar el rebote del botón
unsigned long debounceDelay = 50; // Tiempo de espera para evitar rebotes (en ms)
// Configuración WiFi para el modo Station
const char* ssid = "Ysidro 5g";
// Cambia por la red de 2.4 GHz
const char* password = "19667307";
// Contraseña de tu red WiFi
void setup() {
Serial.begin(115200); // Inicia la comunicación serial
pinMode(LED_PIN, OUTPUT); // Configura el pin del LED como salida
pinMode(BUTTON_PIN, INPUT); // Configura el pin del botón como entrada (con resistencia externa)
digitalWrite(LED_PIN, LOW); // Asegúrate de que el LED esté apagado al inicio
WiFi.mode(WIFI_OFF); // Apaga el WiFi al inicio
Serial.println("WiFi desactivado al inicio.");
}
void loop() {
// Revisa si hay datos disponibles en la comunicación serial
if (Serial.available() > 0) {
char input = Serial.read(); // Lee el carácter recibido
if (input == 'c') { // Activa el parpadeo al recibir 'c'
Serial.println("¡Iniciando parpadeo normal (Station)!");
parpadeo = true;
rapido = false;
activarWiFiStation(); // Conectar al WiFi en modo Station
}
if (input == 'v') { // Activa el parpadeo rápido al recibir 'v'
if (parpadeo) {
Serial.println("¡Activando parpadeo rápido (Access Point)!");
rapido = true;
activarWiFiAP(); // Activar modo Access Point
}
}
}
// Revisa si el botón ha sido presionado con anti-rebote
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW) { // Detecta si el botón está presionado
unsigned long currentTime = millis(); // Tiempo actual
if ((currentTime - lastDebounceTime) > debounceDelay) { // Si ha pasado suficiente tiempo
if (parpadeo) {
Serial.println("¡Parpadeo detenido y WiFi desactivado!");
parpadeo = false; // Detiene el parpadeo
rapido = false; // Resetea a parpadeo normal
digitalWrite(LED_PIN, LOW); // Apaga el LED
desactivarWiFi(); // Apaga completamente el WiFi
}
lastDebounceTime = currentTime; // Actualiza el tiempo del último cambio
}
}
// Manejo del parpadeo del LED
if (parpadeo) {
if (rapido) {
digitalWrite(LED_PIN, HIGH); // Enciende el LED
delay(40); // Espera 40 ms (parpadeo rápido)
digitalWrite(LED_PIN, LOW); // Apaga el LED
delay(40); // Espera 40 ms (parpadeo rápido)
} else {
digitalWrite(LED_PIN, HIGH); // Enciende el LED
delay(200); // Espera 200 ms (parpadeo normal)
digitalWrite(LED_PIN, LOW); // Apaga el LED
delay(200); // Espera 200 ms (parpadeo normal)
}
}
}
void activarWiFiStation() {
WiFi.mode(WIFI_STA); // Configura el modo Station
WiFi.begin(ssid, password); // Intenta conectar a la red WiFi
Serial.println("Conectando a WiFi...");
// Espera hasta que se conecte o se agote el tiempo
int retries = 0;
while (WiFi.status() != WL_CONNECTED && retries < 20) {
delay(500);
Serial.print(".");
retries++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\n¡Conexión exitosa!");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nNo se pudo conectar al WiFi.");
}
}
void activarWiFiAP() {
WiFi.mode(WIFI_AP); // Configura el modo Access Point
const char* apSSID = "ESP32_AP"; // Nombre de la red AP
const char* apPassword = "12345678"; // Contraseña del AP
WiFi.softAP(apSSID, apPassword);
// Inicia el Access Point
Serial.println("Modo Access Point activado.");
Serial.print("SSID: ");
Serial.println(apSSID);
Serial.print("IP: ");
Serial.println(WiFi.softAPIP());
}
void desactivarWiFi() {
WiFi.mode(WIFI_OFF);
// Apaga el WiFi
Serial.println("WiFi desactivado.");
}