Go Down

Topic: ¿Como temporizar la salida 2 del esp8266-01? (Read 264 times) previous topic - next topic

zalamero

    Hola de nuevo a todos.

Después de mucho mirar, informar, y ver por ahí, POR FIN, he conseguido mi ansiada comunicación entre 2 esp8266-01. (merito tengo, por que no tengo ni idea de programación).
 
    Lo que tengo ahora:

1º- esp8266 como cliente con entrada sensor de lluvia.
2º- esp8266 como servidor con salida 2 a Led/Relé.

    Que es lo que quiero ?.

A)  Servidor esp8266, cuando se active la salida 2 (led/relé), este temporizada a 20 segundos (tiempo para bajar las persianas).
 
B) Servidor esp8266, cuando sensor de lluvia se seque (no tenga gotas de agua) active salida gpio0 (led/relé) durante 20 segundos, para subida persianas.

   Bueno, espero haberme expresado lo suficientemente bien y lo hayáis entendido. GRACIAS.

 
Code: [Select]
//SERVIDOR
#include <ESP8266WiFi.h>

const char WiFiClave[] = "";  //Sin clave
const char AP_Nombre[] = "ESP8266";

const int LED_PIN = 2; // LED rojo/ Salida relé.
int val;
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  WiFi.mode(WIFI_AP);
  WiFi.softAP(AP_Nombre, WiFiClave);   
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client) { return;}
  String req = client.readStringUntil('\r');  // Lee la primera linea de la petición del cliente
  if (req.indexOf("/led/0") != -1) val=0;
  if (req.indexOf("/led/1") != -1) val=1;
  digitalWrite(LED_PIN, val); 
  client.flush();
}

   

AlexLPD

Ando de prisa mi estimado, pero parece un caso para un switch case;

ejemplo; si me llega del cliente el numero 1; no hare nada
si me llega el numero 2, llamo la funcion temporizador;

Code: [Select]


switch var1{

case 1: // no se que pueda hacer aca
break;

case 2: temporizadoRele();
break;

void temporizadoRele(){

if (millis - TiempoRele < 20000)
{
digitalWrite(persianas, low) // enciende el motor de las persinas por 20 segundos.

}
else
digitalWrite(persinas, HIGH) // apaga el motor de las persinas.


// como nota personal quizas encuentres mas facil hacer esto antes de tus variables globales despues de las librerias;

#define  rele.ON  LOW
#define  rele.OFF HIGH

asi cuando llegues a las persianas puedes poner:

digitalWrite (personas, rele.ON) ; que es un poco mas entendible.




Igual si te srive tengo una pequeña libreria para relevadores, tiene su chiste que no se prendan/apaguen cuando reincias o conectas la tablilla por primera vez, mañana la subo al git, y te la paso.

-Alex.

zalamero

#2
Mar 14, 2018, 09:43 am Last Edit: Mar 14, 2018, 02:37 pm by surbyte
Hola, voy ha intentar explicarme:

El esp8266 que actúa como cliente y que en su entrada va conectado el sensor de lluvia, cuando la plaquita del sensor se moja y siempre que tenga agua, esta No dejara de mandar señal al esp8266 que actúa como servidor con salida gpio2 al led/relé. y eso es lo que No quiero, pues mientras permanezca mojada el led/relé permanece activo. Por eso quiero limitar su tiempo de salida a 20 segundos, lo justo para bajar persianas.

Y cuando la plaquita sensor se seque, lo mismo pero al revés, por la otra salida del servidor la gpeo0
se active durante 20 segundos, tiempo para subir las persianas.

Se que puede parecer complicado, pero es lo que me gustaría realizar, podéis modificar el código a vuestro gusto, y yo lo pruebo en seguida para ver resultados. GRACIAS nuevamente.




Moderador: Imagen editada

zalamero

Lo siento pero soy incapaz de hacerlo funcionar, si alguien puede ayudarme se agradece.

surbyte

Trabajar con ESP01 no es tarea facil.
Tu código es el mismo que tiene la pagina de Jopapa para un cliente/servidor ESP8266.
Te ha explicado AlexLPD como hacerlo y la verdad dices no poder, cuando solamente lo anterior para entenderlo requiere mas conocimiento.

Entonces, no entiendo si solo copiaste y pegaste o en que estas trabado.

Te recomiendo que vayas a Documentacion y veas los tutoriales que alli hay para tener una mejor base de entendimiento.
Las clases de Youtube te ilustrarán sobre problemas similares y tambien te aconsejo el uso de millis() .
Busca todo en documentación, indice de temas tutoriales.

zalamero

#5
Mar 16, 2018, 09:02 am Last Edit: Mar 16, 2018, 11:03 am by zalamero
Hola, como bien dices "copie y pegue" es la verdad, haciendo algunas pequeñas modificaciones para adaptarlo a lo que quiero.
 El tema del arduino en general me gusta, por que me distrae, me relaja me hace olvidarme de los problemas cotidianos y del trabajo. El problema es que nunca he tocado esto y ya de por si hago un gran esfuerzo, no tengo edad para estudiar ahora y la vista se me cansa de estar pegado al ordenador.
 Posiblemente tenga otras cualidades que no tengan otros, como el trabajar en lo mismo durante 40 años.
 Bueno intentare indagar y seguir preguntando, mientras usted me lo permita en este foro (es broma) gracias por contestar a mi post. Un abrazo

surbyte

A ver no se te esta negando la ayuda pero no la pides, no tienes una dudas, estas pidiendo que te hagan o resuelvan un problema.
Eso lo hacemos cotidianamente, de la manera que te propuso AlexLPD que es la solución a tu problema.
Lo que ocurre es que te falta base de conocimientos y por eso no puedes entender lo que te esta diciendo.

Ve a documentación => indice de temas tutoriales => millis() y tambien mira las clases de Youtube
Te serán de ayuda. Comienza por las clases.
Mejora tu base de conocimiento y te aseguro que hay foreros que tienen mas de 80 y estan respondiendo y ayudando. Asi que la edad no es excusa si me lo permites. Y ademas se aprende toda la vida.


Go Up