Go Down

Topic: Ftp_Filezilla_Datalogger_ UDP (Read 517 times) previous topic - next topic

berny76

Bonjour à tous

Récemment arrivé dans la communauté arduino, j'ai élaboré un sketch pour faire des relevés de courant (2 voies) avec stockage sur SD et transfert vers serveur FTP filezilla.

Après quelques galères,j 'ai une solution qui fonctionne. (Mesure + Enregistrement sur SD + Transfert FTP ->ok)

Mais il faut que je réalise également la datation des données et la rien ne va plus.

-Piste 1 : Utilisation d'un module RTC DT1307  mais pb lorsque j'intègre la RTClib rien de fonctionne (utilisation shield snootlab) poutant le shield fonctionne dans d'autre prog.
-Piste 2 : Utilisation d'un serveur temps UDP et la pareil.

Quelle est l'erreur dans mon sketch pour ne pas aboutir au fonctionnement correct de l'UDP?

Merci de votre aide

Berny

berny76

Malgré mes recherches un le net, je n'y arriva pas.

j'ai déjà explorer plusieurs piste mais a chaque fois ça n'abouti pas.

Personne pour me donner un petit cou de main ou un conseil ?

Berny



Artouste


Malgré mes recherches un le net, je n'y arriva pas.

j'ai déjà explorer plusieurs piste mais a chaque fois ça n'abouti pas.

Personne pour me donner un petit cou de main ou un conseil ?

Berny




bonjour
mets ton code avec les essais ds1307

berny76

Bonjour Artouste

merci pour ton aide,

Ci joint le code de mon sketch

Je te mets en pj une capture de la liaison série avec le DT1307 pour que tu ai plus d'info

La perso, je bloc. La compilation se passe bien donc pas d'erreur. Mais après ça bloc que ce soit la version module RTC ou avec la version UDP.

Si je retire la lib RTC ça fonctionne correctement ( après avoir retiré quelque serial.print) mais je n'ai plus de datation de mes relevés.


Ma config : arduino uno V3 le shield ethernet avec sa SD + le module rtc DT1307 de soontbab.



Code: [Select]

/*
   ftp2_filezilla
   FTP passive client for IDE v1.0.1 and w5100/w5200
   Modification HB le 24042013 Serveur FTP Filezilla 192.168.1.50
*/

#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include "RTClib.h"
#include <EmonLib.h>
EnergyMonitor ct1, ct2;                // Creation de deux instances

RTC_DS1307 RTC;
//Déclaration des variables Emon
double Irms1 =0;
double Irms2 =0;
double IPh1 =0;
double IPh2 =1000;
double reel;

// comment out next line to write to SD from FTP server
#define FTPWRITE

// this must be unique
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 }; 

// change to your network settings
IPAddress ip( 192, 168, 1, 125 );   
IPAddress gateway( 192, 168, 1, 1 );
IPAddress subnet( 255, 255, 255, 0 );

// change du server fileZila
IPAddress server( 192, 168, 1, 50 );

EthernetClient client;
EthernetClient dclient;

char outBuf[128];
char outCount;

// change fileName to your file (8.3 format!)
char fileName[13] = "DATALOG2.CSV";

void setup()
{
  Serial.begin(9600);
   Wire.begin();
    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__));
  }
  Serial.println ("Serveur FTP Filezilla ....192.168.1.50.....29_04_ftp_A_SD_RTC_nok");

  pinMode(10,OUTPUT);
// digitalWrite(10,HIGH);

  if(SD.begin(4) == 0)
  {
    Serial.println(F("SD init fail"));         
  }

  Ethernet.begin(mac, ip, gateway, subnet);
  delay(2000);
  Serial.println("f: ecriture vers serveur");
  Serial.println("r: lecture du fichier DATALOG2.CSV");
 
}
//------------------------------------------------------------------------------loop
void loop()
{

//-----------------Datation ----------
DateTime now = RTC.now();
   
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
  Serial.println(F("Ready. Press f or r"));
 
  //--------------------a decommenter pour transfert Ftp manuel ou lecture SD pour liaison série--------
  byte inChar;

  inChar = Serial.read();
delay (5000);
  if(inChar == 'f')
  {
    if(doFTP()) Serial.println(F("FTP OK"));
    else Serial.println(F("FTP FAIL"));
  }

  if(inChar == 'r')
  {
    readSD();   
  }
//--------------------------a decommenter pour Tranferts Ftp Cadencé de 60sec-------
//doFTP();
//delay (60000);
logger();
}
//------------------------------------------transfert ftp------------
File fh;

byte doFTP()
{
#ifdef FTPWRITE
  fh = SD.open(fileName,FILE_READ);
  Serial.println(F("Ouverture SD en lecture pour ftp"));
#else
  SD.remove(fileName);
  fh = SD.open(fileName,FILE_WRITE);
  Serial.println(F("Ouverture SD en ecriture pour ftp"));
#endif

  if(!fh)
  {
    Serial.println(F("SD open fail pour transfert FTP"));
    return 0;   
  }

#ifndef FTPWRITE 
  if(!fh.seek(0))
  {
    Serial.println(F("Rewind fail"));
    fh.close();
    return 0;   
  }
#endif

  Serial.println(F("SD opened"));

  if (client.connect(server,21)) {
    Serial.println(F("Command connected"));
  }
  else {
    fh.close();
    Serial.println(F("Command connection failed"));
    return 0;
  }

  if(!eRcv()) return 0;

  client.println(F("USER arduino"));

  if(!eRcv()) return 0;

  client.println(F("PASS 1234"));

  if(!eRcv()) return 0;

  client.println(F("SYST"));

  if(!eRcv()) return 0;
 
   client.println(F("PWD"));
   
   if(!eRcv()) return 0;
 
   client.println(F("TYPE I"));

  if(!eRcv()) return 0;

  client.println(F("PASV"));

  if(!eRcv()) return 0;

  char *tStr = strtok(outBuf,"(,");
  int array_pasv[6];
  for ( int i = 0; i < 6; i++) {
    tStr = strtok(NULL,"(,");
    array_pasv[i] = atoi(tStr);
    if(tStr == NULL)
    {
      Serial.println(F("Bad PASV Answer"));   

    }
  }

  unsigned int hiPort,loPort;

hiPort = array_pasv[4] << 8;
  loPort = array_pasv[5] & 255;

  Serial.print(F("Data port: "));
  hiPort = hiPort | loPort;
  Serial.println(hiPort);

  if (dclient.connect(server,hiPort)) {
    Serial.println(F("Data connected"));
  }
  else {
    Serial.println(F("Data connection failed"));
    client.stop();
    fh.close();
    return 0;
  }

#ifdef FTPWRITE
  client.print(F("STOR "));
  client.println(fileName);
#else
  client.print(F("RETR "));
  client.println(fileName);
#endif

  if(!eRcv())
  {
    dclient.stop();
    return 0;
  }

#ifdef FTPWRITE
  Serial.println(F("Writing"));

  byte clientBuf[64];
  int clientCount = 0;

  while(fh.available())
  {
    clientBuf[clientCount] = fh.read();
    clientCount++;

    if(clientCount > 63)
    {
      dclient.write(clientBuf,64);
      clientCount = 0;
    }
  }

  if(clientCount > 0) dclient.write(clientBuf,clientCount);

#else
  while(dclient.connected())
  {
    while(dclient.available())
    {
      char c = dclient.read();
      fh.write(c);     
      Serial.write(c);
    }
  }
#endif

  dclient.stop();
  Serial.println(F("Data disconnected"));

  if(!eRcv()) return 0;

  client.println(F("QUIT"));

  if(!eRcv()) return 0;

  client.stop();
  Serial.println(F("Command disconnected"));

  fh.close();
  Serial.println(F("SD closed dclient"));
  return 1;
}

byte eRcv()
{
  byte respCode;
  byte thisByte;

  while(!client.available()) delay(1);

  respCode = client.peek();

  outCount = 0;

  while(client.available())
  { 
    thisByte = client.read();   
    Serial.write(thisByte);

    if(outCount < 127)
    {
      outBuf[outCount] = thisByte;
      outCount++;     
      outBuf[outCount] = 0;
    }
  }

  if(respCode >= '4')
  {
    efail();
    return 0; 
  }

  return 1;
}


void efail()
{
  byte thisByte = 0;

  client.println(F("QUIT"));

  while(!client.available()) delay(1);

  while(client.available())
  { 
    thisByte = client.read();   
    Serial.write(thisByte);
  }

  client.stop();
  Serial.println(F("Command disconnected"));
  fh.close();
  Serial.println(F("SD closed_efail"));
}

void readSD()
{
  fh = SD.open(fileName,FILE_READ);

  if(!fh)
  {
    Serial.println(F("SD open fail pour lecture SD"));
    return;   
  }

  while(fh.available())
  {
    Serial.write(fh.read());
  }

  fh.close();
}
void logger()
{
  // -----------------Mesure paramétre electrique-----------------------
  Irms1 = ct1.calcIrms(10000);   // Calculate RMS current 1
  Irms2 = ct2.calcIrms(10000);   // Calculate RMS current 2
  IPh1=(Irms1*10);
  IPh2=(Irms2*10);
 
  // --------------------Assemblage des donnees version hb-----------------
  int sensor1= (IPh1);
  int sensor2= (IPh2);
  String dataString = "";

  { dataString = String(sensor1);
  dataString += ";";
    dataString += String(sensor2);
  }


  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("DATALOG2.CSV", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
   dataFile.println(dataString);
   dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  } 
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening DATALOG2");
  }
}



berny76

Petite précision, 

Si je met la RTClib seule -> pas de pb mais je ne peut avoir le fonctionnement du Molule RTC
le problème apparaît des que j'ajoute la lib Wire.h (nécessaire avec le module RTC).

Berny

Go Up