Dudas sobre los datos


#41

Gracias por la ayuda, Jtring26. Al final he optado por adaptar parte del sketch que me has enviado, porqué me daba error en " if(!t){ " y no he dado con la solución. Decía que “t” no estaba declarado en el sketch.

Bueno, finalmente he ido cogiendo las instrucciones que he creído que hacían referencia a la hibernación y las he colocado en el sketch que funciona. De momento estoy probando, pero no imprime ningun dato. Deberé ir mirando la configuración del Thinger…

Un par de preguntas (más), en la última línea ESP.deepSleep(100000*60*5); //Duerme el procesador por 5 minutos, cómo debería hacer para que duerma 59.55 minutos, despierte durante 10 segundos, coincidiendo con la hora para garbar el dato, y vuelva a dormir hasta la próxima solicitud? Qué fórmula debería utilizar, supongo que en esta misma línea?

Y otra cosa, se ha dicho muchas veces que el delay en el loop, no es conveniente y la última instrucción lleva uno de 1000ms. Algun problema?

Gracias por la ayuda y la atención.

Salu2 cordiales.


#42

Hola @jaume,

Culpa mía, debí borrarlo al simplificar el sketch. Basta con incluirlo como variable global, es importante para evitar que se duerma sin haber enviado el mensaje. Ya lo he arreglado. Si no te manda datos a Thinger.io puede ser porque estás durmiendo la placa antes de que termine la comunicación, por eso yo tengo puesto un delay(1000) antes de la instrucción Sleep (quizá sería mejor poner un 2000).

En respuesta a tu pregunta, El cálculo incluido en el atributo es una manía mía, que simplifica las modificaciones, te explido: Multiplica 100.000 microsegundos (1s) por 60 (para hacer 1min) y esto multiplicado por 5 nos permite dormir la placa 5 minutos. Si quieres 59min cambia este 5 por un 59… jeje y para los 55s restantes suma 100.000*55… en total quedaría así:

ESP.deepSleep(100000*60*50+100000*55);

Ahora… si el momento del envío es súper-súper-crítico, me remito a lo que te aconsejó @ega anteriormente, al despertar que sincronice la hora con NTP para asegurarte de es la hora adecuada y manda el mensaje entonces… pero ¿tan crítico es eso?


#43

Hola, Jtrinc26, vale entendido. He llegado a la misma conclusión, mediante otro camino:

void loop()  
{ 
    thing.handle();
   // printValues();  //Descomentar per veure valors a serial
 
//   if(!thing.add_wifi)
//   {                  //si la connexió ha estat creada i el recurs s’ha enviat correctament, t == 1
     thing.write_bucket("climaStick2", "environment");    //Trucant al bucket
    // delay(1000);   //per estar segur que el missatge ha estat enviat completament 
     ESP.deepSleep (3540000);  //Dorm 59 minuts //(100000*60*5);  //Dormint el processador durant 5 minuts
//   }

}

60 minutos son: 3.600.000ms

60 minutos menos 1 (que está enviando datos): 3.540.000ms

Por lo tanto, duerme durante 59 segundos y despierta 1 minuto para mostrar datos. Total, 1h exacta.

Bueno, desde ayer está imprimiendo correctamente los datos. Te explico.

Ahora tengo el sistema como sigue:

1.-“Normal”: Tengo un sensor BME280 conectado a una ESP8266, nueva, conectada a Thinger. Es el sistema con el que he venido trabajando hasta ahora. Me a dado algun problema de horario al imprimir los datos. Va haciendo saltos, no tan seguidos como antes, pero los hace. Está alimentado por red de 220V.

2.- Hibernación: Tengo otro BME280 conectado a otra ESP8266 y también a Thinger, con el mismo conexionado, excepto que tiene una conexión adicional (un puente de D0 a RST, para, según parece, activar automáticamente el despertar del sistema. Este segundo sistema está alimentado, desde hace 24h, mediante dos pilas de 1.5V, total 3V. Debe funcionar correctamente, ya que 24h después la carga que marca es de 2.80V nada que ver con el sistema sin hibernación.

Bueno, los dos sistemas han estado imprimiendo los datos cada xx:00h religiosamente, peeeeero, hoy, a las 19h, AMBOS han marcado 19:04h, es decir que han hecho la impresión 4 minutos más tarde. Lo que me mosquea es que los dos, conectados a la misma plataforma, han cometido EXACTAMENTE el mismo error. Por ello, y en un principio, debo descartar algun fallo en los componentes y alimentación, y debería responsabilizar a la plataforma Thinger, en la gestión que hace del tiempo. Es esto posible?

De momento voy a dejarlo como está, sin tocar nada y ver cómo evoluciona.

PD: Eliminé la instrucción “t++” y “if(!t)”, por qué me daba error de compilación del tipo que “t” no estaba declarado en el sketch, y también el delay (1000); del loop, por los avisos de hipotéticos fallos por la parada del sistema.

Pero funciona tal cómo te he indicado más arriba.

Y bien, que opinas?

Muchas gracias por la atención y la ayuda.

Salu2 cordiales.


#44

La instruccion esp.deepsleep es en microsegundos, se debe multiplicar por 10^6 para obtener segundos, ojo con esto

https://www.esp8266.com/wiki/doku.php?id=esp8266_power_usage

Otra explicacion para la falla con ambos dispositivos es una intermitencia con el acceso a internet (si van por el mismo medio), que se hayan conectado a las :04 y justo en ese instante la plataforma los detecta e interroga instantáneamente, si esto es asi, de que la plataforma interroga apenas se conecta el dispositivo y despues cada hora, explica el comportamiento errático que había antes.

Saludos,


#45

Hola de nuevo, Ega, vamos a ver, seguro que me equivoco al interpretarte, pero los microsegundos que tengo en el sketch (ESP.deepSleep (3540000);), directamente son:

3540000 milisegundos = 59 minutos, + 60000 milis (1 minuto) = 3.600.000 milis = 60 minutos.

Si multiplico 3540000·10 ·6 = 212.400.000 milis = 3.540 minutos = 59 horas.

Me equivoco? No lo he entendido?

Sobre el fallo de los dos dispositivos, me mosquea mucho que se produzcan exactamente los mismos fallos en las dos lecturas siempre. Me he decidido a separarlos. He dejado el original tal cual y he abierto otra cuenta, con otro correo, he copiado el sketch del primero, que funciona más o menos bien, le he cambiado los parámetros del device y credenciales y estoy a la espera de ver si funciona…

pero el problema con los datos sigue igual… arfffffffffffffffff, ya no se que hacer!!! Empieza a asaltarme el desespero y ronda el desanimo…

Imatge1

Salu2 cordiales, y gracias por la ayuda…


#46

Esta instrucción va a hacer que el dispositivo se duerma por 3.54 segundos, porque el parámetro de entrada de la función según la documentación, es en microsegundos.

Haz la estimación en segundos y multiplicas por 10^6 (1000000), en la instrucción lo tienes en milisegundos, en ese caso deberías multiplicar por 10^3 para tenerlo en microsegundos, me explico?


#47

Gracias por la aclaración, EGA, ni me había fijado en el “detallito” de los micro y los milis… Si lo pongo directamente en milis no sirve? O Thinger y el sketch funcionan con microsegundos?

De momento está puesto, a ver que pasa… Ya te digo algo.

Gracias por la ayuda. Salu2 cordiales.


#48

Lo que le pongas como parámetro en ese comando lo va a interpretar en microsegundos, no tiene nada que ver con thinger ni con las otras instrucciones.

Por ejemplo, hay una instruccion que es delayMicroseconds(); que es equivalente al delay que conocemos (que funciona con milisegundos), pero esta funciona con microsegundos, no tienen nada que ver con el resto de instrucciones ni con la plataforma.