Système embarqué TCP/IP : Différence entre versions

De Wiki de Projets IMA
(Objectifs suggérés pas les élèves (les encadrants y ont droit de modification))
 
(24 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-ArduinoTCPIP-iframe.html" />
 
== Présentation ==
 
== Présentation ==
  
Ligne 9 : Ligne 10 :
 
*microcontroleur [[http://www.robotshop.com/microcontroleur-arduino-uno-usb-2.html Arduino Duemilanove]] (disponible) ;
 
*microcontroleur [[http://www.robotshop.com/microcontroleur-arduino-uno-usb-2.html Arduino Duemilanove]] (disponible) ;
 
*LEDs multicolores (disponibles) ;
 
*LEDs multicolores (disponibles) ;
*moulins à vent avec moteur à courant continu : nous augmenterons la tension d'alimentation des moteurs proportionnellement à l'occupation des switch ;
+
*moulins à vent avec moteur à courant continu : nous augmenterons la tension d'alimentation des moteurs proportionnellement à l'occupation des switch ; (commande annulée)
*câbles ;
 
 
*plateforme Altium ;
 
*plateforme Altium ;
*un module ELZ50 [http://www.atmicroprog.com/realisations/elz50/elz50.php] (commande en cours).
+
*un module ELZ50 [http://www.atmicroprog.com/realisations/elz50/elz50.php] (disponible).
 +
*l'Ether card de Jeelabs
 +
*Matrice de leds 8*8
  
 
=== Commentaires des encadrants sur le matériel ===
 
=== Commentaires des encadrants sur le matériel ===
Ligne 19 : Ligne 21 :
 
== Avancement du projet ==
 
== Avancement du projet ==
  
=== Objectifs suggérés par les encadrants ===
+
=== Objectifs suggérés par les encadrants pour la prise en main du sujet ===
  
 
* Ecrire un programme avec les fichiers fournis permettant dans un premier temps de créer une machine virtuelle répondant à la commande ping :
 
* Ecrire un programme avec les fichiers fournis permettant dans un premier temps de créer une machine virtuelle répondant à la commande ping :
Ligne 32 : Ligne 34 :
 
* Test de votre programme; lancement du programme, ajout d'une adresse IP (par exemple 192.168.0.200/24) sur l'interface tap0 créée par le programme, test de réponse de la pile par la commande ping (par exemple sur l'adresse 192.168.0.100). '''FAIT'''
 
* Test de votre programme; lancement du programme, ajout d'une adresse IP (par exemple 192.168.0.200/24) sur l'interface tap0 créée par le programme, test de réponse de la pile par la commande ping (par exemple sur l'adresse 192.168.0.100). '''FAIT'''
  
=== Objectifs suggérés pas les élèves (les encadrants y ont droit de modification) ===
+
=== Objectifs progressifs ===
*'''Partie Informatique'''
 
**Faire du profiling d'utilisation d'espace mémoire afin de voir de quelle taille il faudrait réduire le programme pour qu'il soit portable sur un arduino '''FAIT'''
 
**Tester une ou deux fonctions sur l'arduino pour savoir qu'est-ce-qu'il faut changer dans le code '''FAIT'''
 
**Inclure les fichiers en-tête ainsi que le Makefile arduino et vérifier qu'on peut bien créer une machine virtuelle sur l'arduino '''FAIT'''
 
**Vérifier qu'avec la machine virtuelle créée sur l'arduino on peut bien envoyer et recevoir des paquets Ethernet
 
**Créer une fonction de renvoi des paquets Ethernet reçus qui contiendra une variable Packet dans laquelle seront stockés les en-têtes dudit paquet pour l'optimisation d'espace mémoire sur à l’exécution du programme sur l'arduino
 
**Vérifier et tester le renvoi correct du/des paquet(s) reçu(s)
 
*'''Partie Électronique'''
 
**Concevoir le module d'émission/réception de la plate-forme altium vers l'arduino des trames Ethernet.
 
** Émission seule '''FAIT'''
 
***  => Architecture matérielle '''FAIT'''
 
***  => Récupération d'un paquet Ethernet '''FAIT'''
 
  
** Réception seule
+
==== '''Partie Informatique''' ====
***  => E/R simultanés (processus multithreadé)
 
***  => Réception sur l'Arduino
 
  
**Concevoir le module de réception des commandes actionneur de l'arduino
+
*Faire du profiling d'utilisation d'espace mémoire afin de voir de quelle taille il faudrait réduire le programme pour qu'il soit portable sur un arduino '''FAIT'''
 +
*Tester une ou deux fonctions sur l'arduino pour savoir qu'est-ce-qu'il faut changer dans le code '''FAIT'''
 +
*Inclure les fichiers en-tête de la librairie stack '''FAIT'''
 +
*Créer un fichier de compilation, makefile propre à l'arduino '''FAIT'''
 +
*Répartir l'analyse des différentes couches des trames
 +
**Reception d'un paquet Ethernet sur l'arduino '''FAIT'''
 +
**Reception d'un paquet ARP: fonction programmee
 +
**Reception d'un paquet IP: fonction programmee
 +
**Reception d'un paquet ICMP: fonction pragrammee
 +
**Tests fonctions: '''FAIT'''
 +
**Programmer une fontion avec une variable locale pour le paquet (trames ethernet contenant toutes les couches) '''FAIT'''
 +
**Supprimer les tableaux de paquets et utiliser plutôt des pointeurs '''FAIT'''
 +
**Augmenter la table ARP '''FAIT'''
 +
**Faire la reception et le renvoi d'une trame ethernet en test '''FAIT'''
 +
 
 +
*Communication par liaison série
 +
**Modifier les fonctions pour recevoir et envoyer des paquets par liaison serie '''FAIT'''
 +
**Allumer une led lorsqu'on reçoit un paquet '''FAIT'''
 +
**Eteindre la led lorsque le paquet reponse est envoyé
 +
**Instancier une variable globale "echo" pour gerer la led multicolore '''FAIT'''
 +
**Changer la couleur de la led RVB en fonction de la taille du paquet reçu
 +
 
 +
*Perspectives
 +
**Créer une fonction de renvoi des paquets Ethernet reçus qui contiendra une variable Packet dans laquelle seront stockés les en-têtes dudit paquet pour l'optimisation d'espace mémoire à l’exécution du programme sur l'arduino
 +
 
 +
*Matrice de leds
 +
**Ecrire une routine pour réaliser un effet graphique en fonction de l'événement repéré: envoi/réception de paquets par liaison série ou en réseau '''FAIT'''
 +
*Module EZL60
 +
**ecrire un programme permettant à l'arduino d'envoyer et de recevoir des paquets par liaison série vers le module (module finalement non utilisé)
 +
 
 +
==== '''Partie Électronique''' ====
 +
 
 +
*Concevoir le module d'émission/réception de la plate-forme altium vers l'arduino des trames Ethernet.
 +
Note : Dans un premier temps, les tests sont fait avec un petit exécutable développé pour récupérer et envoyer des octets avec un adaptateur USB-Série sur un ordinateur. Dans un second temps, il faudra adapter ce code C pour faire deux fonctions intégrées à l'Arduino.
 +
 
 +
* Architecture matérielle '''FAIT'''
 +
* Émission seule '''FAIT'''
 +
** Récupération d'un paquet Ethernet '''FAIT'''
 +
** Émission du paquet sur la liaison série '''FAIT'''
 +
* Réception seule
 +
** Récupération d'un paquet Ethernet en série '''FAIT'''
 +
** Émission de la requête sur la liaison Ethernet '''FAIT'''
 +
* E/R simultanés
 +
** Processus Multithreadé '''FAIT'''
 +
** Éventuellement : Gestion de la ressource avec un sémaphore
 +
* Réception sur l'Arduino
 +
** Portage du code C de réception sur l'Arduino
 +
** Gestion de la simultanéité E/R
 +
*Concevoir le module de réception des commandes actionneur de l'arduino
  
 
=== Difficultés rencontrées ===
 
=== Difficultés rencontrées ===
 
* '''Partie Informatique'''
 
* '''Partie Informatique'''
 
** Comprendre le code fourni et savoir se servir des fonctions
 
** Comprendre le code fourni et savoir se servir des fonctions
** Comprendre la syntaxe d'un makefile et maîtriser la compilation modulaire sur l'arduino
+
** Comprendre la syntaxe d'un makefile avec le compilateur avr dude et une édition de liens entre fichiers codés en C et ceux codés en C++,et maîtriser la compilation modulaire sur l'arduino (impossibilité d'inclure certaines bibliothèques du C)
 +
** Saisir la particularité du compilateur avr-dude dans le traitement de types de données tels "long int" qui sont tronqués; solution: on a utilisé des "short int"
 +
** Gérer la communication par liaison série avec l'arduino à l'aide de thread ( bibliothèque time)
  
 
* '''Partie Électronique'''
 
* '''Partie Électronique'''
 
** Conception de l'architecture matérielle avec un buffer associé à la liaison Ethernet
 
** Conception de l'architecture matérielle avec un buffer associé à la liaison Ethernet
 
** Décomposition de la taille du paquet Ethernet (short int = 2 octets) en deux paquets d'un octet chacun, et récupération des deux premiers paquets sur l'arduino pour reconstruire la taille du paquet.
 
** Décomposition de la taille du paquet Ethernet (short int = 2 octets) en deux paquets d'un octet chacun, et récupération des deux premiers paquets sur l'arduino pour reconstruire la taille du paquet.

Version actuelle datée du 25 mai 2011 à 19:29

Présentation

Le but de ce projet est principalement de réaliser un système embarqué TCP/IP, qui pourrait représenter grâce aux LEDs ou à des moulins à vent la charge sur les différents commutateurs de l'école, décrivant ainsi l'activité de ces derniers.

Préparation du projet

Matériel requis

  • microcontroleur [Arduino Duemilanove] (disponible) ;
  • LEDs multicolores (disponibles) ;
  • moulins à vent avec moteur à courant continu : nous augmenterons la tension d'alimentation des moteurs proportionnellement à l'occupation des switch ; (commande annulée)
  • plateforme Altium ;
  • un module ELZ50 [1] (disponible).
  • l'Ether card de Jeelabs
  • Matrice de leds 8*8

Commentaires des encadrants sur le matériel

Préciser le dispositif "moulin à vent". En particulier, ils doivent être motorisés (comment ?). Vous devez aussi vous préoccuper de la commande des moteurs, ce qui impactera l'architecture à implémenter sous Altium.

Avancement du projet

Objectifs suggérés par les encadrants pour la prise en main du sujet

  • Ecrire un programme avec les fichiers fournis permettant dans un premier temps de créer une machine virtuelle répondant à la commande ping :
    • nettoyer les fichiers fournis pour enlever toute référence aux sockets Unix ou Internet ; FAIT
    • réaliser des fonctions de lecture et d'écriture pour une interface TAP ; FAIT
    • écrire une procedure main réalisant les actions suivantes :
      • initialisation d'une variables de pile TCP/IP (type netstack) ; FAIT
      • création d'une interface de type TAP avec les fichiers libtap.c et libtab.h fournis ; FAIT
      • écriture d'un "pilote" pour cette interface (c'est à dire remplissage d'une structure avec le descripteur lié à l'interface et les fonctions de lecture et d'écriture sur l'interface TAP) ;
      • ajout d'une interface réseau et d'une adresse IP à cette pile (par exemple 192.168.0.100/24) ; FAIT
      • démarrage de la fonction de gestion de la pile (stackOn). FAIT
  • Test de votre programme; lancement du programme, ajout d'une adresse IP (par exemple 192.168.0.200/24) sur l'interface tap0 créée par le programme, test de réponse de la pile par la commande ping (par exemple sur l'adresse 192.168.0.100). FAIT

Objectifs progressifs

Partie Informatique

  • Faire du profiling d'utilisation d'espace mémoire afin de voir de quelle taille il faudrait réduire le programme pour qu'il soit portable sur un arduino FAIT
  • Tester une ou deux fonctions sur l'arduino pour savoir qu'est-ce-qu'il faut changer dans le code FAIT
  • Inclure les fichiers en-tête de la librairie stack FAIT
  • Créer un fichier de compilation, makefile propre à l'arduino FAIT
  • Répartir l'analyse des différentes couches des trames
    • Reception d'un paquet Ethernet sur l'arduino FAIT
    • Reception d'un paquet ARP: fonction programmee
    • Reception d'un paquet IP: fonction programmee
    • Reception d'un paquet ICMP: fonction pragrammee
    • Tests fonctions: FAIT
    • Programmer une fontion avec une variable locale pour le paquet (trames ethernet contenant toutes les couches) FAIT
    • Supprimer les tableaux de paquets et utiliser plutôt des pointeurs FAIT
    • Augmenter la table ARP FAIT
    • Faire la reception et le renvoi d'une trame ethernet en test FAIT
  • Communication par liaison série
    • Modifier les fonctions pour recevoir et envoyer des paquets par liaison serie FAIT
    • Allumer une led lorsqu'on reçoit un paquet FAIT
    • Eteindre la led lorsque le paquet reponse est envoyé
    • Instancier une variable globale "echo" pour gerer la led multicolore FAIT
    • Changer la couleur de la led RVB en fonction de la taille du paquet reçu
  • Perspectives
    • Créer une fonction de renvoi des paquets Ethernet reçus qui contiendra une variable Packet dans laquelle seront stockés les en-têtes dudit paquet pour l'optimisation d'espace mémoire à l’exécution du programme sur l'arduino
  • Matrice de leds
    • Ecrire une routine pour réaliser un effet graphique en fonction de l'événement repéré: envoi/réception de paquets par liaison série ou en réseau FAIT
  • Module EZL60
    • ecrire un programme permettant à l'arduino d'envoyer et de recevoir des paquets par liaison série vers le module (module finalement non utilisé)

Partie Électronique

  • Concevoir le module d'émission/réception de la plate-forme altium vers l'arduino des trames Ethernet.

Note : Dans un premier temps, les tests sont fait avec un petit exécutable développé pour récupérer et envoyer des octets avec un adaptateur USB-Série sur un ordinateur. Dans un second temps, il faudra adapter ce code C pour faire deux fonctions intégrées à l'Arduino.

  • Architecture matérielle FAIT
  • Émission seule FAIT
    • Récupération d'un paquet Ethernet FAIT
    • Émission du paquet sur la liaison série FAIT
  • Réception seule
    • Récupération d'un paquet Ethernet en série FAIT
    • Émission de la requête sur la liaison Ethernet FAIT
  • E/R simultanés
    • Processus Multithreadé FAIT
    • Éventuellement : Gestion de la ressource avec un sémaphore
  • Réception sur l'Arduino
    • Portage du code C de réception sur l'Arduino
    • Gestion de la simultanéité E/R
  • Concevoir le module de réception des commandes actionneur de l'arduino

Difficultés rencontrées

  • Partie Informatique
    • Comprendre le code fourni et savoir se servir des fonctions
    • Comprendre la syntaxe d'un makefile avec le compilateur avr dude et une édition de liens entre fichiers codés en C et ceux codés en C++,et maîtriser la compilation modulaire sur l'arduino (impossibilité d'inclure certaines bibliothèques du C)
    • Saisir la particularité du compilateur avr-dude dans le traitement de types de données tels "long int" qui sont tronqués; solution: on a utilisé des "short int"
    • Gérer la communication par liaison série avec l'arduino à l'aide de thread ( bibliothèque time)
  • Partie Électronique
    • Conception de l'architecture matérielle avec un buffer associé à la liaison Ethernet
    • Décomposition de la taille du paquet Ethernet (short int = 2 octets) en deux paquets d'un octet chacun, et récupération des deux premiers paquets sur l'arduino pour reconstruire la taille du paquet.