Hola de nuevo, a ver si me podéis dar un poco de luz a un problema que tengo, estoy "domotizando" todas las luces de mi casa nueva, que se enciendan por wifi y por pulsador, hasta ahora lo había conseguido hacer funcionar correctamente, hasta que lo he probado con un downligth de led de 20w que son lo que voy a poner en la casa, con bombillas de led normales e incluso con un foco de led de 50w funciona correctamente, he probado a ponerle un diodo 1N4007, pero ni así, paso a comentar el código que utilizo y como lo tengo conectado.
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#define UnoOn "1On"
#define UnoOff "1Off"
#define DosOn "2On"
#define DosOff "2Off"
#define TresOn "3On"
#define TresOff "3Off"
#define TodoOn "todoon"
#define TodoOff "todooff"
#define Puerto "Elije un puerto"
const char* ssid = "SSID";
const char* password = "contraseña";
IPAddress ip(192,168,1,224);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int ledPin1 = 13; //Lo conectamos a D5
const int ledPin2 = 12; //Lo conectamos a D6
const int ledPin3 = 14; //Lo conectamos a D7
const int boton1 = 5; // boton2 al D1
const int boton2 = 4; // boton1 al D2
const int boton3 = 9; // boton2 al SD2
int val1 = 0; //val se emplea para almacenar el estado del boton
int val2 = 0; //val se emplea para almacenar el estado del boton
int val3 = 0; //val se emplea para almacenar el estado del boton
int state1 = 1; // 0 LED apagado, mientras que 1 encendido
int state2 = 1; // 0 LED apagado, mientras que 1 encendido
int state3 = 1; // 0 LED apagado, mientras que 1 encendido
int old_val1 = 0; // almacena el antiguo valor de val
int old_val2 = 0; // almacena el antiguo valor de val
int old_val3 = 0; // almacena el antiguo valor de val
WiFiServer server(Puerto);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(boton1, INPUT);
pinMode(boton2, INPUT);
pinMode(boton3, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
// while (WiFi.waitForConnectResult() != WL_CONNECTED)
// { Serial.println("Connection Failed! Rebooting...");
// delay(5000);
// ESP.restart();
// }
ArduinoOTA.setPassword((const char *)"pass");
Serial.println();
Serial.println();
Serial.print("Conectado a ");
Serial.println(ssid);
Serial.print("IP:");
Serial.println(ip);
Serial.printf("MAC Address = %s\n", WiFi.softAPmacAddress().c_str());
Serial.print("Puerto:");
Serial.print(Puerto);
Serial.println();
Serial.println("Ordenes:");
Serial.println(UnoOn);
Serial.println(UnoOff);
Serial.println(DosOn);
Serial.println(DosOff);
Serial.println(TresOn);
Serial.println(TresOff);
Serial.println();
Serial.print("Ordenes: todoton/todooff");
Serial.println();
ArduinoOTA.begin();
server.begin();
}
void loop() {
ArduinoOTA.handle();
ESP.wdtDisable();
val1= digitalRead(boton1); // lee el estado del Boton1
if ((val1 == HIGH) && (old_val1 == LOW)){
state1=1-state1;
delay(100);
}
old_val1 = val1; // valor del antiguo estado
if (state1==1){
digitalWrite(ledPin1, HIGH); // enciende el LED
}
else{
digitalWrite(ledPin1,LOW); // apagar el LED
}
val2= digitalRead(boton2); // lee el estado del Boton
if ((val2 == HIGH) && (old_val2 == LOW)){
state2=1-state2;
delay(100);
}
old_val2 = val2; // valor del antiguo estado
if (state2==1){
digitalWrite(ledPin2, HIGH); // enciende el LED
}
else{
digitalWrite(ledPin2,LOW); // apagar el LED
}
val3= digitalRead(boton3); // lee el estado del Boton
if ((val3 == HIGH) && (old_val3 == LOW)){
state3=1-state3;
delay(100);
}
old_val3 = val3; // valor del antiguo estado
if (state3==1){
digitalWrite(ledPin3, HIGH); // enciende el LED
}
else{
digitalWrite(ledPin3,LOW); // apagar el LED
}
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.print("IP:");
Serial.println(ip);
Serial.println("new client");
while(!client.available()){
delay(1);
}
String request = client.readStringUntil('\r');
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
int val1 = digitalRead(ledPin1);
if (request.indexOf(UnoOn) != -1) {
digitalWrite(ledPin1, LOW);
state1 = 0;
}
if (request.indexOf(UnoOff) != -1) {
digitalWrite(ledPin1, HIGH);
state1 = 1;
}
if (request.indexOf(TodoOn) != -1) {
digitalWrite(ledPin1, LOW);
state1 = 0;
}
if (request.indexOf(TodoOff) != -1) {
digitalWrite(ledPin1, HIGH);
state1 = 1;
}
if (val1 == HIGH) {
client.println(UnoOff);
}
if (val1 == LOW) {
client.println(UnoOn);
}
int val2 = digitalRead(ledPin2);
if (request.indexOf(DosOn) != -1) {
digitalWrite(ledPin2, LOW);
state2 = 0;
}
if (request.indexOf(DosOff) != -1) {
digitalWrite(ledPin2, HIGH);
state2 = 1;
}
if (request.indexOf(TodoOn) != -1) {
digitalWrite(ledPin2, LOW);
state2 = 0;
}
if (request.indexOf(TodoOff) != -1) {
digitalWrite(ledPin2, HIGH);
state2 = 1;
}
if (val2 == HIGH) {
client.println(DosOff);
}
if (val2 == LOW) {
client.println(DosOn);
}
int val3 = digitalRead(ledPin3);
if (request.indexOf(TresOn) != -1) {
digitalWrite(ledPin3, LOW);
state3 = 0;
}
if (request.indexOf(TresOff) != -1) {
digitalWrite(ledPin3, HIGH);
state3 = 1;
}
if (request.indexOf(TodoOn) != -1) {
digitalWrite(ledPin3, LOW);
state3 = 0;
}
if (request.indexOf(TodoOff) != -1) {
digitalWrite(ledPin3, HIGH);
state3 = 1;
}
if (val3 == HIGH) {
client.println(TresOff);
}
if (val3 == LOW) {
client.println(TresOn);
}
if (request.indexOf("/info") != -1) {
client.println("
");
client.println("
");
client.println("<b>Conectado a: </b>");
client.println(ssid);
client.println("
");
client.println("<b>IP: </b>");
client.println(ip);
client.println("
");
client.println("<b>Puerto:</b>");
client.println(Puerto);
client.println("
");
client.printf("<b>Direccion MAC: </b>%s\n", WiFi.softAPmacAddress().c_str());
client.println("
");
client.println("<b>Ordenes:</b>");
client.println(UnoOn);
client.println("/");
client.println(UnoOff);
client.println("/");
client.println(DosOn);
client.println("/");
client.println(DosOff);
client.println("/");
client.println(TresOn);
client.println("/");
client.println(TresOff);
client.println("/");
client.println(TodoOn);
client.println("/");
client.println(TodoOff);
}
delay(1);
}
El Nodemcu lo tengo conectado a los 5v de la fuente y el relé a los 3v del nodemcu y al D7,el pulsador en pull-down al D2, de esta manera me funciona bien, lo he tenido días de prueba y sin problemas, incluso controlando todo desde el móvil, pero si conecto al downlight, se enciende pero enseguida se apaga, si conecto el relé a los 5v de la fuente, el relé se queda siempre encendido y la luz funciona bien, pero no se puede apagar...
Alguien me puede dar alguna otra idea para probar?
Gracias de ante mano.
Editado: Pues ahora sí, solucionado con un filtro a la entrada de la fuente del downlight