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