/* * FtpServer esp8266 and esp32 with SPIFFS * * AUTHOR: Renzo Mischianti * * https://www.mischianti.org/2020/02/08/ftp-server-on-esp8266-and-esp32 * */ #ifdef ESP8266 #include #elif defined ESP32 #include #include "SPIFFS.h" #endif #include const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASS"; FtpServer ftpSrv; //set #define FTP_DEBUG in ESP8266FtpServer.h to see ftp verbose on serial void _callback(FtpOperation ftpOperation, unsigned int freeSpace, unsigned int totalSpace){ switch (ftpOperation) { case FTP_CONNECT: Serial.println(F("FTP: Connected!")); break; case FTP_DISCONNECT: Serial.println(F("FTP: Disconnected!")); break; case FTP_FREE_SPACE_CHANGE: Serial.printf("FTP: Free space change, free %u of %u!\n", freeSpace, totalSpace); break; default: break; } }; void _transferCallback(FtpTransferOperation ftpOperation, const char* name, unsigned int transferredSize){ switch (ftpOperation) { case FTP_UPLOAD_START: Serial.println(F("FTP: Upload start!")); break; case FTP_UPLOAD: Serial.printf("FTP: Upload of file %s byte %u\n", name, transferredSize); break; case FTP_TRANSFER_STOP: Serial.println(F("FTP: Finish transfer!")); break; case FTP_TRANSFER_ERROR: Serial.println(F("FTP: Transfer error!")); break; default: break; } /* FTP_UPLOAD_START = 0, * FTP_UPLOAD = 1, * * FTP_DOWNLOAD_START = 2, * FTP_DOWNLOAD = 3, * * FTP_TRANSFER_STOP = 4, * FTP_DOWNLOAD_STOP = 4, * FTP_UPLOAD_STOP = 4, * * FTP_TRANSFER_ERROR = 5, * FTP_DOWNLOAD_ERROR = 5, * FTP_UPLOAD_ERROR = 5 */ }; void setup(void){ Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /////FTP Setup, ensure SPIFFS is started before ftp; ///////// /////FTP Setup, ensure SPIFFS is started before ftp; ///////// #ifdef ESP32 //esp32 we send true to format spiffs if cannot mount if (SPIFFS.begin(true)) { #elif defined ESP8266 if (SPIFFS.begin()) { #endif ftpSrv.setCallback(_callback); ftpSrv.setTransferCallback(_transferCallback); Serial.println("SPIFFS opened!"); ftpSrv.begin("esp8266","esp8266"); //username, password for ftp. (default 21, 50009 for PASV) } } void loop(void){ ftpSrv.handleFTP(); //make sure in loop you call handleFTP()!! // server.handleClient(); //example if running a webserver you still need to call .handleClient(); }