Sending FTP with 3g shield

hello, i need your help

i wanna send .txt file from third party SD card module to ftp server.

i use 3G shield sim5216...

i followed example from cooking hack http://www.cooking-hacks.com/documentation/tutorials/arduino-3g-gprs-gsm-gps#step13
in cooking hack case, their use 3g shield with built in sd card module,
but i use external sd card module

and here is my code :

int led = 13;
int onModulePin = 2;        //
int x = 0;
int y = 0;
int z=0;
boolean isConnected=false;
boolean isUploaded=false;
boolean isOn=false;
char name[20];
char data[1024];
long previous;

// cek koneksi
int chckCREG()
{
    Serial.println("chckCREG");

// if 1,0 or 5,0 or ERROR
    if((data[x-1]=='1'&&data[x-2]==','&&data[x-3]=='0')||(data[x-1]=='5'&&data[x-2]==','&&data[x-3]=='0')||(data[x-1]=='0'&&data[x-2]==','&&data[x-3]=='0')||(data[x-1]=='R'&&data[x-2]=='O'&&data[x-3]=='R'))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

void resetModule()
{
    Serial.println("resetModule");
    switchModule();
    isOn=false;
    delay(20000);
    switchModule();
    isOn=true;
}

void switchModule()
{
    digitalWrite(onModulePin,HIGH);
    delay(2000);
    digitalWrite(onModulePin,LOW);
    for (int i=0;i < 5;i++)
    {
        delay(5000);
    }
    isOn=true;
}


// pin

/*void startPin(){
  Serial.println("start Pin");
   Serial.println("AT+CPIN=0000");
   Serial.flush();
   delay(10000);
   Serial.println("End Pin");
}*/


void configFTP()
{
    Serial.println("start configFTP");
    Serial.println("AT+CGSOCKCONT=1,\"IP\",\"myapn\"");    
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();
        Serial.println(data[x]);
        x++;
    }
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPSERV=\"myftpserver\""); //Sets the FTP server
    Serial.flush();
    x=0;
    
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();  
        Serial.println(data[x]);
        x++;
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPPORT=21");    //Sets FTP port
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();  
        Serial.println(data[x]);
        x++;
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPUN=\"myusername\""); //Sets the user name
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();  
        Serial.println(data[x]);
        x++;
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPPW=\"mypassword\""); //Sets password
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();  
        Serial.println(data[x]);
        x++;
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPMODE=1");    //Selects pasive mode
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();  
        Serial.println(data[x]);
        x++;  
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("AT+CFTPTYPE=A");    //Select Binary mode for picture
    Serial.flush();
    x=0;
    do
    {
        while(Serial.available()==0);
        data[x]=Serial.read();
        Serial.println(data[x]);
        x++;   
    }
    
    while(!(data[x-1]=='K'&&data[x-2]=='O'));
    delay(2000);
    
    Serial.println("End  configFTP");
}



void setup()
{
    Serial.begin(115200);                // UART baud rate
    delay(2000);
    pinMode(led, OUTPUT);
    pinMode(onModulePin, OUTPUT);
    Serial.println("start setup");
    isOn=false;
    switchModule();                    // switches the module ON
}

void loop()
{
    Serial.println("Start loop");
    if(isOn)
    {
        Serial.println("Module is on");
        isUploaded=false;
        isConnected=false;
        y=0;
        while(Serial.available()>0) Serial.read();
   
   //test if module is connected, five trials, 5 seconds between each
        do
        {
            while(Serial.available()>0) Serial.read();
            Serial.println("AT+CREG?");
            Serial.flush();
            x=0;
            y++;
            z=0;
            do
            {
                while(Serial.available()==0);
                data[x]=Serial.read();
                x++;
                z=chckCREG();
            }
            while(z==0);
            Serial.println('End ChckCreg');
            
            if ((data[x-1]=='5'&&data[x-2]==','&&data[x-3]=='0') ||(data[x-1]=='1'&&data[x-2]==','&&data[x-3]=='0'))
            {
                isConnected=true;
                Serial.print("Module is connected : ");
                Serial.print(data[x-3]);
                Serial.print(data[x-2]);
                Serial.print(data[x-1]);
                break;
            }
            delay(5000);
        }
        
        while(y < 5);
        
        if (isConnected)
        {
         //config ftp
            configFTP();
            y=0;
            do
            {
                while(Serial.available()>0) Serial.read();
                Serial.println("AT+CFTPPUT=\"/test.txt\",1");
                Serial.flush();
                x=0;
                z=0;
             
        /* Serial.print("AT+CFTPPUTFILE=\"");
         Serial.print("/httpdocs/");
         Serial.print(name);
         Serial.println("\",1");
         Serial.flush();
         x=0;
         z=0;
    */
             
    // read the answer
                previous=millis();
                x=0;
                do
                {
                    if(Serial.available())
                    {
                        data[x]=Serial.read();
                        x++;
                    }
                }
                
                while((millis()-previous)<60000);    //wait 60 seconds for an answer
                
    //read last char of the response
                
                if (data[x-1]=='0')
                { 
    // OK + CFTPPUTFILE : 0
                    
                    isUploaded=true;
                    Serial.println("upload ok");
                    break;
                }
                else
                {
                    Serial.println("upload  not ok");
                }
                y++;
                delay(5000);
            }
            while(y < 5);
            
            
            for (int i=0;i < 36;i++){
                delay(10000);
            } 
    
           /* //delete picture
            Serial.println("AT+FSCD=Picture");
            delay(5000);
            Serial.print("AT+FSDEL=");
            Serial.println(name);
            Serial.println("picture deleted "); */
        
        }
        
        else
        {
            Serial.println("Module is  not connected ");
        //if not connected reset the module
            resetModule();
        
        } //end if isConnected
    }// end if isOn
    
    
    while(1);

}

and in serial monitor i can read

End  configFTP

AT+CFTPPUT="/test.txt",1
 AT+CFTPPUT="/test.txt",1
OK
upload not ok
AT+CFTPPUT="/test.txt",1
 AT+CFTPPUT="/test.txt",1
ERRORupload  not ok

Hey Samuel,

Just curious did you ever get your 3G shield uploading via FTP okay?

I found a couple of posts over on github of someone that has sorted out http post and http get.

Just going through that cooking hacks page you put up now :slight_smile:

Wonder if many other people are using this card yet, seems a good price at $65.00 for a SIM5216 card.