Probleme acquisition de donnée WIFI + SD

Probleme acquisition de donnée WIFI + SD

Message non lude vukan » Jeu 31 Oct 2013 18:23

Bonjour,

J'ai dans l'optique d'utiliser une carte arduino pour relever des temps d'arrêts et renvoyer les données sur une page HTML par wifi.
Les temps sont mesurer simplement par 2 fils dans un contacteur et note une ligne au moment de la fermeture ou de l'ouverture du contacteur.

Les données enregistrer sont des lignes type :

"ARRET 12/03/2013 12:32:55"
"MARCHE 12/03/2013 14:21:37"

J'utilise pour cela une carte UNO REV3, un shield wifi officiel, un module RTC DS1307 et une carte SD.

Apres plusieurs essais et en bidouillant les librairies j'arrive sans problemes à :

-Utiliser la librairie RTC.
-Vérifier l'état du contact et écrire un relevé sur la SD tel que cité au dessus.
-Etablir la liaison wifi entre le routeur et la carte.
-Afficher simplement les données de la carte en HTML via le serveur WEB.

Apres des soirées de recherche ca coince quand je veux fusionner le 2eme et 4eme code afin que la carte soient autonome et incrémente la SD suivant l'état du contact et avoir la possibilité pour l'utilisateur d'aller vérifier à l'instant T les données sur la SD depuis le réseau sur l'IP de la carte via une simple page HTML.
En effet soit la carte ne se connecte plus, soit rien ne s'affiche, soit la page HTML me lance un téléchargement :shock: :?: :?:
Voici mes deux codes que je voudrais fusionner :
Avez vous une idée ?

Voila le code qui fonctionne pour incrémenter la SD :

#include <Wire.h>
#include "RTClib.h"
#include <SD.h>

RTC_DS1307 rtc;

const int BP=2;
const int APPUI=0;
const int PAS_APPUI=1;
int A;
int B = 0;
int ETAT_BP;


void setup () {


if (!SD.begin(4)) {
Serial.println("Erreur à l'init!");
return;
}
Serial.println("init Ok.");


pinMode(BP,INPUT);
digitalWrite(BP,HIGH);

Serial.begin(9600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(__DATE__, __TIME__));
}
}


void loop () {



DateTime now = rtc.now();

ETAT_BP=digitalRead(BP);


if (ETAT_BP==APPUI){

A = 1;
}
else {

A=0;
}


//// Traitement écriture sur la S


if (A==1 && B==0) {




File theFile;
theFile = SD.open("fichier.txt", FILE_WRITE); // ouverture de fichier.txt en écriture

if (theFile) {
Serial.print("Ecriture de données sur la premiere ligne");

theFile.println(),
theFile.print("EN FONCTIONNEMENT ");
theFile.print(now.year(), DEC);
theFile.print('/');
theFile.print(now.month(), DEC);
theFile.print('/');
theFile.print(now.day(), DEC);
theFile.print(' ');
theFile.print(now.hour(), DEC);
theFile.print(':');
theFile.print(now.minute(), DEC);
theFile.print(':');
theFile.print(now.second(), DEC);



// Fermeture du fichier:
theFile.close();
Serial.println("C'est écrit !");
} else {
// impossible d'ouvrir/créer le fichier:
Serial.println("Erreur d'ouverture de fichier.txt");
}



B = 1; }

else
if (A==0 && B==1) {
File theFile;
theFile = SD.open("fichier.txt", FILE_WRITE); // ouverture de fichier.txt en écriture

if (theFile) {
Serial.print("Ecriture de données sur la premiere ligne");

theFile.println(),
theFile.print("EN ARRET ");
theFile.print(now.year(), DEC);
theFile.print('/');
theFile.print(now.month(), DEC);
theFile.print('/');
theFile.print(now.day(), DEC);
theFile.print(' ');
theFile.print(now.hour(), DEC);
theFile.print(':');
theFile.print(now.minute(), DEC);
theFile.print(':');
theFile.print(now.second(), DEC);



// Fermeture du fichier:
theFile.close();
Serial.println("C'est écrit !");
} else {
// impossible d'ouvrir/créer le fichier:
Serial.println("Erreur d'ouverture de fichier.txt");
}
B = 0; }

//////////// Lecture de la carte SD

File theFile = SD.open("fichier.txt");
if (theFile) {
Serial.println("fichier.txt:");
// lecture du fichier jusqu'à la fin:
while (theFile.available()) {
Serial.write(theFile.read());
}
// Fermeture du fichier:
theFile.close();
}
else {
// Ouverture impossible:
Serial.println("Ouverture impossible de fichier.txt");
}


delay(1000);

}
















Voila le code qui lis la carte SD et l'affiche en HTML :
















#include <SPI.h>
#include <WiFi.h>
#include <Wire.h>
#include <SD.h>
#include "RTClib.h"

RTC_DS1307 rtc;

const int BP=2;
const int APPUI=0;
const int PAS_APPUI=1;
int A;
int B = 0;


IPAddress ip(192, 168, 70, 211);

char ssid[] = "LINKSIS3245"; // your network SSID (name)
char pass[] = "**************"; // your network password
int keyIndex = 0; // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {




pinMode(BP,INPUT);
digitalWrite(BP,HIGH);

Serial.begin(9600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin();

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(__DATE__, __TIME__));
}

SD.remove("fichier.txt");


///////////////////////////////////// init SD
if (!SD.begin(4)) {
Serial.println("Erreur à l'initit de la carte SD");
return;


}
Serial.println("init Ok.");





//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while(true);
}

// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:
delay(10000);
}
server.begin();
// you're connected now, so print out the status:
printWifiStatus();

}


void loop() {
// listen for incoming clients
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 2"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin


client.print("Ceci est un essai");

File theFile = SD.open("fichier.txt");
if (theFile) {
Serial.println("fichier.txt:");
// lecture du fichier jusqu'à la fin:
while (theFile.available()) {
client.write(theFile.read());
}
// Fermeture du fichier:
theFile.close();
}




}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);

// close the connection:
client.stop();
Serial.println("client disonnected");
}
}


void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());

// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);

// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
vukan
 
Messages: 1
Inscription: Jeu 31 Oct 2013 17:56

Re: Probleme acquisition de donnée WIFI + SD

Message non lude phil » Jeu 31 Oct 2013 20:10

En lisant rapidement la doc du shield wifi officiel, il y a une subtilité...
En effet la carte wifi et la carte SD sont sur un seul est meme bus, le bus SPI. Il semble que le SS de la carte SD soit sur la pin 4 et celui de la carte wifi sur la pin 10
http://arduino.cc/en/Main/ArduinoWiFiShield

Je pense que tu doit jouer sur l'etat de la pin 4 et sur celui de la pin 10 pour savoir "a qui tu parles" soit à la partie wifi soit à la partie SD...

un dernier point, tu as beaucoup de data à loguer ? Si c'est pas le cas, tu as une EEPROM d'1K sur la carte arduino...
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19


Retourner vers Logiciel Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité