Hola, antes de nada, saludos a todos, soy nuevo y no he visto ningún apartado para presentaciones, me llamo Juan y... bueno, pues eso que soy nuevo
Al lío, el tema es que tengo varios módulos NodeMCu ESP8266 esp-12e que quiero usar para domótica en casa, y he empezado por programar uno de ellos para activar un relé por web o android y a su vez con un pulsador.
Me costó media vida poder combinar dos códigos que encontré por internet para que hiciese lo que quiero, por un lado encontré el código para activarlo desde web y por otro para activarlo y desactivarlo desde un pulsador, pues la idea es conectarlo a la llave de la luz y encender la luz de una habitación, y a su vez poder hacerlo desde el móvil. Pero, no se porqué, al tiempo de estar funcionando, se bloquea y no funciona ni por web ni por el pulsador, y tengo que reiniciarlo.
Como dato decir que lo alimento con el cargador de un móvil de 2500mA y estoy haciendo la prueba con un led en sustitución del relé, no se si es culpa del código o de hardware, os dejo el código para lo que saben, que yo ando muy muy pez.
// Codigo para encender y apagar un relé desde web y/o desde un pulsador
#include <ESP8266WiFi.h>
const char* ssid = "SSID"; //Tu SSID
const char* password = "PASSWORD"; //Tu Password
IPAddress ip(192,168,1,222); // IP estática que deseas
IPAddress gateway(192,168,1,1); // IP puerta de enlace
IPAddress subnet(255,255,255,0); // Máscara subnet
const int ledPin = 13; //Lo conectamos a D7
const int boton = 4; // boton al D2
int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val
WiFiServer server(83);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(boton, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
// Conecto con la red WiFi en modo estación (STA)
Serial.println();
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
server.begin();
}
void loop() {
// Codigo pulsador
val= digitalRead(boton); // lee el estado del Boton
if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(10);
}
old_val = val; // valor del antiguo estado
if (state==1){
digitalWrite(ledPin, HIGH); // enciende el LED
}
else{
digitalWrite(ledPin,LOW); // apagar el LED
}
// Codigo web
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
while(!client.available()){
delay(1);
}
String request = client.readStringUntil('\r');
client.flush();
int val = digitalRead(ledPin);
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, LOW);
state = 0;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(ledPin, HIGH);
state = 1;
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("Led ");
if (val == HIGH) {
client.println("Apagado");
client.println("");
}
if (val == LOW) {
client.println("Encendido");
client.println("");
}
client.println("</html>");
delay(1);
}
Otra consulta, fuera de arduino pero relacionada, ¿hay alguna manera con APP Inventor, cuando le envío por web que el led está encendido, poder utilizar eso para abrir dentro de la aplicación una foto y otra?
Mil gracias y saludos.