Bonjour,
Je m'inspire quasiment mot pour mot du code exemple https://playground.arduino.cc/Code/FTP/
Voici le code extrait de mon projet. Shield Ethernet sur Mega.
Le SD fonctionne fort bien.
Le serveur est bien sur l'ip 192.168.0.21. J'ai même désactivé le pare-feu. Le programme serveur est TYPsoft FTP Server 1.10 Mais il est désespéramment muet
Le tout est bien visible sur le réseau
Merci d'avance pour vos éclaircissements,
Pollux
Message :Envoi Fichier 19120905.txt
SD opened
Command connection failed
FTP FAILCode:#include <Ethernet.h> String User = "****"; String Pass = "****"; byte mac[] = { 0x04, 0x04, 0x04, 0x07, 0x01, 0x09 }; // Adresse MAC, doit être unique dans le réseau ! IPAddress ip( 192, 168, 0, 129 ); // Son adresse IP fixe IPAddress gateway( 192, 168, 0, 1); IPAddress subnet( 255, 255, 255, 0 ); IPAddress server( 192, 168, 0, 21 ); // L'IP du serveur FTP dans mon réseau local EthernetClient client; EthernetClient dclient; char outBuf[128]; char outCount; File fh; void setup() { /* Initialisation du port SPI */ //int pin_SPI = 10 ;// Arduino UNO int pin_SPI = 53 ;// Arduino Mega pinMode(pin_SPI, OUTPUT); //------------------ ETHERNET ---------------- digitalWrite(pin_SPI, HIGH); Ethernet.begin(mac, ip, gateway, gateway, subnet); Serial.println("Ethernet s'initialise"); digitalWrite(pin_SPI, HIGH); delay(2000); } void loop(){ (...) // Envoie le fichier en cours Fichier.flush() ; if (doFTP(FileName)) { Serial.println(F("FTP OK")); } else { Serial.println(F("FTP FAIL")); } (...) } // ROUTINES ETHERNET byte doFTP(String sFN) { fh = SD.open(sFN, FILE_READ); if (!fh) { Serial.println(F("SD open fail")); return 0; } 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("USER " + User); if (!eRcv()) return 0; client.println("PASS " + Pass); 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; } client.print(F("STOR ")); client.println(sFN); if (!eRcv()) { dclient.stop(); return 0; } 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); 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")); }
-----