Etape 4: Enregistrer des données sur une carte sd
Sauvegarde des données sur une carte sd est vraiment facile pour l’arduino Ethernet.La carte SD doit être en fat16 ou fat32 formaté
Suffit d’y compris la bibliothèque de sd, initialiser la bibliothèque de sd et ouvrir et écrire dans un fichier
Voici le code :
#include
#include
#include
#include
dht11 DHT11 ;
#define nSensores 3
int puertos [nSensores] ;
flotteur fHumedades [nSensores] ;
flotteur fTemperaturas [nSensores] ;
int nFilas = 0 ;
desdisquettes int = 0 ;
Fichier de fichier ;
int iNVisitas = 0 ;
Entrez une adresse MAC et l’adresse IP de votre contrôleur ci-dessous.
L’adresse IP sera tributaire de votre réseau local :
la mac de Byte [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xEE} ;
la propriété intellectuelle de Byte [] = {192,168,1, 177} ;
Initialiser la bibliothèque de serveur Ethernet
avec l’adresse IP et le port que vous souhaitez utiliser
(le port 80 est par défaut pour HTTP) :
Serveur server(666) ;
void setup()
{
Démarrez la connexion Ethernet et le serveur :
Ethernet.Begin (mac, ip) ;
Server.Begin() ;
Serial.Begin(115200) ;
Puertos = {2,3,4} ;
pinMode (sortie 10,) ;
if (!. SD.begin(4))
{
Serial.println ("erreur inicializando SD") ;
desdisquettes =-1 ;
}
d’autre
{
desdisquettes = 0 ;
Serial.println ("SD initializada.") ;
}
}
Sub getdata(int iIndice)
{
chk int = DHT11.read(puertos[iIndice]) ;
fHumedades [iIndice] =-1 ;
fTemperaturas [iIndice] =-1 ;
Serial.Print (« capteur ») ;
Serial.Print(iIndice) ;
Serial.Print("") ;
commutateur (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") ;
rupture ;
affaire -1 : Serial.println (« Checksum error") ; rupture ;
affaire -2 : Serial.println ("erreur de délai d’expiration") ; rupture ;
par défaut : Serial.println ("erreur inconnue") ; rupture ;
}
}
void loop()
{
écoute des clients entrants
Client client = server.available() ;
Si {(client)
une requête http se termine par une ligne vide
Boolean currentLineIsBlank = true ;
tandis que (client.connected()) {}
Si (client.available()) {}
char c = client.read() ;
Si vous avez obtenu à la fin de la ligne (a reçu un saut de ligne
caractère) et la ligne est vide, la requête http est terminée,
ainsi vous pouvez envoyer une réponse
Si (c == ' ' & & currentLineIsBlank) {}
Envoyer un en-tête de réponse http standard
client.println ("HTTP/1.1 200 OK") ;
client.println ("Content-Type : text/html") ;
client.println() ;
la valeur de chaque broche d’entrée analogique
pour (int i = 0; j’ai / / for (int analogChannel = 0; analogChannel < 6; analogChannel ++) {
client.Print (« capteur ») ;
client.Print(i) ;
client.Print(":") ;
if(fHumedades[i]==-1)
client.Print ("erreur leyendo el sensor") ;
d’autre
{
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
");
rupture ;
}
if (c == ' ') {
vous commencez une nouvelle ligne
currentLineIsBlank = true ;
}
ElseIf (c! = "") {}
vous avez obtenu un personnage sur la ligne courante
currentLineIsBlank = false ;
}
}
}
donner le temps de navigateur web pour recevoir les données
Delay(1) ;
fermer la connexion :
client.Stop() ;
}
d’autre
{
Si (desdisquettes > = 0 & & fichier)
{
fichier = SD.open ("datalog.txt", FILE_WRITE) ;
}
Chaîne de données = "" ;
pour (int i = 0; i {}
GetData(i) ;
données += 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) ;
}
}