Show Posts
Pages: [1] 2 3 4
1  International / Français / Re: Pb écriture série avec pySerial on: April 05, 2014, 05:26:40 am
Je pense que dans ton 1er code, tu envoies "START\n" avec ton code python et tu compares avec "START" dans le code arduino.
2  International / Français / Re: Php et Arduino ? on: April 05, 2014, 03:14:01 am
Si l'objectif est simplement d' uploader des fichiers depuis le navigateur web vers l'arduino, c'est tout à fait faisable.
S'il s'agit d'interpréter du php sur l'arduino c'est impossible (sauf le Yun).

Dans le premier cas, il faut le formulaire correct dans la page web et que le serveur web de l'arduino accepte les requêtes POST et écrive les données reçues dans un fichier.
3  International / Français / Re: Modification d'un fichier présent sur une carte SD on: February 18, 2014, 12:51:25 am
Les caractères écrits vont remplacer les précédents, donc cette méthode ne fonctionne que si les valeurs ont la même taille.
Il me semble plus judicieux de réécrire un nouveau fichier (avec un nom temporaire), puis de supprimer l'ancien et ensuite de renommer le nouveau.
Il n'y a pas forcément besoin de redémarrer le sketch, mais ça dépend vraiement de la structure de ton programme.
4  International / Français / Re: adaptateur USB pour Arduino Pro Mini on: November 21, 2013, 07:01:03 am
Dans ce cas tu peux faire un reset manuel du pro mini lors de l’upload, j’ai le même cas…

Il faut faire plusieurs essais avant de trouver le bon moment, mais avec un peu d’habitude c’est très facile.
Personnellement, je clique sur le bouton “upload” de l’IDE, j’appuie sur reset de l’arduino et je le relâche 2 secondes après l’affichage de la mention “uploading” dans l’ide (1.0.5) et ça marche nickel.
5  International / Français / Re: passage en référence & on: November 21, 2013, 06:55:41 am
dans lipo.cpp:
Code:
void lipo::getLipoCellsCount(int *counter){
6  Using Arduino / Programming Questions / Re: Strange Serial Monitor results on: November 16, 2013, 04:56:26 am
Ah yes, you are right - after reading again very carefully the docs, I have to come to the conclusion that the pin mapping is way more complicated than I thought.
My mistake !
7  Using Arduino / Programming Questions / Re: Strange Serial Monitor results on: November 16, 2013, 03:56:56 am
Replace
Code:
pot=A4;
by
Code:
pot=4;

The values A1, A2 ... are there to use the analog input pins as digital input/output pins with pinMode, digitalRead, digitalWrite.
Just use the plain pin number with analogRead.
8  International / Français / Re: FTP : afficher fichier distant (NLST) on: October 17, 2013, 03:36:46 am
Les box des opérateurs sont toujours ouvertes en sortie, mais en entrée il faut généralement rediriger les ou les ports désirés vers un ordinateur du réseau local.
Ce qui ne devrait pas changer grand'chose entre http et FTP (sous réserve d'utiliser le FTP en mode passif, ce qui est le cas dans ton programme).
FTP over http ne sérail utile que si tu as absolument besoin du FTP et que ton seul point d'entrée ou de sortie de ton réseau serait le http (cas d'une entreprise par exemple où tu ne maîtrise pas ces réglages). Mais ça doit nécessiter un ordinateur intermédiaire qui décapsule le FTP du http et qui renvoie ensuite les requêtes FTP vers le serveur final. Plutôt lourd.
Le ftp est bien si tu veux uploader et/ou downloader des fichiers, mais On peut aussi le faire en http. Si tu veux de l'interactivité alors http avec Json est un bon choix - ça permettrait de faire un site web hébergé sur l'arduino et le browser irait communiquer en Json pour changer l'état d'un pin ou n'importe quoi d'autre.

En fait pour mieux architecturer ton projet, tu devrais voir qui sert des informations (l'arduino ou un autre ordinateur) et qui en a besoin (et pour quoi faire: juste uploader des fichiers de conf ? Interagir avec l'arduino ?). De là viendra le choix du protocle et d'implementer sur l'arduino le côté client ou le côté serveur.
9  International / Le bar / Re: Presentez vous on: October 15, 2013, 03:01:03 am
Tiens, je vais me présenter smiley

"Bonjour, je m'appelle Christian, 42 ans, sans emploi... Je vais passer parmi vous, une petite piece siouplait..."
Euh, non, ça c'est dans le métro smiley-grin

Bon je m'appelle réellement Christian, j'ai réellement 42 ans, mais j'ai du boulot, heureusement.
Mon projet arduino consiste en une installation domotique pour ma maison, qui, bien que non terminé, gère quand même l'éclairage.

Sinon au niveau connaissances ça va en informatique (c'est mon boulot), mais en électronique je suis une brèle... Mais grâce à internet en général et au forum en particulier, je me débrouille  smiley-lol

Édit: corrigé l'âge, je m'étais planté  smiley-confuse
10  International / Français / Re: FTP : afficher fichier distant (NLST) on: October 15, 2013, 02:47:34 am
Le FTP est un protocole très simple (beaucoup plus que le http) et permet justement d'éviter de mettre des serveurs http avec du php etc.

Pour voir si le fichier existe, tu peux utiliser la commande ´SIZE nom-du-fichier' qui devrait renvoyer une erreur si le fichier n'existe pas et sa taille s'il existe.

Comme le dit Barbudor, la rfc est ton amie smiley
11  International / Français / Re: FTP on: October 01, 2013, 08:08:30 pm
Y'a pas de quoi ! Et bon courage pour la suite !
12  International / Français / Re: FTP on: September 30, 2013, 08:19:26 pm
Oups smiley-eek
Il manquait le nom du paramètre:

Code:
byte connectData (EthernetClient *dClient)
{
bla bla bla
}

Essaie quand même de voir les bases du C parce que apprendre avec des copier-coller c'est pas top  smiley
13  International / Français / Re: FTP on: September 30, 2013, 12:02:24 am
oui, tu peux bien sûr mettre la partie en double dans un fonction, par exemple comme suit:

Code:
byte connectData (EthernetClient *)
{
    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"));    
       return 0;
     }
    }

    unsigned int hiPort,loPort;

    hiPort = array_pasv[4] << 8;
    loPort = array_pasv[5] & 255;

    hiPort = hiPort | loPort; // FTP port

    if (!dclient.connect(server,hiPort))
  {
      Serial.println(F("Data connection failed"));
      return 0;
    }

    return 1;
}

et l'appeler depuis ftpdownload() et ftpupload () comme ça:

Code:
byte FTPupload(char fileName[13])
{

  Serial.println(F("Upload -------------------------"));

  fh = SD.open(fileName,FILE_READ);

  if(!fh) // test Open file
  {
    Serial.println(F("File open fail"));
  } else {


    EthernetClient dclient; // Open socket

if (!connectData (&dclient))
    {
      client.stop();
      fh.close();
return 0;
    }

    client.print(F("STOR ")); // SD opened for upload"
    client.println(repFTPinput+fileName);

bla bla bla…

Pour ce qui est des choses à optimiser, ce serait de nettoyer toutes les fonctions pour utiliser des variables locales et pas globales, gérer correctement les erreurs, etc. En gros transformer ce truc en librairie ftp présentable  smiley
14  International / Français / Re: FTP on: September 28, 2013, 01:18:25 am
@brakc

Autant pour moi, l'appel à ftp_readanswer () doit passer outbuf en paramètre plutôt que NULL - ce qui donnerait

Code:
return FTP_readAsnwer (&client, outbuf);

Puisque c'est la chaîne outbuf qui est analysée en retour de la commande PASV.

@refsmmat

To know everything about FTP, check the official documents: search for "rfc ftp" in Google.
As far as I know, there is no arduino FTP library.

15  International / Français / Re: FTP on: September 27, 2013, 02:55:45 am
Le problème de la fonction eRecv() est qu'elle lit tant qu'il y a quelque chose à lire, et après elle sort. Ça ne marche que si on a l'assurance que l'ensemble de la réponse du serveur arrive sans interruption notable. Sur un arduino qui est lent (comparativement à un ordi habituel), ça ne devrait pas poser de problème sauf si le lien réseau entre l'arduino et le serveur est mauvais - faible débit et/ou grande latence.

Le mieux serait de lire la réponse du serveur correctement. Un serveur ftp renvoie la réponse sous forme de chaînes de caractères terminées par \r\n (CR LF). Les trois premiers caractères de chaque sont composés de chiffres: le code retour. Le 4ème est soit un '-', soit un ' ': un '-' indique que ce n'est pas la dernière ligne de la réponse, un ' ' indique que c'est la dernière ligne.

Donc nous devons lire des lignes entières (c'est-à-dire lire jusqu'au caractères \r\n), tant que le 4ème caratère est différent de ' '.

Par exemple comme ceci (à adapter pour l'intégrer dans ton projet):

Code:
#define Fail(err,label)  if (err) {goto label;} else {;}

byte eRcv ()
{
return FTP_readAnswer (&client, NULL);
}



byte FTP_readAnswer (EthernetClient *controlSocket, char *buf)
{
    char buf2[81];
  

if (!buf)
buf = buf2;

    do
    {
        Fail (!FTP_readOneLine (controlSocket, buf, 80), stop);
Serial.print ("<--- ");  
Serial.println (buf);
    }
    while (buf[3] != ' ');
    
    return buf[0] - '0';

stop:
Serial.print ("read error\n");
return 5; // simulate server error
}

bool FTP_readOneLine (EthernetClient *controlSocket, char *line, short maxLength)
{
short i, j;
char cc, pc;


cc = 0;
i = 0;
line[0] = 0;

while (controlSocket->connected())
if (controlSocket->available())
{
pc = cc;
cc = controlSocket->read();

if (pc == '\r' && cc == '\n')
{
line[i-1] = 0; // ignore trailing CRLF
return true;
}

if (i < maxLength)
line[i++] = cc;
}

return false;
}

De plus un '1' en premier chiffre du code retour indique qu'il y aura une autre réponse plus tard; un '2' indique le succès, un '3' indique qu'il faut envoyer une autre commande, un '4' et '5' indiquent des erreurs. Il n'y a que quelques commandes ftp qui répondent avec '1' ou '3'.

Tout est là: http://www.ietf.org/rfc/rfc959.txt

Il y a d'ailleurs d'autres trucs qu'il faut adapter, par exemple eFail () dans ton cas pourrait être supprimé, et tu n'as aucune gestion d'erreur dans ton code - si la connexion au serveur échoue, tu appelles quand même ftpuload() etc.

EDIT: ilmanquait un petit bout dans le code
Pages: [1] 2 3 4