Hola , estoy construyendo una estación meteorológica con varios sensores para tener en un principio datos de humedad, temperatura, presión y radiación solar.
Hasta aquí bien. saca los datos por el serial sin problemas, pero al meter la librería ethernet no funciona. He configurado el router y si da salida al exterior de la Lan local.
Os pongo el código a ver si me podéis ayudar:
#include <SPI.h>
#include <Wire.h> // libreria I2C
#include <dht.h> // Libreria Sensor Temp/Humedad
#include <Ethernet.h>
#define ADDRESS_SENSOR 0x77 // Sensor address
#define DHT22_PIN 6 // Pin del sensor DHT22
#define pin_sensorUV 2 // Pin A2 Analogico del sensor UV
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,1,177);
//IPAddress gateway(192, 168, 1, 1);
//IPAddress subnet(255, 255, 255, 0);
EthernetServer server(83); // puerto de salida
dht DHT;
int16_t ac1, ac2, ac3, b1, b2, mb, mc, md; // Store sensor PROM values from BMP180
uint16_t ac4, ac5, ac6; // Store sensor PROM values from BMP180
// Ultra Low Power OSS = 0, OSD = 5ms
// Standard OSS = 1, OSD = 8ms
// High OSS = 2, OSD = 14ms
// Ultra High Resolution OSS = 3, OSD = 26ms
const uint8_t oss = 3; // Set oversampling setting
const uint8_t osd = 26; // with corresponding oversampling delay
float T, P; // Set global variables for temperature and pressure
char c;
int uvIndice;
int *ptr_uv= &uvIndice;
void setup()
{
Wire.begin(); // Activate I2C
Serial.begin(9600); // Set up serial port
// Comienzo de la conexión
Ethernet.begin(mac, ip);
server.begin();
init_SENSOR(); // Initialize baro sensor variables
delay(100);
}
void loop()
{
int32_t b5;
int chk = DHT.read22(DHT22_PIN);
b5 = temperature(); // Read and calculate temperature (T)
Serial.print("Temperature: ");
Serial.print(T, 2);
Serial.print(" C, ");
P = pressure(b5); // Read and calculate pressure (P)
Serial.print("Pressure: ");
Serial.print(P, 2);
Serial.println(" mbar, ");
float Temp =(DHT.temperature);
Serial.print(Temp);
Serial.print(" C temp ,");
float Hum =(DHT.humidity);
Serial.print(Hum);
Serial.println("% Humedad");
float TempRoc= pow((Hum/100), 0.125)*(110+Temp)-110; // calcula la temp de Rocio
Serial.print(TempRoc); // combierte el float a solo dos decimales
Serial.println(" C Temperatura de Rocio");
CalculoUV();
Serial.print(" Indice UV: ");
Serial.print(*ptr_uv); // puntero que contiene el valor UV
Serial.println();
float metros= 125*(Temp-TempRoc); // Formula para calcula base de los Cumulus
Serial.print("Altura Base Cumulus: ");
Serial.print(metros);
Serial.println(" m");
Serial.println();
Serial.println();
/* Salida HTML por ethernet */
EthernetClient client = server.available();
if (client) {
// una petición http termina con una línea en blanco
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
//Si se llega al final de la línea se recive un nuevo carácter de
//línea y si se trata de una línea en blanco la petición http ha terminado
//así que se envía la respuesta
if (c == '\n' && currentLineIsBlank) {
// cabezera típica http
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // se cierra la conexión una vez se ha respondido a la petición
client.println("Refresh: 5"); // se refresca la página automáticamente cada 5 segundos
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
int32_t b5;
int chk = DHT.read22(DHT22_PIN);
b5 = temperature(); // Read and calculate temperature (T)
P = pressure(b5);
float Temp =(DHT.temperature);
float Hum =(DHT.humidity);
float TempRoc= pow((Hum/100), 0.125)*(110+Temp)-110;
float metros= 125*(Temp-TempRoc);
client.println("<head><title>Mi estacion Meteorologica</title></head>”");
client.println();
client.println("Temperatura");
client.print(Temp);
client.println(" C");
client.print("Humedad");
client.print(Hum);
client.println(" %");
client.print("Punto de Rocio");
client.print(TempRoc);
client.println(" C");
client.print("Pesion");
client.print(P ,2);
client.println(" mbar");
client.print(" Indice UV: ");
client.println(*ptr_uv);
client.print("Altura Base Cumulus: ");
client.print(metros);
client.println(" m");
}
client.println("</html>");
break;
}
if (c == '\n') {
// se comienza una nueva línea
currentLineIsBlank = true;
}
else if (c != '\r') {
// se ha obtenido un carácter en la línea actual
currentLineIsBlank = false;
}
}
}
delay(10);
// se cierra la conexión
client.stop();
//Serial.println("client disonnected");
delay(5000);
}
Aqui despues estarian las funciones, no las pongo por espacio maximo permitido
He revisado la parte ethernet con el código de ejemplo del servidor de la librería y esta bien. Y he vuelto a poner la variables a imprimir por la web por no tener visión a dichas variables desde otro bloque.
Al meter la dirección y el puerto solo imprime
no lo entiendo.
Gracias de antemano.