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
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
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?
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.
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?
Mantenere un repository, un sito o un forum è come prendersi cura di un giardino - richiede costante attenzione e cura per farlo prosperare. Se sei un abile giardiniere (o programmatore!) e vuoi aiutarci a far fiorire il nostro sito, saremmo felici di averti nel nostro team! Cerchiamo anche scrittori talentuosi e moderatori per il nostro forum per aiutarci a far crescere la nostra comunità. Se sei interessato a unirti a noi, non esitare a contattarci per farci sapere in che modo puoi contribuire!
Sei un appassionato di elettronica o programmazione? Condividi la tua conoscenza con gli altri, scrivi un semplice tutorial o come fare un grande progetto Contattami. share_your_ideas@mischianti.org
The content displayed on this website is protected under a CC BY-NC-ND license. Visitors are prohibited from using, redistributing, or altering any content from this website for commercial purposes, including generating revenue through advertising. Any unauthorized use is a violation of the license terms and legal action may be taken against individuals or entities found to be in violation.
You must also provide the link to the source.
Per offrire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Acconsentire a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o gli ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su determinate funzionalità e funzioni.
Functional
Sempre attivo
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Per offrire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Acconsentire a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o gli ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su determinate funzionalità e funzioni.
Functional
Sempre attivo
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.