Paso 4: Una bonificación
En caso de que no desee utilizar Thingspeak pero sólo desean su propio servidor Web: utiliza este programa:
/ * * DHT11 Sensor conectado al Pin 2 < a href = "http://arduino-info.wikispaces.com/ethernet-temp-humidity" rel = "nofollow" > http://arduino-info.wikispaces.com/ethernet-temp-...> basado en el código de David A. Mellis & Tom Igoe adaptado por diy_bloke * bmp180sensor en a4/a5 * / / *---(importación necesita bibliotecas)---* / #include < SPI.h > < Ethernet.h > del #include #include < dht11.h > #include < Wire.h > //#include < Adafruit_Sensor.h > //#include < Adafruit_BMP085_U.h > #include < Adafruit_BMP085.h > / *---(declarar constantes y números Pin)---* / #define DHT11PIN 2 / / El sensor de temperatura/humedad / / ingresar una dirección de MAC y dirección IP para el controlador a continuación. La dirección IP dependerá su red local: mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; / *---(Declarar objetos)---* / ip dirección IP (192,168,1, 177); Inicializar la biblioteca de servidor Ethernet / / con la dirección IP y el puerto que desea utilizar / / (puerto 80 por defecto para HTTP): EthernetServer server(80); Bmp Adafruit_BMP085_Unified = Adafruit_BMP085_Unified(10085); Adafruit_BMP085 bmp; dht11 DHT11; El objeto del Sensor / *---(declarar Variables)---* / void setup() / *** instalación: funciona una vez *** / {/ / abrir comunicaciones en serie y esperar para que el puerto a abrir: Serial.begin(9600); mientras (! Serie) {; / / espera para que el puerto serie conectar. Necesario sólo para Leonardo} / / comenzar la conexión Ethernet y servidor: Ethernet.begin (mac, ip); Server.Begin(); Serial.Print (F ("el servidor está en")); Serial.println(Ethernet.localIP()); } //--(end configuración)---void loop() / *---(lazo: corre más y más nuevo)---* / {/ / escuchar para el cliente de EthernetClient de clientes entrantes = server.available(); if (cliente) {Serial.println (F ("nuevo cliente")); / / una petición http termina con una línea en blanco boolean currentLineIsBlank = true; mientras que (client.connected()) {si (client.available()) {char c = client.read(); Serial.Write(c); Si has conseguido al final de la línea (recibió una nueva línea / / carácter) y la línea está en blanco, ha terminado la solicitud http, / / así que usted puede enviar una respuesta si (c == '\n' & & currentLineIsBlank) {/ / enviar un client.println de encabezado de respuesta http estándar ("HTTP/1.1 200 OK"); client.println ("Content-Type: texto/html"); client.println ("conexión: cerrar"); client.println(); client.println("<! HTML de DOCTYPE > "); Client.println ("< html >"); Añadir una etiqueta meta de actualización, por lo que el navegador tira otra vez cada 5 segundos: client.println ("< meta http-equiv = \"refresh\"content = \"5\">"); Client.println ("< head >"); Client.println ("< title >"); Client.println F ("mi Home Environment"); Client.println ("</título >"); Client.println ("< /HEAD >"); Client.println ("< body >"); Client.Print (F ("< h3 > mi casa ambiente </h3 >")); Client.println ("< br/>"); / *---(Lectura del sensor, calcular e imprimir resultados)---* / int chk = DHT11.read(DHT11PIN); Serial.Print (F ("sensor de lectura:")); interruptor (chk) {caso 0: Serial.println(F("OK")); break; caso -1: Serial.println (F "(error de suma de comprobación del)); break; caso -2: Serial.println (F ("error de tiempo de espera")); break; default: Serial.println (F ("error desconocido")); break;} / * obtener un nuevo evento de sensor (BMP085) * / / / sensors_event_t evento; bmp.getEvent(&event); ---client.print (F ("< tabla estilo =" border: 1px solid black; color de fondo: blanco;» > ")); Client.Print F ("< tr >< td >"); Client.Print ("< color de fuente = 'red' > temperatura </font > (° C):"); Client.Print (F ("< /td >< td align ="right">")); Client.println ((float) DHT11.temperature, 1); Client.println (F ("< br/>")); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Client.Print ("< b > < /b > (° F) de temperatura:"); Client.Print (F ("< /td >< td align ="right">")); Client.println(Fahrenheit(DHT11.Temperature), 1); Client.println ("< br/>"); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Client.Print ("< color de fuente = 'azul' > humedad </font > (%):"); Client.Print (F ("< /td >< td align ="right">")); Client.println ((float) DHT11.humidity, 0); Client.println ("< br/>"); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); / * client.print ("< b > < /b > (° K) de temperatura:"); Client.println(Kelvin(DHT11.Temperature), 1); Client.println ("< br/>"); * / client.print ("< i > < /i > (° C) el punto de Rocío:"); Client.Print (F ("< /td >< td align ="right">")); Client.println (punto de rocío (DHT11.temperature, DHT11.humidity)); Client.println ("< br/>"); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Client.Print ("< i > Rocío PointFast < /i > (° C):"); Client.Print (F ("< /td >< td align ="right">")); Client.println (dewPointFast (DHT11.temperature, DHT11.humidity)); Client.println ("< br/>"); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Si (! bmp.begin()) {client.print ("geen sensor");} else {client.print ("presión (hPa):"); Client.Print (F ("< /td >< td align ="right">")); Client.println(BMP.readPressure()/100.0); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Client.Print ("presión (mmHg):"); Client.Print (F ("< /td >< td align ="right">")); Client.println(BMP.readPressure()/133.3); Client.Print F ("< /td >< /tr >"); Client.Print F ("< tr >< td >"); Client.println ("temperatura (º C):"); Client.Print (F ("< /td >< td align ="right">")); Client.Print(BMP.readTemperature()); Client.println ("< br/>"); } client.print F ("< /td >< /tr >"); Client.Print (F ("</table >")); / * Mostrar los resultados (la presión barométrica es una medida en hPa) * / / * Mostrar la presión atmosférica en hPa * / / * client.print ("presión:"); Client.println(Event.Pressure); Client.println ("hPa"); Client.println ("< br/>"); * / / *---(Leído final Sensor)---* / client.println ("</body >"); Client.println ("</html >"); rotura; } Si (c == '\n') {/ / vas a empezar un nuevo currentLineIsBlank de línea = true;} else if (c ! = '\r') {/ / he conseguido un carácter en la actual línea currentLineIsBlank = false;}} } / / dar el tiempo de navegador web para recibir el delay(1) de datos; cerrar la conexión: client.stop(); Serial.println (F ("cliente disonnected")); }} / / FINAL de bucle / *---(escrito por el usuario declarar funciones)---* / / / //Celsius Fahrenheit conversión doble f (doble c) {volver 1.8 * celsius + 32;} doble de //Celsius a la conversión de Kelvin Kelvin (doble c) {volver celsius + 273.15;} / / NOAA de la función de punto de rocío / referencia: < a href = "http://wahiduddin.net/calc/density_algorithms.htm" rel = "nofollow" > http://arduino-info.wikispaces.com/ethernet-temp-...> doble punto de rocío (doble celsius, doble humedad) {doble A0 = 373.15 / (273.15 + celsius); doble suma =-7.90298 * (A0-1); SUMA += 5.02808 * log10(A0); SUMA +=-1.3816e-7 * (pow (10, (11.344*(1-1/A0)))-1); SUMA += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1); SUMA += log10(1013.246); doble VP = pow (10, SUM-3) * humedad; doble T = log(VP/0.61078); var Temp retorno (241.88 * T) / (17,558-T); } / / delta max = 0.6544 wrt dewPoint() / / 5 x más rápido que dewPoint() / Referencia: < un href = "http://en.wikipedia.org/wiki/Dew_point" rel = "nofollow" > http://arduino-info.wikispaces.com/ethernet-temp-...> dewPointFast doble (doble celsius, doble humedad) {doble un = 17.271; doble b = 237.7; doble temp = (un * celsius) / (b + c) + log(humidity/100); doble Td = (b * temp) / (a - temp); volver Td;} / * (THE END) * /