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");
}