FTP client con GSM Shield


ciao tutti,
ho appena acquistato un gsm shield(http://arduino.cc/en/main/arduinogsmshield).
il mio obbiettivo è riuscire usare la gsm shield per connettermi ad un mio server ftp e uploadare dei file di log.
usando arduino ethernet tutto bene(http://playground.arduino.cc//code/ftp).
invece con la gsm shield ho un grosso problema:
code: [select]

/*
   ftp passive client ide v1.0.1 , w5100/w5200
   posted october 2012 surfertim
*/
#include <memoryfree.h>

#include <sd.h>
#include <spi.h>
#include <gsm.h>
// comment out next line write sd ftp server
#define ftpwrite

// pin number
#define pinnumber ""

// apn data
#define gprs_apn       "mobile.vodafone.it" // replace gprs apn
#define gprs_login     ""    // replace gprs login
#define gprs_password  "" // replace gprs password

// initialize library instance
gprs gprs;
gsm gsmaccess;
gsmclient client;
gsmclient dclient;

// url, path & port (for example: arduino.cc)
//char server[] = "arduino.cc";
byte server[]= {xxxxxxxxx};

char path[] = "/";
int port = 21; // port 80 default http

char outbuf[30];
char outcount;

// change filename file (8.3 format!)
char filename[13] = "test.txt";

void setup()
{
  serial.begin(9600);


  if(sd.begin(4) == 0) //changed 53 use mega
  {
    serial.println(f("sd init fail"));         
  }

serial.println("starting arduino web client.");
  // connection state
  boolean notconnected = true;
   serial.print("freememory()=");
    serial.println(freememory());
  // after starting modem gsm.begin()
  // attach shield gprs network apn, login , password
  while(notconnected)
  {
    if((gsmaccess.begin()==gsm_ready) &
        (gprs.attachgprs(gprs_apn, gprs_login, gprs_password)==gprs_ready))
      notconnected = false;
    else
    {
      serial.println("not connected");
      delay(1000);
    }
  }

  serial.println("connecting...");


  delay(2000);
  serial.println(f("ready. press f or r"));
}

void loop()
{
  byte inchar;

  inchar = serial.read();

  if(inchar == 'f')
  {
    if(doftp()) serial.println(f("ftp ok"));
    else serial.println(f("ftp fail"));
  }

  if(inchar == 'r')
  {
    readsd();   
  }

}

file fh;

byte doftp()
{

  fh = sd.open(filename,file_read);

  /*if(!fh)
  {
    serial.println(f("sd open fail"));
    return 0;   
  }
  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;
  }
  delay(3000);
  if(!ercv()) return 0;

  client.println(f("user xxx"));

  if(!ercv()) return 0;

  client.println(f("pass xxx"));

  if(!ercv()) return 0;

  client.println(f("syst"));

  if(!ercv()) return 0;

  client.println(f("pasv"));
 
  if(!ercv()) return 0;

  char *tstr = strtok(outbuf,"(,");
  serial.print("la risposta e ");
  serial.println(tstr);
  int array_pasv[6];
  serial.println(tstr);
  ( int = 0; < 5; i++) {
    tstr = strtok(null,"(,");
    array_pasv[i] = atoi(tstr);
    if(tstr == null)
    {
      serial.println(f("bad pasv answer"));   

    }
  }

  unsigned int hiport,loport;
  serial.println(array_pasv[3]);
  serial.println(array_pasv[4]);

  hiport = array_pasv[3] << 8;
  loport = array_pasv[4] & 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;
  }

  client.print(f("stor "));
  client.println(filename);

  if(!ercv())
  {
    dclient.stop();
    return 0;
  }
  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);

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

byte ercv()
{
  byte respcode;
  byte thisbyte;

  while(!client.available()){ delay(1); serial.print("non disponibile");};

  respcode = client.peek();
  boolean ciao=false;
  outcount = 0;
  while(client.available())
  { 
    thisbyte = client.read();   
    serial.write(thisbyte);
    if(((char)thisbyte)=='(')
      ciao=true;
    if(ciao){
    if(outcount < 29)
    {
     
      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"));
}

void readsd()
{
  fh = sd.open(filename,file_read);

  if(!fh)
  {
    serial.println(f("sd open fail"));
    return;   
  }

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

  fh.close();
}


arduino stabilisce la prima connessione, invia username, password...
la connessione dati però non va buon fine.
mi chiedo se la libreria sia in grado di stabilire più connessioni simultanee e se ho sbagliato qualcosa in questa unione veloce di codice. spero di avere più risposte di lui(http://forum.arduino.cc/index.php?topic=167790.0)...

quindi nessuno usa ftp?


Arduino Forum > International > Italiano > Software (Moderator: leo72) > FTP client con GSM Shield


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62