3 Programmation de l'Arduino
Vous allez programmer l'Arduino en C.
3.1 Code fourni
Pour vous faciliter la vie une grande partie du code vous est fourni :
http://www.plil.net/~rex/Enseignement/Reseau/TP.Internet.GIS3/Arduino.tgz.
Vous y trouverez, dans serial.c, des fonctions de gestion du port série et,
dans outils.c des fonctions pour activer ou désactiver des sorties.
Les fonctions d'ouverture et de fermeture du port série ont les mêmes prototypes
que celles que vous avez utilisé sur les PC. Vous disposez même de fonctions read
et write. Vous pouvez donc ré-utiliser le code développé pour l'exercice
2.2.
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 Configuration réseau
Vous devez établir une connexion réseau IP entre votre PC et votre Arduino. Pour
cela nous allons utiliser le réseau local de l'exercice 2.2. L'Arduino
est naturellement connecté par une liaison série au PC dès que le cable USB est
branché. Changez tout de même la vitesse pour revenir à 9600 bauds. Sur le PC
vous devez lancer les deux programmes habituels, interface vers série et série vers
interface. Affectez une adresse IPv4 à votre interface virtuelle tap0 et
réservez une autre adresse IPv4 dans le même réseau pour l'Arduino.
3.3 Envoi d'une réponse ARP
Adaptez pour l'Arduino votre code de lecture d'un paquet sur le port série (toujours
avec le protocole SLIP). Le paquet doit être stocké dans un tableau mais faites attention
l'Arduino ne possède que 2Ko de mémoire vive.
Vous savez que si une machine lance un paquet UDP à destination de votre Arduino, une
étape de résolution d'adresse par ARP va prendre place. Votre Arduino va donc recevoir
un paquet ARP requête auquel il doit répondre avec un paquet ARP réponse. Vérifiez que
le paquet dans votre tableau est bien un paquet ARP requête (deux champs à analyser)
et que la machine concernée est bien la vôtre (un autre champ à analyser). Si le paquet
vous est destiné, forgez le paquet de réponse et envoyez le sur la connexion série,
toujours en utilisant le protocole SLIP.
3.4 Réception d'un paquet UDP
Pour commander l'objet nous allons nous baser sur un octet de donnée UDP. Commencez
par vérifier que le paquet reçu est un paquet UDP vous concernant :
-
le champ Ethernet "type" est bien 0x0800 ;
- le champ IP numéro de version est bien 4 ;
- le champ IPv4 protocole encapsulé est bien 17 ;
- l'adresse IPv4 de destination est bien celle de votre Arduino ;
- le port UDP de destination est bien celui que vous avez fixé.
Si le paquet est le paquet UDP attendu, prenez les octets de données et effectuez l'action
correspondante sur l'objet.
Vous pouvez tester votre programme en utilisant la commande Unix ci-dessous :
echo -ne "\xff" | nc -q0 -u <adresse IP Arduino> <port UDP>