Modificando el ejemplo WebServer que viene con arduino es muy sencillo hacer que los datos de nuestros sensores estén disponibles a traves de internet. En la modificación que hemos hecho simplemente medimos y almacenamos los valores de nuestros sensores. En caso de que haya una conexion http devolvemos una página muy simple con los últimos valores que hemos recuperado.

Podéis ver los datos actuales sin más que conectar con mi arduino-servidor (no puedo asegurar que esté activo en este momento).

#include <SPI.h>
#include <Ethernet.h>
#include <dht11.h>



dht11 DHT11;

#define nSensores 3 
int puertos[nSensores];
float fHumedades[nSensores];
float fTemperaturas[nSensores];

int iNVisitas=0;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE };
byte ip[] = { 192,168,1, 177 };

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
Server server(666);
void setup()
{
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  
  Serial.begin(115200);
  puertos={2,3,4};
  
}

void getdata(int iIndice)
{
  int chk = DHT11.read(puertos[iIndice]);
  fHumedades[iIndice]=-1;
  fTemperaturas[iIndice]=-1;
  
  Serial.print("Sensor ");
  Serial.print(iIndice);
  Serial.print(" ");
  switch (chk)
  {
    case 0:   
      fHumedades[iIndice]=(float)DHT11.humidity;
      Serial.print(fHumedades[iIndice], 2);
      Serial.print(" % ");
      fTemperaturas[iIndice]=(float)DHT11.temperature;
      Serial.print(fTemperaturas[iIndice], 2);
      Serial.println(" o C");
        break;
    case -1: Serial.println(" Checksum error"); break;
    case -2: Serial.println(" Time out error"); break;
    default: Serial.println(" Unknown error"); break;
  }

  
}


void loop()
{
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {

        char c = client.read();
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          // output the value of each analog input pin
          for(int i=0;i<nSensores;i++){
//          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            client.print("sensor ");
            client.print(i);
            client.print(": ");            
            if(fHumedades==-1)
              client.print(" error leyendo el sensor");
            else
            {
              client.print(fHumedades, 2);
              client.print(" % ");
              client.print(fTemperaturas, 2);
              client.println(" o C");            
            }
            client.println("<br />");            
          }
          client.print((iNVisitas++)/2);
          client.println(" visitas <br />");

          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
  else
  {
    for(int i=0;i<nSensores;i++)
      getdata(i);
    delay(200);
  }
}

En próximas entregas añadiremos conectividad a nuestro arduino usando protocolos más industriales como ModBus

DHT11 en arduino ethernet 4: Por fin internet (http)
Etiquetado en:                

11 thoughts on “DHT11 en arduino ethernet 4: Por fin internet (http)

  • 7 noviembre, 2011 a las 16:34
    Enlace permanente

    Hola,
    Ando liado con un proyecto por el estilo, en el que además Arduino mandará un SMS usando un MODEM SIEMENS TC35 cuando la temperatura suba de un valor fijado. Pero la cuestión va por el servidor web, ¿sabrías de alguna librería para Arduino en el que generase un fichero de imagen (da igual el formato) para cargarla en la web a modo de historial de temperaturas?

    Gracias

    Responder
  • 7 noviembre, 2011 a las 23:24
    Enlace permanente

    Me encanta que hagas esa pregunta, de hecho estaba previsto explicarlo en una próxima entrega, pero te adelanto algo que supongo que te bastará para arrancar.
    Dudo mucho que arduino tenga suficiente capacidad para generar los gráficos (la mayoría de los formatos necesita compresión y por tanto cálculo pesado).
    En cambio si que podemos usar google char api que nos permite de forma sencilla y a partir de los propios datos generar una url que tiene todo lo necesario para generar la imagen. Te paso un ejemplo de un tutorial de adictos al trabajo

    http://chart.apis.google.com/chart?chs=250×100&chd=t:12.5,76.5,44.0&chds=-20,80&cht=lc&chl=A|B|C

    Por cierto, espero un enlace cuando tengas tu trabajo listo 😉

    Responder
  • 3 marzo, 2012 a las 3:09
    Enlace permanente

    Hola, y como yo puedo hacer que los datos viejos y nuevo que lea el sensor se quede grabado en el webserver..

    por ejemplo
    temp1=35 >>>1era medida
    temp2=40>>> 2da medida

    y que no se borren las otra se vallan quedando como logro eso???

    Responder
  • 7 marzo, 2012 a las 0:54
    Enlace permanente

    Lo único que necesitas el almacenar los valores en un array de (int valores[100]) y llevar la cuenta del número de valores que llevas y mostrar todos los históricos cuando tengas más de del tamaño de tu array (100 en el ejemplo) vas borrando los más antiguos.
    Suerte con la idea.

    Responder
  • 5 octubre, 2012 a las 1:48
    Enlace permanente

    Oye cuando pongo tu codigo en mi arduino 1.0.1 (Windows) me da muchos errores porque sera?

    Responder
    • 6 octubre, 2012 a las 0:39
      Enlace permanente

      Copia aquí los errores y vemos cómo resolverlos.

      Saludos

      Responder
  • 2 noviembre, 2012 a las 19:59
    Enlace permanente

    Hola. He visto tu proyecto y la verdad que me resulta muy interesante.
    Te explico un tema. Tengo una idea de proyecto de hace tiempo, pero como no he tocado nunca arduino, y no tengo mucha idea de electronica, voy con miedo de como llevarlo a cabo.
    La idea es sustituir el termostato de la calefaccion de casa, por un circuito que se conecta a la caldera por cable, y a internet via “wifi”.
    El tema es poder ver la temperatura desde un movil, y poder encender o apagar la calefaccion a gusto.
    He estado mirando, y todo lo que encuentro de utilidad es con ethernet, y necesitaria poder montarlo con wifi y no se si las librerias funcionan igual o son diferentes.
    Tambien he estado valorando con la placa openpicus, pero me lio a la hora de elegir sensores y eso (por desconocimiento).

    Agradeceria tus comentarios y ayuda.

    Un saludo.

    Responder
    • 5 noviembre, 2012 a las 0:08
      Enlace permanente

      Hola, el cambio con un shield wifi sería mínimo, aquí puedes ver las modificaciones para usar wifly shield

      No te puedo ayudar con la placa openpicus, pues no la he usado.

      Un saludo

      Responder
  • 26 octubre, 2013 a las 3:37
    Enlace permanente

    Buen día, en la parte que se declara
    dht11 DHT11;

    Me presenta el error ‘dht11’ does not name a type…
    No sé si podrían ayudarme, por favor 🙂

    Responder
    • 26 octubre, 2013 a las 3:49
      Enlace permanente

      Error mío, disculpen, olvidé instalar la librería DHT11… ¡Gracias!

      Responder
      • 27 octubre, 2013 a las 18:30
        Enlace permanente

        No pasa Gloria. ¿te funcionó todo finalmente?
        Un saludo

        Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *