Paso 4: Guardar datos en una tarjeta sd
Guardar los datos en una tarjeta sd es muy fácil para el arduino Ethernet.La SD debe ser fat16 o fat32 formateado
Sólo es necesario a la inclusión de la biblioteca de sd, inicializar la biblioteca de sd y abrir y escribir en un archivo
Aquí está el código:
#include
#include
#include
#include
dht11 DHT11;
#define nSensores 3
int puertos [nSensores];
Float fHumedades [nSensores];
Float fTemperaturas [nSensores];
int nFilas = 0;
nFiles int = 0;
Archivo de;
int iNVisitas = 0;
Introduzca una dirección de MAC y dirección IP para el controlador a continuación.
La dirección IP dependerá de tu red local:
mac de bytes [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE};
byte ip [] = {192,168,1, 177};
Inicializar la biblioteca de servidor Ethernet
con la dirección IP y el puerto que desea utilizar
(el puerto 80 es por defecto para HTTP):
Servidor server(666);
void setup()
{
Inicie la conexión Ethernet y servidor:
Ethernet.Begin (mac, ip);
Server.Begin();
Serial.Begin(115200);
puertos = {2,3,4};
pinMode (10, salida);
if (!. SD.begin(4))
{
Serial.println ("Error inicializando SD");
nFiles =-1;
}
otra cosa
{
nFiles = 0;
Serial.println ("SD initializada.");
}
}
void getdata(int iIndice)
{
chk int = DHT11.read(puertos[iIndice]);
fHumedades [fortificazioni] =-1;
fTemperaturas [fortificazioni] =-1;
Serial.Print ("Sensor");
Serial.Print(iIndice);
Serial.Print("");
interruptor (chk)
{
caso 0:
fHumedades [fortificazioni] = (float) DHT11.humidity;
Serial.Print (fHumedades [fortificazioni], 2);
Serial.Print ("%");
fTemperaturas [fortificazioni] = (float) DHT11.temperature;
Serial.Print (fTemperaturas [fortificazioni], 2);
Serial.println ("OC");
rotura;
caso -1: Serial.println ("error de suma de comprobación"); rotura;
caso -2: Serial.println ("error de tiempo de espera"); rotura;
por defecto: Serial.println ("error desconocido"); rotura;
}
}
void loop()
{
Escuchar para clientes entrantes
Cliente cliente = server.available();
Si {} (cliente)
una solicitud http termina con una línea en blanco
Boolean currentLineIsBlank = true;
mientras (client.connected()) {}
Si (client.available()) {}
char c = client.read();
Si has llegado hasta el final de la línea (recibió una nueva línea
carácter) y la línea está en blanco, ha terminado la solicitud http,
para que puedan enviar una respuesta
Si (c == ' ' & & currentLineIsBlank) {}
Enviar un encabezado de respuesta http estándar
Client.println ("HTTP/1.1 200 OK");
Client.println ("tipo de contenido: texto/html");
Client.println();
el valor de cada pin de entrada analógica
para (int i = 0; i / / para (int analogChannel = 0; analogChannel < 6; analogChannel ++) {}
Client.Print ("sensor");
Client.Print(i);
Client.Print(":");
if(fHumedades[i]==-1)
Client.Print ("error leyendo el sensor");
otra cosa
{
Client.Print (fHumedades [i], 2);
Client.Print ("%");
Client.Print (fTemperaturas [i], 2);
Client.println ("OC");
}
Client.println("
");
}
Client.Print((iNVisitas++)/2);
Client.println ("visitas
");
rotura;
}
if (c == ' ') {
vas a empezar una nueva línea
currentLineIsBlank = true;
}
else if (c! = ' ') {}
Has conseguido un carácter en la línea actual
currentLineIsBlank = false;
}
}
}
darle tiempo al navegador de web para recibir los datos
Delay(1);
cerrar la conexión:
Client.STOP();
}
otra cosa
{
Si (nFiles > = 0 & & archivo)
{
archivo = SD.open ("datalog.txt", FILE_WRITE);
}
Datos de cadena = "";
para (int i = 0; i {}
GetData(i);
datos += String(nFilas) + ";" + String(i) + ";" + String((int)fHumedades[i]) + ";" + String((int)fTemperaturas[i]) + "";
}
if(File)
{
File.Print(Data);
Serial.Print(Data);
File.Close();
nFilas ++;
}
Delay(200);
}
}