Hola buen día, tengo un problema con un proyecto IOT (Eh estado estudiando como puedo automatizar los focos(lamparas) de mi cuarto, tengo un dispositivo de Amazon (Alexa) en concreto en "echo-dot 3".
Use los siguientes materiales:
- ESP32 DEVKIT V1
- 1 modulo relay (mecánico) de 4 canales
- 1 foco
- 1 switch de pared de 3 vías
El problema que surge es que despues de apagar unas 3 veces seguidas por medio de alexa o por medio del switch de 3 vias, como que se traba el relay y ya deja de sonar el click de cuando se acciona... entonces pues es un problema grave pues no me apaga o prende el foco.
Según entiendo un relay mecánico tiene una tipo aguja que se ve atraida por un campo eléctrico que se genera ahi adentro, entonces no se que esta pasando, que a como me doy cuenta como que se queda pegado la aguja, y ya no acciona, solo prende y apaga el led indicador.
¿Y por que creo que es error de ahí? cuando le quito los cables que vienen de la corriente alterna del foco y la luz, este si funciona bien, solo es cuando conecto todo el circuito, entonces quería ayuda a ver si a alguien le paso lo mismo o algo me falta?? pues eh visto varios videos de YT y no veo que les pase lo mismo y lo hacen igual.
Ya hasta estoy pensando en comprar un modulo relay de estado solido a ver si eso lo arregla.
Adjunto el código que uso en el ESP32:
#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include "fauxmoESP.h"
//CREDENCIALES CONEXION A TU WIFI
#define WIFI_SSID "arezZ"
#define WIFI_PASS "*****"
//VELOCIDAD SERIAL
#define SERIAL_BAUDRATE 115200
// DISPOSITIVOS
#define PIN_DISPOSITIVO_1 25
#define ID_1 "Foco 1"
#define PIN_DISPOSITIVO_2 26
#define ID_2 "Foco 2"
#define PIN_DISPOSITIVO_3 27
#define ID_3 "Foco 3"
#define PIN_DISPOSITIVO_4 33
#define ID_4 "Espejo"
/////////////////////////
#define TODO "Todo"
#define LUCES "Luces"
/////////////////////////
fauxmoESP fauxmo;
// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------
void wifiSetup() {
//Inicializamos el WIFI en modo estacion
WiFi.mode(WIFI_STA);
//Conecta al WIFI
Serial.println("---------------------------------------------");
Serial.printf("[WIFI] Conectando a red %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
//Esperamos si es que no conecta
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
Serial.printf("[WIFI] Conectado al WIFI %s ", WIFI_SSID);
Serial.println();
//Conexion Exitosa
Serial.printf("[WIFI] MODO ESTACION, SSID: %s, Direccion IP: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
Serial.println("---------------------------------------------");
Serial.println("A la espera de instrucciones de alexa...");
Serial.println("---------------------------------------------");
}
void setup() {
//INICIALIZAMOS EL SERIAL
Serial.begin(SERIAL_BAUDRATE);
//ESTABLECEMOS EL ESTADO DE LOS PINES
pinMode(PIN_DISPOSITIVO_1, OUTPUT);
pinMode(PIN_DISPOSITIVO_2, OUTPUT);
pinMode(PIN_DISPOSITIVO_3, OUTPUT);
pinMode(PIN_DISPOSITIVO_4, OUTPUT);
pinMode(PIN_DISPOSITIVO_5, OUTPUT);
//ESTABLECEMOS QUE ETEN APAGADOS LOS DISPOSITIVOS
digitalWrite(PIN_DISPOSITIVO_1, HIGH);
digitalWrite(PIN_DISPOSITIVO_2, HIGH);
digitalWrite(PIN_DISPOSITIVO_3, HIGH);
digitalWrite(PIN_DISPOSITIVO_4, HIGH);
digitalWrite(PIN_DISPOSITIVO_5, LOW);
//INICIA EL METODO WIFI
wifiSetup();
fauxmo.createServer(true); // not needed, this is the default value
fauxmo.setPort(80); // This is required for gen3 devices
fauxmo.enable(true);
//AÑADA O CREA LOS DISPISITIVOS ANTERIORMENTE ESTABLECIDOS EN LAS VARIABLES
fauxmo.addDevice(ID_1);
fauxmo.addDevice(ID_2);
fauxmo.addDevice(ID_3);
fauxmo.addDevice(ID_4);
fauxmo.addDevice(TODO);
fauxmo.addDevice(LUCES);
fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) {
Serial.printf("[INFORMACION] Dispositivo #%d (%s) Estado: %s Valor: %d\n", device_id, device_name, state ? "ON" : "OFF", value);
if (strcmp(device_name, ID_1) == 0) {
digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
}
else if (strcmp(device_name, ID_2) == 0) {
digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
}
else if (strcmp(device_name, ID_3) == 0) {
digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
}
else if (strcmp(device_name, ID_4) == 0) {
digitalWrite(PIN_DISPOSITIVO_4, state ? !HIGH : !LOW);
}
else if (strcmp(device_name, TODO) == 0) {
digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
digitalWrite(PIN_DISPOSITIVO_4, state ? !HIGH : !LOW);
}
else if (strcmp(device_name, LUCES) == 0) {
digitalWrite(PIN_DISPOSITIVO_1, state ? !HIGH : !LOW);
digitalWrite(PIN_DISPOSITIVO_2, state ? !HIGH : !LOW);
digitalWrite(PIN_DISPOSITIVO_3, state ? !HIGH : !LOW);
}
});
}
void loop() {
fauxmo.handle();
}
No le veo algo malo al código, pero igual lo pongo para que vean como trabaja.
El diagrama de mi circuito es este:
Muchas gracias por comentar cualquier cosa de ayuda