Temperatur och luftfuktighet Datalogger + Webserver (4 / 4 steg)
Steg 4: Spara data till ett sd-kort
Spara data till ett sd-kort är verkligen lätt för ehternet arduino.SD måste vara fat16 eller fat32 formaterad
Behöver bara till inklusive sd bibliotek, initiera sd-biblioteket och öppna och skriva till en fil
Här är koden:
#include
#include
#include
#include
dht11 DHT11;
#define nSensores 3
int puertos [nSensores];
float fHumedades [nSensores];
float fTemperaturas [nSensores];
int nFilas = 0;
int nFiles = 0;
Fil;
int iNVisitas = 0;
Ange en MAC-adress och IP-adressen för din controller nedan.
IP-adressen kommer att bero på ditt lokala nätverk:
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE};
byte ip [] = {192,168,1, 177};
Starta servern Ethernet-biblioteket
med IP-adress och port vill du använda
(port 80 är standard för HTTP):
Server server(666);
void setup()
{
Starta Ethernet-anslutningen och servern:
Ethernet.BEGIN (mac, ip);
Server.BEGIN();
Serial.BEGIN(115200);
Puertos = {2,3,4}.
pinMode (10, OUTPUT);
IF (!. SD.begin(4))
{
Serial.println ("fel inicializando SD");
nFiles =-1;
}
annat
{
nFiles = 0;
Serial.println ("SD initializada.");
}
}
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)
{
fall 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");
bryta;
i mål -1: Serial.println ("Checksum error"); bryta;
i mål -2: Serial.println ("Time out fel"); bryta;
standard: Serial.println ("okänt fel"); bryta;
}
}
void loop()
{
lyssna efter inkommande klienter
Klienten klienten = server.available();
om (klient) {
en http-förfrågan avslutas med en tom rad
booleska currentLineIsBlank = sant;
samtidigt (client.connected()) {
om (client.available()) {
char c = client.read();
Om du har fått till slutet av raden (fick en newline
karaktär) och raden är tom, http-begäran har avslutats,
så du kan skicka ett svar
om (c == ' "& & currentLineIsBlank) {
Skicka ett standard http-svarshuvud
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
utgående värdet för varje analog ingångsstift
för (int jag = 0; jag / / (int analogChannel = 0; analogChannel < 6; analogChannel ++) {
client.Print ("sensor");
client.Print(i);
client.Print(":");
IF(fHumedades[i]==-1)
client.Print ("fel leyendo el sensor");
annat
{
client.Print (fHumedades [i], 2);
client.Print ("%");
client.Print (fTemperaturas [i], 2);
client.println ("o C");
}
client.println("
");
}
client.Print((iNVisitas++)/2);
client.println ("visitas
");
bryta;
}
if (c == ' ') {
du börjar en ny rad
currentLineIsBlank = sant;
}
annars om (c! = ' ') {
du har fått ett tecken på den aktuella raden
currentLineIsBlank = false;
}
}
}
de web webbläsare möjlighet att ta emot data
Delay(1);
stänga anslutningen:
client.stop();
}
annat
{
om (nFiles > = 0 & & fil)
{
Fil = SD.open ("datalog.txt", FILE_WRITE);
}
Sträng data = "";
för (int jag = 0; jag {
getData(i);
data += 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);
}
}