Я пытаюсь получить на моем ESP8266 его SDcard файл (файл .txt), который находится на FTP-сервере.Я использую этот код, но я редактировал его с помощью WiFi.
https://playground.arduino.cc/Code/FTP/
WiFi работает, и я могу отправить файл с SD-карты на FTP-сервер, но мне нужно, чтобы он был перевернут, поэтому я могу получить файл, который лежит на FTP-сервере.
, если я удаляю эту строку из кода:
// comment out next line to write to SD from FTP server
#define FTPWRITE
Она должна записать мою SD-карту с FTP-Сервер.Это на самом деле что-то отправляет, но это пустой файл в capslock.Я попытался переименовать файл, изменил текст в файле и путь к файлу, но безуспешно.
Это то, что показывает мой Serial Monitor, когда я удалил строку: #define FTPWRITE
SD opened
Command connected
220 FileZilla Server 0.9.60 beta
331 Password required for kalenderdisplay
230 Logged on
215 UNIX emulated by FileZilla
200 Type set to I
227 Entering Passive Mode (x,x,x,x,218,99)
Data port: 55907
Data connected
150 Opening data channel for file download from server of "/Meeting.txt"
226 Successfully transferred "/Meeting.txt"
Data disconnected
И это при включенной строке: #define FTPWRITE
SD opened
Command connected
220 FileZilla Server 0.9.60 beta
331 Password required for kalenderdisplay
230 Logged on
215 UNIX emulated by FileZilla
200 Type set to I
227 Entering Passive Mode (x,x,x,x,217,107)
Data port: 55659
Data connected
150 Opening data channel for file upload to server of "/Meeting.txt"
Writing
Data disconnected
226 Successfully transferred "/Meeting.txt"
221 Goodbye
Command disconnected
SD closed
FTP OK
Это мой код, который я использую
#include <SD.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
// comment out next line to write to SD from FTP server
#define FTPWRITE
#define STASSID "xxx"
#define STAPSK "xxx"
const char* ssid = STASSID;
const char* password = STAPSK;
// change to your server
IPAddress server( x, x, x, x );
WiFiClient client;
WiFiClient dclient;
char outBuf[128];
char outCount;
// change fileName to your file (8.3 format!)
char fileName[13] = "Meeting.txt";
File fh;
void setup()
{
Serial.begin(115200);
if(SD.begin(4) == 0)
{
Serial.println(F("SD init fail"));
}
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
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);
#else
SD.remove(fileName);
fh = SD.open(fileName,FILE_WRITE);
#endif
if(!fh)
{
Serial.println(F("SD open fail"));
return 0;
}
#ifndef FTPWRITE
if(!fh.seek(0))
{
Serial.println(F("Rewind fail"));
fh.close();
return 0;
}
#endif
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 kalenderdisplay"));
if(!eRcv()) return 0;
client.println(F("PASS kalenderdisplay"));
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,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
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;
}
}
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"));
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;
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"));
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();
}
Это мой код или только мой FTP-серверпроблема?И как мне решить проблему?