Toll-Free Customer Support 24/7

#include <SD.h>

#include <SPI.h>

#include <WiFi.h>

/* comment out next line to write to SD from FTP server */

#define FTPWRITE

/* change to your network settings */

const char* ssid     = "your username";

const char* password = "your password";

/* ftp server */

char server_link[] = "abcd.xxxxx.com";

byte clientBuf[]="i love my INDIA";

/* size of data string */

int clientCount = sizeof(clientBuf);

/* change to your server */

/* IPAddress server( 1, 2, 3, 4 ); */

WiFiClient client;

WiFiClient dclient;

char outBuf[128];

char outCount;

/* change fileName to your file (8.3 format!) */

char fileName[13] = "rdl.txt";

void setup(void)

{

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.println("WiFi connected");  

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());

  Serial.println(F("Ready. Press f or r"));

  }

 

void loop(void)

{

  byte inChar;

  inChar = Serial.read();

  if(inChar == 'f')

  {

    if(doFTP()) Serial.println(F("FTP OK"));

    else Serial.println(F("FTP FAIL"));

  }

}

 byte doFTP()

{

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

  if (client.connect(server_link,21)) {

  Serial.println(F("Command connected"));

}

else

{

  Serial.println(F("Command connection failed"));

  return 0;

}

if(!eRcv()) return 0;

/* ftp username */

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

if(!eRcv()) return 0;

/* ftp password */

client.println(F("PASS xxxx@13xx5"));

if(!eRcv()) return 0;

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

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_link,hiPort)) {

Serial.println(F("Data connected"));

}

else {

Serial.println(F("Data connection failed"));

client.stop();

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

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

#else

  while(dclient.connected())

  {

    while(dclient.available())

    {

      char c = dclient.read();

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

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

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

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

}

 

Back to top