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[i]==-1) client.print(" error leyendo el sensor"); else { client.print(fHumedades[i], 2); client.print(" % "); client.print(fTemperaturas[i], 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)
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
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 😉
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???
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.
Oye cuando pongo tu codigo en mi arduino 1.0.1 (Windows) me da muchos errores porque sera?
Copia aquí los errores y vemos cómo resolverlos.
Saludos
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.
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
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 🙂
Error mío, disculpen, olvidé instalar la librería DHT11… ¡Gracias!
No pasa Gloria. ¿te funcionó todo finalmente?
Un saludo
Error fatal: DHT.h: No existe tal archivo o directorio
He instalado la librería y me sigue saliendo el mismo error, qué debo hacer para solucionar éste error?
Hola Ismael, me temo que has instalado otra librería DHT. Abre el menú Archivos->Ejemplos->DHT y mira el ejemplo que viene.
Saludos