[Programmation] [Arduino] communication FTP qui n'aboutit pas [Résolu]
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

[Arduino] communication FTP qui n'aboutit pas [Résolu]



  1. #1
    Pollux32

    Question [Arduino] communication FTP qui n'aboutit pas [Résolu]


    ------

    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 FAIL
    Code:
    #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"));
    }

    -----

  2. #2
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    ... et c'est quoi qui marche pas ? ... tu as des traces ? ... un log au niveau du serveur ? ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    Pollux32

    Re : [Arduino] communication FTP qui n'aboutit pas

    Bonjour Seb,

    Comme je le disais, le serveur est muet, rien dans le log.
    Et du côté Arduino c'est
    Envoi Fichier 19120905.txt
    SD opened
    Command connection failed
    FTP FAIL

  4. #4
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    OK, donc "client.connect(server, 21)" ne fonctionne pas.

    Est-ce que le code ci-dessous fonctionne ?
    Code:
    #include <SPI.h> //bibliothèqe pour SPI
    #include <Ethernet.h> //bibliothèque pour Ethernet
    byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; // tableau pour l'adresse MAC de votre carte
    byte ip[] = {192, 168, 1, 123}; //tableau pour l'adresse IP
    
    void setup()
    {
      Serial.begin (9600); //initialisation de communication série
      Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
      Serial.print("\nIP = ");
      Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
    }
    
    void loop() {
    }
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    Teste aussi avec le DHCP pour voir si tout se passe bien : Ethernet.begin(mac);
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. #6
    Pollux32

    Re : [Arduino] communication FTP qui n'aboutit pas

    J'avais oublié de dire qu'il était visible sur le réseau
    Le code pour IP Fixe et DHCP fonctionne
    Dernière modification par Pollux32 ; 10/12/2019 à 09h07.

  8. #7
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    Citation Envoyé par Pollux32 Voir le message
    Le code pour IP Fixe et DHCP fonctionne
    Et si tu ajoutes :

    Code:
    Serial.print("\nIP = ");
    Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
    Dans ton code, après le Ethernet.begin(mac); ( passe en DHCP), tu as bien une adresse IP ?

    Citation Envoyé par Pollux32 Voir le message
    J'avais oublié de dire qu'il était visible sur le réseau
    Oui, mais je pense que la puce Ethernet est visible même si coté CPU tu fais rien ... elle doit être plus ou moins autonome à mon avis ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    Pollux32

    Re : [Arduino] communication FTP qui n'aboutit pas

    Oui oui, j'ai bien une réponse : IP = 192.168.0.37

  10. #9
    Pollux32

    Re : [Arduino] communication FTP qui n'aboutit pas

    Bon, j'ai trouvé, le problème était du côté du pare-feu sur serveur. Je ne comprend pas pourquoi je suis passé au-dessus de cette erreur.
    Je suis confus. L'app « Fing » m'a orientée.

    Mais merci de l'aide !

  11. #10
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    Citation Envoyé par Pollux32 Voir le message
    Oui oui, j'ai bien une réponse : IP = 192.168.0.37
    OK, donc ton Arduino se connecte bien su le réseau.

    -> quelle valeur te retourne le client.connect(server, 21) ?

    SUCCESS 1
    TIMED_OUT -1
    INVALID_SERVER -2
    TRUNCATED -3
    INVALID_RESPONSE -4
    Si tu fais un telnet sur ton serveur FTP depuis ton PC, tu as le welcome ?
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  12. #11
    Seb.26

    Re : [Arduino] communication FTP qui n'aboutit pas

    Citation Envoyé par Pollux32 Voir le message
    Bon, j'ai trouvé, le problème était du côté du pare-feu sur serveur. Je ne comprend pas pourquoi je suis passé au-dessus de cette erreur.
    Je suis confus. L'app « Fing » m'a orientée.
    Mais merci de l'aide !
    bah voilà ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. [Autre] communication sans fil - Arduino
    Par RACHIDOUBELK dans le forum Électronique
    Réponses: 7
    Dernier message: 03/12/2019, 17h05
  2. [RF/Radioelec] Communication xbee/arduino
    Par invite25076b5d dans le forum Électronique
    Réponses: 1
    Dernier message: 22/03/2016, 14h44
  3. ARDUINO - communication sans fil
    Par invite49f19ed1 dans le forum Électronique
    Réponses: 6
    Dernier message: 29/07/2014, 15h25
  4. Communication arduino-arduino avec module Xbee
    Par inviteda9a8a4b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  5. projet communication pc-arduino
    Par invitedef4fb0d dans le forum Électronique
    Réponses: 3
    Dernier message: 21/02/2013, 12h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...