Pages: [1]   Go Down
Author Topic: Shield de Ethernet que se cuelga / deja de funcionar al azar  (Read 779 times)
0 Members and 1 Guest are viewing this topic.
Huesca, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Estoy haciendo pruebas con la shield de ethernet, esta, enviando datos a un servidor php que los almacena y tal. Lo único que hace el Arduino es coger los datos de los sensores y enviarlos al servidor cada X tiempo programado, no hace nada más.

El problema está en que el Arduino funciona correctamente el tiempo que le da la gana, siempre llega un momento en el que se cuelga y deja de enviar los datos. Bueno, realmente más que colgarse lo que sucede es que la tarjeta deja de hacer su trabajo correctamente, el Arduino sigue funcionando y dándome avisos de error de conexión con un buzzer que le he puesto.

Estos cuelgues pueden darse a los pocos minutos, o a las horas, o tres días después... a un amigo le sucede incluso 11 días después, y otro usuario de un foro lo mismo...

Al principio pensaba que sucedía por las elevadas temperaturas que coge el mosfet al alimentar la placa con 12V, pero lo descarte ya que la última semana ha estado con 5V por el USB y sucede lo mismo.


Por el momento he descartado:
  • Temperaturas del mosfet, ahora está por USB.
  • Que fuera cosa del Duemilanove, así que lo probé con un Mega.
  • Que se quede sin SRAM libre (está en 1245 bytes libres y estables con un ATmega328)
  • Que fuera cosa del servidor, pero no ya que se queda indefinidamente colgado.
  • Que el router le revocara la IP por enviar “1 dato” cada 15 minutos, también lo tuve a 5 minutos una semana. (Tiene configurada una IP estática en el DHCP)
  • Que fuera cosa del router, por ello lo conecte también directo al de Ono en vez del router neutro.
  • Que como por defecto se conecta al router solo en el setup pues perdiera la conexión (lo pase al loop).

Y ya no sé qué más probar la verdad. Alguna solución que os suene leer por internet?
Tenia intención de montar una estación meteorológica 2.0 pero así es inviable :/


PD:
El código sin lo del buzzer para que se entienda mejor:

Code:
#include <SPI.h>
#include <Ethernet.h>

#include <OneWire.h>
#include <DallasTemperature.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress  ip( 192, 168, 1, 6 );
IPAddress server( 111, 222, 333, 444 );  // La IP real del servidor
EthernetClient client;

OneWire oneWire(2);
DallasTemperature sensores(&oneWire);

unsigned long tiempoAntes = 0;
unsigned long tiempoAhora = 0;
unsigned long tiempoEnvio = 600000; // 10 minutos




int freeRam()
{
   extern int __heap_start, *__brkval;
   int v;
   return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}



void setup()
{
   Serial.begin(9600);
   sensores.begin();
   while( !Serial );
}



void loop()
{
   tiempoAhora = millis();
   
   if( tiempoAhora - tiempoAntes > tiempoEnvio )
   {
      tiempoAntes = tiempoAhora;

      conectarseAlRouter();
     
   
      if( !client.connect(server, 80) )
      {
         Serial.println("Error de conexion");
      }
      else
      {
         sensores.requestTemperatures();

         client.print("GET /arduino.php");
         
         client.print("?temperatura="); client.print( sensores.getTempCByIndex(0) );
         client.print("&ram="); client.print( freeRam() );
         client.print("&tiempo="); client.print( millis()/1000/60/60 );

         client.println(" HTTP/1.1");
         client.println("Host: 111.222.333.444"); // La IP del host real
         client.println("Connection: close");
         client.println();

         client.flush();
         client.stop();
      }
   }


} // End loop




void conectarseAlRouter()
{
   if( !Ethernet.begin(mac) )
   {
      Serial.println("Error de conexion usando DHCP");
      Ethernet.begin(mac, ip);
     
      // Una vez se cuelga da error aqui con cada envio de datos:
      while( !Ethernet.begin(mac) )
      {
         Ethernet.begin(mac, ip);
         delay(500);
      }
   }
   delay(1000);
   Serial.println("Conectando");   
}
Logged


giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.

Offline Offline
Newbie
*
Karma: 2
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por aquí otro con el problema, a ver si nos pueden guiar.

Un saludo  smiley-wink
Logged

Huesca, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

De momento sigo igual, esta noche a las 5:55 se paro y lo resetee a las 8:36



Con lo que mo estaba currando :/
Logged


giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1413
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yo suelo hacer un begin unicamente en el setup().
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Huesca, Spain
Offline Offline
Full Member
***
Karma: 3
Posts: 100
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

También lo probé así, que es como viene en los ejemplos, pero igualmente deja de funcionar.

He estado leyendo por otros foros y comentan que es, o podría ser, problema de la librería, concretamente la funcion que cierra la conexión que no siempre la cierra correctamente. No pusieron ningún código para probarlo así que por el momento sigo igual.

Saludos.
Logged


giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.

Pages: [1]   Go Up
Jump to: