Stap 4: Gegevens opslaan op een sd-kaart
De gegevens opslaan op een sd-kaart is echt makkelijk voor de arduino ehternet.De SD moet fat16 of fat32 geformateerd worden
Hoeft alleen aan de sd-bibliotheek, zoals de sd-bibliotheek te initialiseren en te openen en te schrijven naar een bestand
Hier is de code:
#include
#include
#include
#include
dht11 DHT11;
#define nSensores 3
int puertos [nSensores];
float fHumedades [nSensores];
float fTemperaturas [nSensores];
int nFilas = 0;
int nFiles = 0;
Bestand;
int iNVisitas = 0;
Voer een MAC-adres en het IP-adres voor uw controller hieronder.
Het IP-adres zal afhankelijk van uw lokale netwerk zijn:
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE};
byte ip [] = {192,168,1, 177};
Initialiseren van de Ethernet server bibliotheek
met het IP-adres en de poort die u wilt gebruiken
(poort 80 is de standaardwaarde voor HTTP):
Server server(666);
VOID Setup
{
de Ethernet-verbinding en de server starten:
Ethernet.begin (mac, ip);
server.begin();
Serial.begin(115200);
Puertos = {2,3,4};
pinMode (10, OUTPUT);
if (!. SD.begin(4))
{
Serial.println ("fout inicializando SD");
nFiles =-1;
}
anders
{
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("");
schakelaar (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");
breken;
kast -1: Serial.println ('Checksum-fout'); breken;
kast -2: Serial.println ("time-out fout"); breken;
standaard: Serial.println ('onbekende fout'); breken;
}
}
void loop
{
luisteren voor clients voor inkomende
Cliënt = server.available();
Als (client) {}
een http-verzoek eindigt met een lege regel
Boole currentLineIsBlank = waar;
terwijl (client.connected()) {}
Als (client.available()) {}
char c = client.read();
Als u toegang hebt verkregen tot het einde van de regel (ontvangen een newline
teken) en de regel is leeg, de http-aanvraag is beëindigd,
zodat u kunt een antwoord sturen
Als (c == "" & & currentLineIsBlank) {}
verzenden van een standaard http-antwoordheader
client.println ("HTTP/1.1 200 OK");
client.println ("Content-Type: text/html");
client.println();
uitgang de waarde van elke analoge invoer pin
voor (int i = 0; i / / voor (int analogChannel = 0; analogChannel < 6; analogChannel ++) {}
client.Print ("sensor");
client.Print(i);
client.Print(":");
if(fHumedades[i]==-1)
client.Print ("fout leyendo el-sensor");
anders
{
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
");
breken;
}
if (c == ' ') {
je begint een nieuwe regel
currentLineIsBlank = true;
}
anders als (c! = "") {}
je hebt gekregen een teken op de huidige regel
currentLineIsBlank = false;
}
}
}
de web browser tijd geven om te ontvangen van de gegevens
delay(1);
de verbinding sluiten:
client.stop();
}
anders
{
Als (nFiles > = 0 & & bestand)
{
bestand = SD.open ("datalog.txt", FILE_WRITE);
}
Gegevens string = "";
for (int i = 0; ik {}
GetData(i);
gegevens += 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);
}
}