heres the code,its almost the same with the code of surfer tim,i just change the ip,username and password.
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
// 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, 88, 2 );
IPAddress gateway( 192, 168, 88, 1 );
IPAddress subnet( 255, 255, 255, 0 );
// change to your server
IPAddress server(192, 168, 88, 1);
EthernetClient client;
EthernetClient dclient;
char outBuf[128];
char outCount;
// change fileName to your file (8.3 format!)
char fileName[13] = "test.txt";
File fh;
void setup()
{
Serial.begin(9600);
digitalWrite(10,HIGH);
if(SD.begin(4) == 0)
{
Serial.println(F("SD init fail"));
}
Ethernet.begin(mac, ip, gateway, gateway, subnet);
digitalWrite(10,HIGH);
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();
}
}
byte doFTP()
{
#ifdef FTPWRITE
fh = SD.open(fileName,FILE_READ);
Serial.println(F("0"));
//#else
// SD.remove(fileName);
// fh = SD.open(fileName,FILE_WRITE);
#endif
if(!fh)
{
Serial.println(F("SD open fail"));
return 0;
}
Serial.println(F("1"));
#ifndef FTPWRITE
if(!fh.seek(0))
{
Serial.println(F("Rewind fail"));
fh.close();
return 0;
}
#endif
Serial.println(F("2"));
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 user"));
if(!eRcv()) return 0;
client.println(F("PASS pass"));
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;
Serial.println(F("3"));
char *tStr = strtok(outBuf,"(,");
int array_pasv[6];
for ( int i = 0; i < 6; i++) {
tStr = strtok(NULL,"(,");
array_pasv = atoi(tStr);
- if(tStr == NULL)*
- {*
- Serial.println(F("Bad PASV Answer")); *
- }*
- }*
Serial.println(F("4")); - 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
Serial.println(F("5")); - 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;*
- }*
- }*
Serial.println(F("6")); - 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"));*
Serial.println(F("7")); - 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);*
- respCode = client.peek();*
- outCount = 0;*
Serial.println(F("8")); - 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);*
Serial.println(F("9")); - 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; *
- }*
Serial.println(F("10")); - while(fh.available())*
- {*
- Serial.write(fh.read());*
- }*
- fh.close();*
}