FTP et arduino mega 2560+ ethernet shield

Bonjour,

Cela fait trois jours que je recherche désespérément comment connecter mon arduino a mon serveur ftp. Étant un débutant en arduino, j'ai regarder les différents tuto et forum sur le FTP. Le projet que je souhaite faire est de copier tous les fichiers de ma carte SD vers un serveur FTP. Pour commencer je souhaiter comprendre les mécanisme de connexion du FTP Premièrement j'ai installé filezilla server sur mon PC et suivi un tutoriel pour le configurer. Ensuite j'ai utilisé le code FTP sur la page arduino playground ftp http://playground.arduino.cc/Code/FTP#.UyLRgoVcONI J'ai changé les adresses IP avec celle qui convenait. j'ai mis l'adresse du serveur celle de filezilla. J'ai changé le USER et le PWD comme configurer sur filezilla. J'arrive bien a lire le contenu de ma SD. Lorsque j'appui f pour démarrer le FTP la connection se fait bien sur le port série j'ai un retour de command connecter mais sur mon filezilla il n'y a pas de client.

Y aurait-il quelqu'un dans l'assistance qui pourrait m'expliquer la fonction Ercv(). Car quand je commente toutes les lignes appelant cette fonction le programme continu mais me met Bad PASV Answer. Je n'arrive pas à comprendre pourquoi le code se bloque dans la fonction eRcv.

Merci d'avance pour votre aide. :blush:

Bonjour,

Petite précisions, je viens de m'apercevoir que même quand mon server n'est pas activé, la commande arduino me met quand meme connecté. Le server ftp est en loclhost 127.0.0.1. Encore merci d'avance je ne sais plus trop ou chercher.

Maxime

Le server ftp est en loclhost 127.0.0.1.

c'est l'ip interne du server et non celle sur le réseau, faut pas tout confondre ;)

Salut,

Je ne comprend pas comment tu peux lire ta sd en ayant le serveur sur ton pc…

Justement Koala, je n'y arrive pas. Comment pourrais-je faire pour récuperer les fichiers de ma SD a distance.

@Infobarquee, Je ne comprends pas ce que tu veux dire.

merci de votre aide

127.0.0.1 c'est une adresse interne à ton PC ce n'est pas l'adresse à laquelle il répond sur le réseau. Faire un ipconfig (sous Windows) ou ifconfig (sous Linux) pour connaitre l'IP de la machine.

Merci fdufnews, Alors j'ai un autre problème lorsque je met l@ IP de mon PC sur filezilla server il ne se connecte pas. Il y des choses qui m’échappe sur la connection entre l'arduino et mon pc qui est en win 7 pro. Ai-je besoin de filezilla server pour récupérer les fichiers de ma carte SD? Si oui, quel adresse faut-il mettre sur filezilla server qui tourne sur mon PC afin que l'arduino s'y connecte.

Encore merci. Maxime

holalalala, tu mélanges tout. si tu veux un server ftp, il faut l'installer, sinon comment veux tu envoyer par ftp des fichiers? un truc m'échappe franchement, tu veux faire un truc sans savoir déjà les bases minimums. http://www.framasoft.net/article3738.html

faut faire un peu de recherche quand même, enfin juste le minimum. ou alors je suis trop vieux avant l'heure :)

Merci infobarquee,

C'est exactement ce tutoriel que j'ai utilisé pour configurer filezilla. Je croyais qu'il fallait utiliser l'@127.0.0.1. Sur ce tuto ils disent de mettre l'adresse IP du serveur, donc moi l'@ de mon PC en 192.168.xxx.xxx. Mais cela me met l'erreur j'ai vérifié si le service filezilla etait démarré, il l'est bien.

dans la config, il faut mettre 127.0.0.1 pour accéder via une autremachine sur le même réseau, il faut rentrer l'ip du pc qui héberge le server ftp. ex : ip : 192.168.1.12 port : 21 login : xxxxxx mdp : yyyyy après tout dépend si tu configure en mode pasv ou non, risqué si tu ouvre les ports sur ton modem.

msevrin: Lorsque j'appui f pour démarrer le FTP la connection se fait bien sur le port série j'ai un retour de command connecter mais sur mon filezilla il n'y a pas de client.

Que dit le log de filezilla? Ton arduino parle sur le bon port?

Je pense que tu t’embrouille entre le client et le serveur :slight_smile:

Donc vu que tu as installé Filezilla SERVEUR sur ton pc, ton Arduino est le client. Donc ça sera à ton Arduino d’aller chercher ou d’envoyer un fichier vers le pc et non l’inverse.

Maintenant sur ton pc il faut déjà être sûr que ton serveur fonctionne. Ton pc dispose de plusieurs adresse ip, la localhost 127.0.0.1 et une par carte réseau. Pour tester ton serveur, instal Filezilla Client et essaye de te connecter sur ton adresse 127.0.0.1

Si ok, tu fais executer > cmd > ipconfig /all

Dans la liste, tu repères ton adresse ip de la carte reseau que tu utilise qui dois surement ressembler à 192.168.1.xxx

Au passage tu note l’ip de ta “gateway” sur une feuille. Tu essaye ensuite de te connecter à ton serveur toujours avec Filezilla Client en utilisant ton ip 192.168.1.xxx, si ok on peut dire que ton serveur est fonctionnel sur ton réseau.

Dans ton sketch, tu modifie ces lignes :

// change to your network settings
IPAddress ip( 192, 168, 1, xxx );    // Ici tu remplace les xxx par une adresse iutilisé sur ton réseau genre 123
IPAddress gateway( 192, 168, 1, 1 ); // Ici tu met la "gateway" noté sur la feuille
IPAddress subnet( 255, 255, 255, 0 ); // Ici tu touche pas

// change to your server
IPAddress server( 192, 168, 1, xxx); // Ici tu mets l'adresse ip de ton serveur que tu as utilisé avec Filezilla Client

@Fdufnews,

Mon arduino parle sur le port 21 j'ai vu que cétait le standart pour le FTP, ensuite pour les log de FZ, il n'y a rien, il ne voit pas de connexion.

Merci Koala et infobarque,

J'ai compris, merci pour vos explications, je m'embrouillais avec les adresses 127.0.0.1 et celle de mon PC, J'ai corrigé comme vous me l'avais dit. Mais lors de l'exécution le programme se bloque sur "command connected".

On dirait qu'il bloque lors de la l'appel de la fonction eRcv(). Pour info avec FZ client j'arrive à me connecter. Serait-il possible que ce soit le pare-feu windows qui empêche le arduino de se connecter a mon PC. Je ne peux pas le desactiver par choix de sécurité.

J'aimerais tenter de connecter directement mon arduino aux PC avec un cable RJ45, mais je n'aurais plus de gateway. Je les ai donc rentrer manuellement sur mon PC comme ceci: @ IP PC: 192.168.16.44 masque 255.255.255.0 passerel par def: 192.168.16.0. Ensuite je change coté code arduino avec ces valeurs, mais il ne se conecte pas => command connected FAIL = > FTP fail par contre la le code ne se bloque pas il revient dans la loop.

Merci pour votre soutien. Maxime

gateway c'est ta passerel par defaut (ta box), ça ne devrai pas changer grand chose.

Par contre, ton ip coté pc doit être différente de ton ip arduino sinon il y a conflit

Pour ton premier test qui bloque maintenant à eRcv(), es tu sur que le fichier est present ??

Si tu ne commente pas cette ligne :

define FTPWRITE

Le fichier test.txt doit être présent sur ta SD et sera envoyé sur ton pc char fileName[13] = "test.txt";

Si tu commente //#define FTPWRITE Le fichier test.txt doit être présent sur ton pc et sera téléchargé sur ta SD

@Koala,

Ok, merci par contre si je deconnecte le PC de ma box et que je regles les parametres manuellement, l'arduino ne se connecte pas.

En mode connecté c'est à dire PC branché au réseau, lorsque je parametre comme tu me la conseillé

Dans ton sketch, tu modifie ces lignes :

Code:

// change to your network settings IPAddress ip( 192, 168, 1, xxx ); // Ici tu remplace les xxx par une adresse iutilisé sur ton réseau genre 123 IPAddress gateway( 192, 168, 1, 1 ); // Ici tu met la "gateway" noté sur la feuille IPAddress subnet( 255, 255, 255, 0 ); // Ici tu touche pas

// change to your server IPAddress server( 192, 168, 1, xxx); // Ici tu mets l'adresse ip de ton serveur que tu as utilisé avec Filezilla Client

La carte arduino se connecte mais bloque dans la fonction doFtp(), je ne sais pas comment faire pour voir ou sa plante?

Je vais essayer de telecharger visual micro et me mettre en debug pour voir . Merci

Tu as un shield ethernet donc ton pc ET ton arduino doivent être relié ensemble soit en passant par ta box soit directement avec un câble croisé (je ne sais pas si ça a encore beaucoup d'importance de nos jours).

msevrin: En mode connecté c'est à dire PC branché au réseau, lorsque je parametre comme tu me la conseillé La carte arduino se connecte mais bloque dans la fonction doFtp(), je ne sais pas comment faire pour voir ou sa plante?

Si tu es connecté tu dois avoir un log sur le serveur qui pourra peut être t'aiguiller sur le problème.

@fdufnews,

Justement dans le code example il y a

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;
  }

Sur mon serial j'ai bien la ligne commande connecté, mais j'ai l'impression que le programme se bloque dans un endroit, et je pense qu'il ne rentre pas le USer et le passw. En tout cas sur FZ il n'y a rien qui s'affiche.

L'envoi de ton nom d'utilisateur et de ton pass est une commande à envoyer au serveur, dans le lien que tu cite dans ton premier post, c'est ici :

 if(!eRcv()) return 0;

  client.println(F("USER myuser"));

  if(!eRcv()) return 0;

  client.println(F("PASS mypassword"));

J'ai vu j'ai remplacé les 2 par le compte que j'ai créer sur FZ serveur. Mais il ne se connecte pas. Peux tu m'expliquer la fonction eRCv() je ne la comprend pas, ni cette partie du code car j'ai l'impression que le code se bloque au passage du eRcv() avant de rentrer le USer et le passw. Autres question a quoi sa sert d'envoyer SYST enfin pourquoi envoyé des commandes SYST et pas d'information derrière? Je pense de plus en plus que la fonction ercv se bloque dans le while client .available.

Je vais investiguer cette voie. Merci encore