SimpleFtpServer con esp32 o esp8266 e w5500

Home Forum Le librerie ospitate nel sito Libreria Simple FTP Server SimpleFtpServer con esp32 o esp8266 e w5500

Taggato: ,

Visualizzazione 6 filoni di risposte
  • Autore
    Post
    • #24061
      Francesco
      Partecipante

        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
        #endif

        il 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 1

        Compilation error: exit status 1

        dove sto sbagliando?

        Grazie
        Francesco

      • #24066
        Renzo Mischianti
        Amministratore del forum

          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

        • #24075
          Francesco
          Partecipante

            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

          • #24104
            Renzo Mischianti
            Amministratore del forum

              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 tipo

              To 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/88

              Ciao Renzo

            • #24140
              Francesco
              Partecipante

                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 1

                Compilation 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

              • #24141
                Renzo Mischianti
                Amministratore del forum

                  Ciao,
                  questo è più facile, mi sono dimenticato di rilasciare l’ultima fix.
                  Ho provveduto ora.
                  Ciao RM

                • #24154
                  Francesco
                  Partecipante

                    Funziona!
                    Grazie di tutto e alla prossima
                    Ciao Francesco

                Visualizzazione 6 filoni di risposte
                • Devi essere connesso per rispondere a questo topic.
                Exit mobile version