Go Down

Topic: ethernet shield + RF 433Mhz (Read 3392 times) previous topic - next topic

gains

hola,

estoy haciendo una estacion meteorologica para casa con dos sensores remotos, uno para interior y otro para exterior, transmitiendo de forma inalabrica con los modulos FS1000 de 433MHz. Mi intencion es poderlo ver en un display 16x2 i2c y poder ver los datos a traves de la web, simplemente los valores.

No se nada de programación, de electronica y de RF aun me defiendo, pero poco a poco mirando aqui y alla, copia-pega de aqui alla he hecho funcionarlo hasta poderlo ver en el display.
He estado intentado hacerlo funcionar con la Ethernet shield, montar un simple servidor que pueda ver los valores de las 2 sondas, pero se queda todo el rato el navegador en "cargando..." y no consigo conectar.
He revisado el tema de la ip, ip fija, con y sin gateway y submask, dhcp etc... consigo hacer un ping obteniendo respuesta desde otro pc en la misma red, pero no consigo que cargue con ningun navegador.

He estado mirando sketch que ha hecho la gente con la ethernet shield, incluso los ejemplos, por si me habia dejado algo, pero creo que esta bien las configuraciones, pero mis pocos conocimientos de programacion no me dejan ver mas  :~
Podriais hecharme una mano donde he cometido el error?

Os dejo el codigo que hasta ahora he podido conseguir hacer funcionar hasta el display, pero no los datos en una simple web :smiley-roll:

Code: [Select]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <VirtualWire.h>
#include <SPI.h>
#include <Ethernet.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

EthernetServer server(80);

int Sensor1Data;
int Sensor2Data;
int Sensor3Data;

int h, t, m;

char StringReceived[21];
int led = 13;


void setup() {
 
  lcd.begin(16, 2); 
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
  pinMode(led, OUTPUT);


    vw_setup(2000);
     
    vw_set_rx_pin(7); 
   
    vw_rx_start();       

lcd.setCursor(1, 0);
lcd.print("RX is");
lcd.setCursor(1, 1);
lcd.print("OK");
delay (2000);
lcd.clear();
}



void loop(){
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
     
    if (vw_get_message(buf, &buflen))
    {
      digitalWrite(led, HIGH);
     
   
      int i;
       
        for (i = 0; i < buflen; i++)
{               
          StringReceived[i] = char(buf[i]);
          Serial.print(StringReceived[i]);
}

sscanf(StringReceived, "%d,%d,%d",&Sensor1Data, &Sensor2Data, &Sensor3Data);

digitalWrite(led, LOW);       
h = Sensor1Data;
t = Sensor2Data;
m = Sensor3Data;

if (Sensor3Data == 1) // Numero de sonda
{
lcd.setCursor(0, 0);
    lcd.print("T=");
    lcd.print(t);
    lcd.write(0b11011111);
    lcd.print("C");
    lcd.setCursor(7, 0);
    lcd.print("H=");
    lcd.print(h);
    lcd.print("%");
    lcd.setCursor(13, 0);
    lcd.print("S=");
    lcd.print(m);
Serial.println(Sensor3Data);

}
if (Sensor3Data == 6) // numero de sonda
{

lcd.setCursor(0, 1);
    lcd.print("T=");
    lcd.print(t);
    lcd.write(0b11011111);
    lcd.print("C");
    lcd.setCursor(7, 1);
    lcd.print("H=");
    lcd.print(h);
    lcd.print("%");
    lcd.setCursor(13, 1);
    lcd.print("S=");
    lcd.print(m);
Serial.println(Sensor3Data);
}

if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read");
  } else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
    Serial.print("Sonda:");
    Serial.print(m);
    Serial.println();
    Serial.println();
  }
//--------------HASTA AQUI TODO FUNCIONA OK------------------------
//--------------A PARTIR DE AQUI NO CARGA EL CLIENTE WEB-----------
//--------------EL NAVEGADOR SE QUEDA...CONECTANDO...--------------


EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n' && currentLineIsBlank) {
         
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 1");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
       
        if (Sensor3Data == 1) // Numero de sonda
            {
           client.print("SONDA: ");
            client.println("</H2>");
            client.println("<H1>");
            client.print(m);
            client.println(" %\t");
            client.println("</H1>");
            client.println("<br/>");
            client.println("<p />");

            client.print("Temperatura: ");
            client.println("</H2>");
            client.println("<p />");
            client.println("<H1>");
            client.print(t);
            client.println(" &#176;");
            client.print("C");
            client.println("</H1>");
            client.println("<p />");
            client.println("<H2>");
            client.print("Humedad: ");
            client.println("</H2>");
            client.println("<H1>");
            client.print(h);
            client.println(" %\t");
            client.println("</H1>");
            client.println("<br/>");
            client.println("<p />");
            }
            if (Sensor3Data == 6) // numero de sonda
            {
            client.print("SONDA: ");
            client.println("</H2>");
            client.println("<H1>");
            client.print(m);
            client.println(" %\t");
            client.println("</H1>");
            client.println("<br/>");
            client.println("<p />");
           
            client.print("Temperatura Ext.: ");
            client.println("</H2>");
            client.println("<p />");
            client.println("<H1>");
            client.print(t);
            client.println(" &#176;");
            client.print("C");
            client.println("</H1>");
            client.println("<p />");
            client.println("<H2>");
            client.print("Humedad Ext.: ");
            client.println("</H2>");
            client.println("<H1>");
            client.print(h);
            client.println(" %\t");
            client.println("</H1>");
            client.println("<br/>");
            client.println("<p />");
            client.println("<p />");
            client.println("<p />");
            client.println("<H2>");
            }           
         
          client.println("</html>");
          break;
        }
        if (c == '\n') {
         
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
         
          currentLineIsBlank = false;
        }
      }
    }
   
    delay(1);
   
    client.stop();
    Serial.println("client disonnected");
  }
 
//----------------------------------------------------
//----------------------------------------------------
//----------------------------------------------------

memset( StringReceived, 0, sizeof( StringReceived));
}
}


Muchas gracias de antemano, a ver si con un poco de suerte puedo destravarme.

saludos

maxid

#1
Apr 16, 2014, 03:13 pm Last Edit: Apr 22, 2014, 08:02 pm by maxid Reason: 1
el modulo rf433 lo debes hacer transmitir/recibir  por los pines 0 y 1 (tx/rx) y por la lan lo que quieras
El que pregunta aprende, el que responde aprende a responder.

gains

hola Maxid,

muchas gracias por contestar, he probado lo que me has dicho, he puesto a los sensores el pin 2 para TX y al arduino que recibe le he puesto el 3 para RX y sigue sin dar resultado.  Influye mucho los puertos para tx-rx? es decir antes tenia TX pin 4 en los sensores y pin 7 al que recibe RX y recibibe todo bien, incluso en el serial. Lo unico que no carga.
He probado los sketch de ejemplo de ethernet y funcionan bien, y a simple vista esta como aqui.

Alguna pista mas? :~

Saludos!

maxid

en arduino uno por ejemplo los pines tx/rx estan compartidos con el usb. Con lo que para subir el sketch debes retirar las conexiones.
No se a que te referis con sensores y esos pines.

En el pin tx conectas el data del transmisor. y en el pin rx el data del receptor. y listo
El que pregunta aprende, el que responde aprende a responder.

gains

#4
Apr 16, 2014, 08:39 pm Last Edit: Apr 16, 2014, 08:42 pm by gains Reason: 1
hola Maxid,

Me referia que al arduino uno que tengo en el display, solo tengo el RX (modulo receptor), puesto en el pin 3. Y en los otros dos arduinos los TX (modulos transmisores), puestos en el pin 2. Si es asi como me decias tampoco me funciona. Los datos llegan bien en el serial, pero no carga la web.

Por eso preguntaba si influye mucho el tema de pines tx-rx una vez que recibas datos y salen en el serial tambien.

Lo he hecho bien? :smiley-roll:

Saludos!

maxid

Mejor que pongas un esquema del conexionado porque no te entiendo. creo estas mezclando cosas.
El que pregunta aprende, el que responde aprende a responder.

gains

#6
Apr 16, 2014, 09:18 pm Last Edit: Apr 16, 2014, 09:19 pm by gains Reason: 1
hola Maxid,

si, creo que me explico mal con lo de tx y rx.

Quote
Me referia que al arduino uno que tengo en el display, solo tengo el modulo receptor, puesto en el pin 3. Y en los otros dos arduinos los modulos transmisores, puestos en el pin 2. Si es asi como me decias tampoco me funciona. Los datos llegan bien en el serial, pero no carga la web.
Asi creo que se me entiende mejor.

te adjunto un esquema.



El esquema del receptor es una ethernet shield, disculpa.


maxid

Te dije mal
Para transmitir el data en el pin tx
y para recibir en el pin rx
El que pregunta aprende, el que responde aprende a responder.

gains

ok lo acabo de probar (RX pin 0 y TX pin1) y creo que peor, es decir, el modulo de transmision se queda siempre en transmision continua, al tener un walky que me sube a 433Mhz he podido comprobarlo, no me sale en el display asi y tampoco me carga la web  :~





maxid

Porque no empiezas por algo simple
Enviar 1 caracter y ver que llegue al otro lado.
puedes poner un delay o un pulsador para iniciar la transmision.

el monitor serial captura lo que envias por el puerto y debiera salir por el modulo TX.
El que pregunta aprende, el que responde aprende a responder.

gains

#10
Apr 16, 2014, 10:32 pm Last Edit: Apr 16, 2014, 10:35 pm by gains Reason: 1
si, asi es como fui haciendo hasta llegar a este obstaculo. Primero una cosa luego la otra, hasta que llegue a la ethernet.

Por serial por lo menos lo puedo ver todo bien de como se recibe por eso creo que el tema sondas(arduinos con transmisores) me funciona bien. Digo creo porque realmente no se si pueden influir mas cosas.



Si hago el sketch server simple de la libreria, funciona a la perfeccion, pero pasandolo al sketch que pretendo hacer funcionar, no hay forma de que el navegador cargue la web.  :~

ehrja

Tal vez has mezclado códigos de cliente y servidor.
busca la documentación de la librería de tu tarjeta Eternet, por cierto estoy haciendo un proyecto parecido, con una sola estación.
ENC28J60 + DHT11 + 433MHZ 
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

#12
Apr 20, 2014, 08:06 am Last Edit: Apr 20, 2014, 08:53 am by gains Reason: 1
Hola Ehrja,

muchas gracias por contestar, pegare un vistazo a ver si es por mezclar codigos sin haberme dado cuenta  :~
Animarte desde aqui con tu proyecto tambien!

Utilizo W5100 + 2x DHT11 + 2x 433MHZ + LCD 16x2 i2c

Saludos!

EDITO:
Acabo de revisarlo, y esta creo todo conforme el sketch del server, he probado incluso a borrar el contenido del codigo de los sensores para que solo me muestre un html en blanco, pero nada tampoco, se queda mi navegador en cargando...
Tengo que montar igual que el "servidor" de los ejemplos de la libreria ethernet verdad?.  Los ejemplos de la libreria si me funcionan, pero al pasarlo al sketch no :smiley-slim:

ehrja


EDITO:
Acabo de revisarlo, y esta creo todo conforme el sketch del server, he probado incluso a borrar el contenido del codigo de los sensores para que solo me muestre un html en blanco, pero nada tampoco, se queda mi navegador en cargando...
Tengo que montar igual que el "servidor" de los ejemplos de la libreria ethernet verdad?.  Los ejemplos de la libreria si me funcionan, pero al pasarlo al sketch no :smiley-slim:


Ok me he confundido un poco:

He comparado el tu código con el del ejemplo pero no he encontrado nada, lo revisare mas tarde.
//----
Los ejemplos si te funcionan verdad?
y al agregar el código del LCD y/o el del receptor inalambrico se queda esperando el navegador? 
28.11.2014  &#8224Roberto Gómez Bolaños, Chespirito.   Q.P.D.
¿Y ahora quien podra defendernos?

gains

Disculpa Ehrja, tambien puede que yo no me explique bien  :smiley-red:

Si, los ejemplos funcionan todos bien, no hay problemas, inclusos ejemplos que hay en la red que hacen lecturas de los analogos tambien funcionan bien.
Exacto! es cuando agrego el codigo server para que me muestre los valores en un simple html, como multitud de ejemplos que hay.
El navegador se queda todo el rato..."cargando..." pero nunca llega a cargar.

El lcd y el serial me funciona bien, es simplemente cuando intento hacer un servidor web con las lecturas no me sale.

Muchas gracias por tomarte las molestias en revisarlo Ehrja

Saludos

Go Up