IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Environnement Client-Serveur en C avec ArduinoYun


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Environnement Client-Serveur en C avec ArduinoYun
    Bonjour, je suis le petit jeune récemment inscrit chez vous

    Cette requête va surement faire sourire ceux qui s'y connaissent en informatique mais voilà, je suis en Terminale STI2D et j'ai un projet à rendre dans 3 semaines qui nécessite que je fasse de la programmation en C sur une carte ArduinoYun.

    Je vous détaille le projet rapidement :
    Nous devons, en groupe de 5, améliorer un distributeur de croquettes pour chien afin de le rendre automatisé.
    Pour cela nous devons le motoriser, le rendre capable de reconnaître les chiens autorisés à accéder aux croquettes (RFID), le rendre configurable manuellement via un écran LCD, et pour finir créer un site web personnel pour chaque distributeur de croquette qui permettra de le configurer depuis un ordinateur (on vise un réseau local pour débuter).

    Je me suis beaucoup documenté sur le sujet pour bien démarrer, ce qui m'a permis de mettre au point un petit programme d'initialisation de serveur et de connexion client sous la forme d'une requête HTML, mon travail étant de créer une connexion entre une petite base de données présente sur la Yun et le site web du distributeur.

    Voici un petit schéma pour vous expliquer comment je vois la solution à ma problématique :

    Nom : Capture11.PNG
Affichages : 436
Taille : 20,7 Ko

    La meilleur idée que j'ai pu trouver serait donc de renvoyer le site web sur le serveur de l'ArduinoYun en fonction du chien demandé.
    Dans les fait je ne sais pas encore comment je vais procéder mais avant ça j'ai un problème un peu plus préoccupant...
    Voici le programme d'initialisation de serveur et de connexion client que j'ai pu écrire jusque là :

    Nom : Capture1.PNG
Affichages : 464
Taille : 77,6 Ko

    Nom : Capture2.PNG
Affichages : 534
Taille : 74,6 Ko

    De mon point de vu de débutant le programme me parait correcte mais quand je le lance et que je l'observe depuis la console :

    Nom : Capture6.PNG
Affichages : 413
Taille : 17,1 Ko

    D'après mes recherches c'est un problème assez courant mais dans tous les forums ou j'ai pu observer ce problème chez d'autres personnes, aucuns n'a pu le résoudre.
    Ayant déjà fait les procédures de connexion de la wifi de la carte sur ma propre wifi, je peux vous assurer que le problème ne vient pas de l'adresse ip qui pourrait ne pas être la bonne dans mon programme. Voyez vous même :

    Nom : Capture3.PNG
Affichages : 395
Taille : 90,3 Ko

    J'ai donc fait des recherches sur "Le croquis utilise t'il le pont ?" et j'ai découvert la bibliothèque Bridge.
    Je me suis documenté dessus et j'ai pu créer ce programme mais comme il y a très peu d'exemple sur internet je ne suis pas du tout sur de sa validité :

    Nom : Capture4.PNG
Affichages : 412
Taille : 78,0 Ko

    Nom : Capture5.PNG
Affichages : 450
Taille : 74,2 Ko

    N'ayant aucun résultat avec celui ci via la console j’avoue être actuellement à cour d'idées.
    Du coup, si vous avez 5 minutes devant vous pourriez vous m'indiquer ou sont les erreurs dans mon programme ? Je ne cherche pas de réponse toute faite mais juste comprendre pourquoi mon premier programme ne marche pas, s'il faut que j’utilise effectivement la bibliothèque Bridge et ou sont les erreurs dans mon second programme.
    Comme mes professeurs ne connaissent que très peu de chose à l'informatique il n'y a que vous pour m'aider à comprendre mes erreurs.

    Voici mes messages d'erreurs dans mon premier programme, peut être que cela peut vous aider :

    Nom : Capture7.PNG
Affichages : 464
Taille : 114,1 Ko

    Nom : Capture8.PNG
Affichages : 452
Taille : 91,0 Ko

    Nom : Capture9.PNG
Affichages : 420
Taille : 89,6 Ko

    Nom : Capture10.PNG
Affichages : 401
Taille : 86,3 Ko

    Merci d'avance, et excusez-moi du pavé, j’espère vous avoir résumé au mieux mon problème.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ce serait bien que tu nous mettes tes codes ici plutôt que dans des images. Ca nous permettrait de les récupérer pour tester.

    Mais bon, déjà quand je vois char chien1="Rex" ben je me dis que tu devrais revoir les types de base (c'est quoi un char, c'est quoi une chaine).

    Accessoirement, quand on a n items à traiter, il est plus pratique de les ranger dans un tableau (ce qui permet ensuite de factoriser les traitements dans des boucles) plutôt que dans des variables distinctes "item1", "item2", "item3" etc. Et quand on a des trucs qui vont ensemble (comme un nom, une dose et une dose/jour) il est plus pratique de les grouper dans une structure. Et donc fatalement quand on a n groupes de trucs on obtient un tableau de structures. Ca semble peut-être ingrat comme travail que de préparer tout ça avant de rentrer dans l'algo (encore que créer le tableau de structures ne prend pas non plus 3 plombes !!!) mais ça multiplie ensuite la vitesse de codage par 1000...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'ai bien pris en compte vos conseils:
    Effectivement il fallait que je révise mes types de variables, je n'avais pas du tout fait attention au char chien1 = "Rex".
    Je me suis renseigné sur les structures et les tableaux et après compilation, mes structures sont correctes mais pas le tableau, il y a quelque chose que j'ai mal compris dans leur utilisation ?

    Voici le code sans screenshot cette fois-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #include <SPI.h>
    #include <WiFi.h>
     
    struct dog1 {
        String Chien1;
        unsigned char dose1;
        unsigned char dosejour1;
    };
    struct dog1 variables1 = { .Chien1 = "Rex", .dose1 = 45, .dosejour1 = 3 };
     
    struct dog2 {
        String Chien2;
        unsigned char dose2;
        unsigned char dosejour2;
    };
    struct dog2 variables2 = { .Chien2 = "Maiko", .dose2 = 45, .dosejour2 = 2 };
     
    struct dog3 {
        String Chien3;
        unsigned char dose3;
        unsigned char dosejour3;
    };
    struct dog3 variables3 = { .Chien3 = "Fripon", .dose3 = 30, .dosejour3 = 2 };
     
    struct Tableau[3] = {dog1, dog2, dog3};
     
     
    byte mac[] = {0xB4, 0x21, 0x8A, 0xF0, 0x31, 0xC7}; //adresse mac de la carte
    byte ip[] = {192, 168, 1, 51}; //adresse ip de la carte
     
     WiFiServer server(80); //serveur écoutant sur le port 80
     
    void setup() { //initialisation de la carte et du serveur
     
    Serial.begin(9600); //vitesse de connexion
     
    WiFi.begin(mac, ip); // Démarrage de la connexion wifi
    Serial.print("\nLe serveur est sur l'adresse : ");
    Serial.println(WiFi.localIP()); //affichage de l'adresse de connexion
    server.begin(); //démarrage de "l'écoute"
     
    }
     
     
     
    void loop() { //programme principal s'éxécutant en boucle
    WiFiClient client = server.available(); //on écoute le port
    if (server.available()){ 
      Serial.println("Client");
    }
    if (client) { //si le client est connecté
      Serial.println("Client en ligne\n"); //lui signaler
      if (client.connected()) { //si le client est en état "connecté"
        while (client.available()) { //tant qu'il peut transmettre des informations
          char c = client.read(); //on lit le caractère
          Serial.write(c); //on l'écrit sur le moniteur série
          delay(1); //délai de lecture
        }
     
       client.println("<DOCTYPE HTML>"); // informe le navigateur du type de document
       client.println("<html>STI FEED <br></html>"); //code html
       client.stop(); //déconnection du client
       Serial.println("Fin de communication avec le client");
        }
      }
    }
    Et excusez moi pour l'erreur, je pensais que comme c'est un problème de code en C le topic se placerait dans la catégorie C des langages de programmation mais effectivement Système embarqué est plus approprié.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Aureloo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    struct dog1 {
        String Chien1;
        unsigned char dose1;
        unsigned char dosejour1;
    };
    struct dog1 variables1 = { .Chien1 = "Rex", .dose1 = 45, .dosejour1 = 3 };
     
    struct dog2 {
        String Chien2;
        unsigned char dose2;
        unsigned char dosejour2;
    };
    struct dog2 variables2 = { .Chien2 = "Maiko", .dose2 = 45, .dosejour2 = 2 };
     
    struct dog3 {
        String Chien3;
        unsigned char dose3;
        unsigned char dosejour3;
    };
    struct dog3 variables3 = { .Chien3 = "Fripon", .dose3 = 30, .dosejour3 = 2 };
     
    struct Tableau[3] = {dog1, dog2, dog3};
    Nan mais c'est bon quoi !!! Si tu débutes en C faut le dire !!! Quand tu as 2 int "x" et "y", est-ce que tu as un type "int1" pour "x" et un autre "int2" pour "y" ??? Alors pourquoi faire des types "dog1" "dog2" et "dog3" alors que c'est fondamentalement la même chose ???
    Et en C le type "String" n'existe pas.

    Un exemple de base de tableaux de structures
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    typedef struct {
    	char *nom;
    	unsigned short /* char convient pour des valeurs ne dépassant pas 255 mais quand ça compile ça donne le même résultat qu'avec short */ dose;
    	unsigned short doseJour;
    } t_chien;
     
    int main() {
    	t_chien tabChien[]={
    		{"Rex", 45 , 3},
    		{"Maiko", 45 , 2},
    		{"Fripon", 30 , 2},
    		{NULL, 0, 0},
    	};
     
    	t_chien *ptChien;
     
    	for (ptChien=tabChien; ptChien->nom != NULL; ptChien++)
    		printf("Nom: %s, dose: %d, dose par jour: %d\n", ptChien->nom, ptChien->dose, ptChien->doseJour);
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup de m'avoir montrer les bases d'un tableau de structure, ça m'aide beaucoup pour avancer.
    Cependant j'avais bien précisé dans mon premier message que "Je me suis beaucoup documenté sur le sujet pour bien démarrer".
    C'est pour cela que je me suis inscrit sur votre forum car avec le peu de base dont je dispose je n'arrive pas à comprendre pourquoi le code que j'ai pu produire jusque là n'arrive pas à établir une connexion.
    Je débute littéralement dans l'informatique et je cherche simplement à comprendre mes erreurs pour rapidement progresser, mon projet étant sur un laps de temps de 3 semaines.

Discussions similaires

  1. Clients/Serveur sur localhost avec sockets TCP
    Par marko1587 dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 25/05/2014, 22h31
  2. Architecture Client/Serveur en java avec les sockets
    Par ram-0000 dans le forum Réseaux
    Réponses: 0
    Dernier message: 03/04/2013, 10h44
  3. Client/Serveur : probleme communication avec flux clavier
    Par Romvaillant dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 02/03/2009, 15h23
  4. Client/Serveur en C avec OpenSSL
    Par baallrog dans le forum C
    Réponses: 2
    Dernier message: 14/01/2007, 05h26
  5. Réponses: 1
    Dernier message: 11/05/2006, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo