Home › Forum › Le librerie ospitate nel sito › Libreria Simple FTP Server › SimpleFtpServer con esp32 o esp8266 e w5500
-
AutorePost
-
-
27 Gennaio 2023 alle 12:24 #24061
Ciao Renzo,
riprendo il commento postato sul sito:
Vorrei creare un server ftp con un esp32 o un esp8266 utilizzando la connessione cablata con un w5500 ma non riesco a venirne a capo.Uso una Lolin32 lite e una scheda di rete w5500 collegata in SPI standard con cs su gpio5.
Parto dall’esempio incluso con la libreria “ESP32_FFAT_enc28j60.ino” simile in tutto ma con la enc28j60 invece della w5500.Il codice è quello riportato nell’esempio in cui sostituisco le libreria ethernet :
//#include <EthernetENC.h>
#include <Ethernet.h>e nel file FtpServerKey.h la configurazione per esp32 è la seguente:
// esp32 configuration
#ifndef DEFAULT_FTP_SERVER_NETWORK_TYPE_ESP32
#define DEFAULT_FTP_SERVER_NETWORK_TYPE_ESP32 NETWORK_W5100
#define DEFAULT_STORAGE_TYPE_ESP32 STORAGE_FFAT
#endifil problema è che la compilazione non va a buon fine con il seguente errore:
In file included from Documenti\Arduino\libraries\SimpleFTPServer/SimpleFTPServer.h:14:0,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:39:
Documenti\Arduino\libraries\SimpleFTPServer/FtpServer.h:704:36: error: cannot declare field ‘FtpServer::ftpServer’ to be of abstract type ‘EthernetServer’
FTP_SERVER_NETWORK_SERVER_CLASS ftpServer;
^
In file included from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:34:0:
Documenti\Arduino\libraries\Ethernet\src/Ethernet.h:254:7: note: because the following virtual functions are pure within ‘EthernetServer’:
class EthernetServer : public Server {
^
In file included from C:\Users\floriof\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/Arduino.h:152:0,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:31:
C:\Users\floriof\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/Server.h:28:18: note: virtual void Server::begin(uint16_t)
virtual void begin(uint16_t port=0) =0;
^
In file included from Documenti\Arduino\libraries\SimpleFTPServer/SimpleFTPServer.h:14:0,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:39:
Documenti\Arduino\libraries\SimpleFTPServer/FtpServer.h:705:36: error: cannot declare field ‘FtpServer::dataServer’ to be of abstract type ‘EthernetServer’
FTP_SERVER_NETWORK_SERVER_CLASS dataServer;
^
Più di una libreria trovata per “Ethernet.h”
Usata: Documenti\Arduino\libraries\Ethernet
Non usata: C:\Users\floriof\AppData\Local\Arduino15\libraries\Ethernet
Non usata: Documenti\Arduino\libraries\EthernetENC
exit status 1Compilation error: exit status 1
dove sto sbagliando?
Grazie
Francesco -
27 Gennaio 2023 alle 22:57 #24066
Ciao,
l’errore dice che stai includendo 2 librerie che sono referenziate da Ethernet.h.
Devi sistemare il tuo IDE di sviluppo rimuovendo una delle librerie.
Ciao Renzo -
31 Gennaio 2023 alle 17:02 #24075
Ciao Renzo,
il messaggio che indica la presenza di più librerie per “Ethernet.h” io l’ho sempre interpretato come un semplice warning che mi avverte che verrà utilizzata una libreria piuttosto che un’altra.comunque ho provato a togliere le librerie aggiuntive lasciandone presente sempre solo una.
sia che lasciassi la libreria:
C:\Users\floriof\AppData\Local\Arduino15\libraries\Ethernet
oppure la libreria
Documenti\Arduino\libraries\Ethernet
(ho confrontato i file e sono esattamente la stessa libreria)e il risultato è stato il seguente: (praticamente lo stesso della volta scorsa)
In file included from Documenti\Arduino\libraries\SimpleFTPServer/SimpleFTPServer.h:14,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:40:
Documenti\Arduino\libraries\SimpleFTPServer/FtpServer.h:704:36: error: cannot declare field ‘FtpServer::ftpServer’ to be of abstract type ‘EthernetServer’
FTP_SERVER_NETWORK_SERVER_CLASS ftpServer;
^~~~~~~~~
In file included from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:34:
C:\Users\floriof\AppData\Local\Arduino15\libraries\Ethernet\src/Ethernet.h:254:7: note: because the following virtual functions are pure within ‘EthernetServer’:
class EthernetServer : public Server {
^~~~~~~~~~~~~~
In file included from C:\Users\floriof\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6\cores\esp32/Arduino.h:172,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:31:
C:\Users\floriof\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6\cores\esp32/Server.h:28:18: note: ‘virtual void Server::begin(uint16_t)’
virtual void begin(uint16_t port=0) =0;
^~~~~
In file included from Documenti\Arduino\libraries\SimpleFTPServer/SimpleFTPServer.h:14,
from Documenti\Arduino\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60\TEST-w5500 era FTPServer_ESP32_FFAT_enc28j60.ino:40:
Documenti\Arduino\libraries\SimpleFTPServer/FtpServer.h:705:36: error: cannot declare field ‘FtpServer::dataServer’ to be of abstract type ‘EthernetServer’
FTP_SERVER_NETWORK_SERVER_CLASS dataServer;
^~~~~~~~~~exit status 1
Compilation error: exit status 1
Se invece era presente la libreria Documenti\Arduino\libraries\EthernetENC la compilazione andava a buon fine ma una volta ripartito l’unico messaggio era:
16:16:23.836 -> Begin Ethernet
e da lì non si schioda.
A questo punto mi sembra di capire che sto usando librerie (o versioni di librerie) incompatibili con la tua : mi puoi indicare quale installare?
Grazie
Francesco -
2 Febbraio 2023 alle 11:20 #24104
Ciao Francesco,
scusa il ritardo, ho riverificato gli esempi che uso come test ed effettivamente per poter usare l’Ethernet.h su esp32 va effettuata una modifica di questo tipoTo use Ethernet.h with esp32 fix would be to change in Ethernet.h the line
class EthernetServer : public Server {
to
class EthernetServer : public Stream {
or
in
\esp32\2.0.6\cores\esp32\Server.h
A workaround is to change line 28 of the ESP32 core’s Server.h from:
virtual void begin(uint16_t port=0) =0;
to
virtual void begin() =0;
However, the last one, that will break anything that uses the ESP32 WiFi library’s WebServer class.https://github.com/arduino-libraries/Ethernet/issues/193
https://github.com/arduino-libraries/Ethernet/issues/88Ciao Renzo
-
7 Febbraio 2023 alle 17:11 #24140
Ciao Renzo,
come noterai dal mio pulpito non sono in grado di dare nessuna lezione per quanto riguarda i ritardi nelle risposte, per cui ritieniti ampiamente scusato 😀
ho seguito i tuoi suggerimenti e, mentre la variazione sul file Ethernet.h non ha sortito alcun effetto, la modifica al file Server.h ha reso l’esempio funzionante.
Quindi ti ringrazio per il tuo aiuto, ma poichè sono un ingrato torno ad importunarti 😉
vorrei riuscire a far andare l’FTP anche su esp8266 e w5500.
Ho mantenuto quasi tutto il codice precedente sostituendo FFAT con LittleFS e il risultato è stato il seguente:\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp: In member function ‘void FtpServer::begin(const char*, const char*, const char*)’:
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp:74:13: error: ‘class EthernetServer’ has no member named ‘setNoDelay’
74 | ftpServer.setNoDelay( true );
| ^~~~~~~~~~
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp:94:14: error: ‘class EthernetServer’ has no member named ‘setNoDelay’
94 | dataServer.setNoDelay( true );
| ^~~~~~~~~~
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp: In member function ‘uint8_t FtpServer::handleFTP()’:
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp:203:19: error: ‘class EthernetServer’ has no member named ‘hasClient’
203 | if( ftpServer.hasClient())
| ^~~~~~~~~
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp: In member function ‘int FtpServer::dataConnect(bool)’:
\Documenti\Arduino\libraries\SimpleFTPServer\FtpServer.cpp:999:19: error: ‘class EthernetServer’ has no member named ‘hasClient’
999 | if( dataServer.hasClient())
| ^~~~~~~~~
Più di una libreria trovata per “Ethernet.h”
Usata: \Documenti\Arduino\libraries\Ethernet
Non usata: C:\Users\floriof\AppData\Local\Arduino15\libraries\Ethernet
Non usata: \Documenti\Arduino\libraries\EthernetENC
Non usata: C:\Users\floriof\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.1\libraries\Ethernet
exit status 1Compilation error: exit status 1
naturalmente come nel precedente caso ho provato escludendo di volta in volta le librerie Ethernet.h installate ma il risultato è rimasto tale e quale.
Hai qualche suggerimento risolutivo anche in questo caso?
Grazie
Francesco -
7 Febbraio 2023 alle 17:23 #24141
Ciao,
questo è più facile, mi sono dimenticato di rilasciare l’ultima fix.
Ho provveduto ora.
Ciao RM -
12 Febbraio 2023 alle 15:54 #24154
Funziona!
Grazie di tutto e alla prossima
Ciao Francesco
-
-
AutorePost
- Devi essere connesso per rispondere a questo topic.