Atelier réseau

Xavier Redon

1  Le programme de l’atelier

Le but de ces travaux pratiques est de pratiquer la programmation réseau. Le prétexte est de gérer un Arduino avec un bouclier multi-fonctions pour l’utiliser dans un jeu javascript.

2  Connexion du micro-contrôleur en réseau

Commencez par repérer l’interface série de votre Arduino en listant les fichiers du répertoire /dev.

Vous pouvez ensuite créer l’interface réseau sl0 avec l’utilitaire slattach. Attention vous devez être administrateur pour utiliser slattach.

Utilisez ensuite l’utilitaire ip avec la syntaxe ci-dessous pour configurer les adresses IPv4 de votre interface sl0.

ip link set sl0 up
ip address add dev sl0 <@IP1> peer <@IP2>

Vous pouvez utilisez des adresses IPv4 dans le réseau 192.168.0.0/24.

Pour tester votre connexion utilisez l’utilitaire ping sur l’adresse IPv4 de l’Arduino. Vous devriez voir la LED RX de votre Arduino clignoter.

3  Programmation système

Vous allez programmer le micro-contrôleur en C pour analyser les paquets TCP/IP reçus et en générer d’autres.

3.1  Code fourni

Pour vous faciliter la vie une grande partie du code vous est fourni : http://rex.plil.fr/Enseignement/Reseau/TP.Reseau.GIS3/Arduino-C.tgz. Vous y trouverez, dans serial.c, des fonctions de gestion du port série et, dans les autres sources des fonctions pour utiliser les éléments du bouclier multi-fonctions.

Un Makefile est disponible, pour compiler il suffit de taper make. Pour télécharger le programme sur l’Arduino, tapez make upload.

3.2  Protocole SLIP

L’utilitaire slattach doit être configuré pour utiliser le protocole SLIP. Ce protocole permet de marquer la fin des paquets avec l’octet de valeur 0xc0. Si ce caractère est présent dans le paquet lui-même, il est remplacé par les deux caractères 0xdb et 0xdc. Si le caractère d’échappement 0xdb est présent dans le paquet il est remplacé par les deux caractères 0xdb et 0xdd.

3.3  Réception d’un paquet UDP

Pour contrôler les LEDs du bouclier nous allons nous baser sur les données UDP. Commencez par vérifier que le paquet reçu est un paquet UDP vous concernant :

Si le paquet est le paquet UDP attendu, prenez les octets de données et effectuez l’action correspondante sur les LEDs.

Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :

echo -ne "\xff" | nc -q0 -u <adresse IP Arduino> <port UDP>

3.4  Envoi d’un paquet UDP

Sur réception d’un paquet UDP particulier, par exemple sur un second port UDP, votre Arduino doit renvoyer un paquet UDP sur le même port avec comme données l’état des boutons du bouclier.

Vous devez donc constituer un paquet IPv4 contenant un paquet UDP contenant les données. Ce paquet doit être envoyé sur le port série en utilisant le protocole SLIP. N’oubliez pas de calculer la somme de contrôle IPv4 et éventuellement la somme de contrôle UDP.

Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :

nc -u -l -p <port UDP> | od -tx1 -w1

4  Application Web

Passons maintenant à l’application de gestion du micro-contrôleur. Les aspects réseau sont à implanter en utilisant la bibliothèque C des sockets.

4.1  Serveur Web

Votre application doit, entre autre, se comporter comme un serveur Web. Faites en sorte d’utiliser le port 8888 et de décoder les requêtes HTTP qui sont envoyées à votre application. Vous n’avez besoin de gérer que la commande GET mais de pouvoir retourner les pages de type HTML, javascript et les images. Dans votre réponse ajoutez, a minima, les entêtes Server et Content-Type.

4.2  Gestion des LEDs

Votre serveur Web doit permettre l’accès à une page particulière (par exemple /leds). Il doit être possible de passer des paramètres à cette page dans l’URL pour donner l’état des LEDs. Votre serveur doit analyser les paramètres et les transmettre au micro-contrôleur. Pour ce faire vous devez écrire une fonction C d’envoi d’octets par UDP. Ecrivez aussi une page HTML comportant un formulaire pour permettre un contrôle facile des LEDs.

4.3  Récupération de l’état des boutons

Votre serveur Web doit permettre l’accès à une page particulière (par exemple /boutons). Cette page doit retourner une chaîne de caractères courte représentant l’état des boutons. Pour cela votre application doit envoyer un paquet UDP à l’Arduino et lire la réponse. On suppose que la réponse arrive toujours.

4.4  Jeu javascript

Trouvez un jeu javascript déjà réalisé. Vous pouvez, par exemple, fouiller dans les démonstrations de la bibliothèque Phaser. Ce jeu doit pouvoir être contrôlé avec une manette, e.g. un casse-briques. Remplacez le code d’utilisation du clavier par un code de gestion par la manette. Vous aurez besoin de faire un appel en javascript à votre page de retour d’état des boutons. Pour cela, il est conseillé d’utiliser la bibliothèque JQuery : http://api.jquery.com/jquery.ajax/.


Ce document a été traduit de LATEX par HEVEA