Pour accéder à internet et connecter notre Arduino au monde extérieur, nous allons utiliser le shield Ethernet. Ce dernier repose sur le protocole éponyme dont nous allons voir les fondements dans ce chapitre. Vous allez donc pouvoir découvrir comment les choses fonctionnent au niveau du réseau puis nous finirons par une présentation du shield Ethernet que nous allons utiliser.
Ce chapitre sera principalement composé de théorie et de culture générale, mais ça ne fait jamais de mal ! Je vous conseille de le lire pour que nous soyons bien sur la même longueur d’onde pour la suite. Les chapitres suivants permettront de rentrer un peu plus dans le vif du sujet avec la mise en pratique.
Un réseau informatique c'est quoi ?
Internet, qu’est-ce que c’est au juste ? On en entend parler tout le temps et vous vous en servez probablement tous les jours, mais seriez-vous capable de le définir pour autant ? Essayons d’y voir plus clair…
Internet est un réseau de réseaux. C’est un support de transfert d’informations dans un sens le plus large possible. Afin d’organiser ces échanges, on utilise des protocoles spécifiques pour chaque type de transfert. Ces protocoles sont ainsi adaptés à une tache en particulier. Le plus connu est certainement http, soit HyperText Transfert Protocol qui sert à naviguer sur des pages en se promenant via des liens. Ceux d’entre vous qui font du développement web connaissent aussi sûrement le ftp, File Transfert Protocol (Protocole d’échanges de fichiers) qui permet de faire du transfert de fichiers uniquement.
Si l’on descend dans des considérations plus techniques, on peut s’intéresser au support de l’information, comment cette dernière voyage-t-elle. On découvrira alors les différents vecteurs de communication comme le WiFi ou l’Ethernet.
Chaque partie du réseau, que ce soit le medium de transfert de l’information ou le protocole final utilisé, peut être retrouvée dans ce que l’on appelle le modèle OSI (Open Systems Interconnection). Ce modèle possède 7 couches servant à définir le rôle de chacun des composants importants du réseau :
L’Ethernet, que nous allons voir dans ce cours agit sur les couches 1 et 2, physique et liaison de données puisqu’il transforme et transporte les données dans un "format" électronique qui lui est spécifique.
Le shield Ethernet
Toute la documentation officielle du shield Ethernet peut être trouvée ici : https://www.arduino.cc/en/Reference/Ethernet
Maintenant que nous y voyons plus clair dans ce qu’est un réseau, voyons un peu les caractéristiques du matériel que nous allons utiliser pour relier notre carte Arduino.
Il faut tout d’abord savoir que l’Arduino seule n’est PAS DU TOUT faite pour utiliser une liaison réseau comme l’Ethernet. Nous venons de le découvrir, il y a de nombreuses couches à respecter, protocoles à utiliser et paquets à réaliser. Le pauvre petit microcontrôleur de l’Arduino en serait bien incapable dans de bons délais, ce qui rendrait l’utilisation de la carte impossible.
C’est pourquoi l’Arduino va être épaulée par un shield qui se nomme très justement "shield Ethernet". Il est relativement simple à trouver et coûte moins d’une trentaine d’euros, comme sur le site de Farnell. Ce shield permettra alors de décharger l’Arduino de tout le traitement des couches réseau pour ne donner que les informations utiles à cette dernière. Commençons l’autopsie…
Le cœur du traitement : Le Wiznet 510
Tout le traitement ou presque va être géré par la puce que vous pouvez voir sur le dessus de la carte. Ce circuit intégré possède la référence Wiznet 5100. C’est un composant qui est dédié au traitement par Ethernet. Une fois configuré, il se chargera de faire toute la communication. C’est-à-dire que vous n’aurez qu’à envoyer vos données au shield (via SPI, nous y reviendrons) et le shield se chargera de les encapsuler dans des trames et de les transmettre à l’adresse que vous souhaitez. De la même façon, si des données sont reçues il se chargera de les récupérer et les transmettre à l’Arduino pour que votre programme puisse les exploiter.
Ce composant possède une mémoire buffer de 16 KB. C’est-à-dire que dans le cas d’un échange de données (téléchargement d’une page web par exemple) les données seront stockées ici le temps que l’Arduino les lise et les traite.
Le shield possède aussi plusieurs leds reliées au Wiznet dont voici le nom et le rôle :
- PWR: indique que la carte est alimentée ;
- LINK: indique que la carte est connectée à un réseau. Cette led clignote lors de l’émission/réception de données ;
- FULLD: cette led est allumée dans le cas d’une connexion full-duplex (émission et réception simultanées) ;
- 100M: allumée si le réseau peut aller à 100 Mb/s (vitesse max. du composant), éteinte dans le cas d’un réseau à 10 Mb/s ;
- RX: clignote lors de la réception de données ;
- TX: clignote lors de l’envoi de données ;
- COLL: clignote si des collisions de données sont détectées.
De la communication à droite à gauche…
Le shield Ethernet, on s’en doute, communique principalement par … Ethernet ! Mais ce n’est pas tout. Il lui faut aussi échanger avec l’Arduino pour pouvoir recevoir une configuration, savoir quelle page aller chercher ou encore transmettre des informations reçues. Pour toutes ces opérations, la transmission se fera par une liaison que nous ne connaissons pas encore : SPI (Serial Protocol Interface).
Cette transmission, nous allons découvrir comment l’utiliser via la librairie Ethernet dans cette partie. Nous n’allons cependant pas rentrer dans les détails puisque ce n’est pas le but de cette partie.
Carte SD
Sur le shield vous avez sûrement vu l’emplacement pour la carte SD. Cette dernière servira à stocker/charger des pages ou des données quelconques. Cette carte se sert elle aussi de la connexion SPI que je viens d’évoquer. On devra donc utiliser une broche comme "Slave Select" (sélection de cible) pour déclarer au système à quel composant on s’adresse, soit l’Ethernet, soit la SD.
Un peu de vocabulaire
Architecture Serveur/Client
Dans le monde magique d’internet, des ordinateurs se parlent entre eux. Cependant, on retrouve deux rôles particuliers : les clients et les serveurs. Bien que souvent exclusif, il peut cependant arriver qu’une machine serve aux deux. Mais voyons plus en détail ces rôles.
Le Serveur
Le travail du serveur est de … servir une information. Cette dernière peut être une page web ou un service quelconque. Par exemple, quand vous allez sur un site web, c’est un "serveur HTTP" (serveur web) qui sera chargé de vous répondre en vous renvoyant la bonne page. Autre exemple, dans votre établissement (scolaire ou professionnel), si une imprimante est branchée sur le réseau alors c’est un serveur d’impression qui sera utilisé pour convertir votre demande "imprime-moi la page 42 du pdf Arduino d’Eskimon" en une tâche dans le monde réel.
Vous vous en doutez sûrement, des serveurs il en existe pour plein de choses différentes ! Web, e-mail, impression… Quand nous utiliserons notre Arduino pour offrir/servir une donnée, on dira alors qu’elle est en fonctionnement de "serveur". On aura donc un "Serveur Arduino" en quelque sorte (qui pourra être un simple serveur web par exemple).
Le Client
Si vous avez compris les paragraphes précédents, alors vous avez sûrement deviné le rôle du client. Comme dans la vie réelle, le client est celui qui va demander une information ou un service. Dans la vie de tous les jours, vous utilisez sûrement au quotidien un navigateur internet. Eh bien ce dernier est un client pour un serveur web. Il fera alors des demandes au serveur, ce dernier les renverra et le client les interprétera.
Il existe autant de types de clients qu’il y a de types de serveurs. À chaque service, sa tâche !
Des adresses pour tout !
Dans ce tutoriel, nous allons rencontrer deux types d'adresses, l’IP et la MAC. Voyons de quoi il s’agit.
IP
L’adresse IP, Internet Protocol, représente l’adresse à l’échelle du réseau, qu’il soit global ou local. Dans le monde physique, vous possédez une adresse pour recevoir du courrier. Dans le monde de l’internet, c’est pareil. Quand des paquets de données sont échangés entre serveur et client, ces derniers possèdent une adresse pour savoir où les délivrer.
À l’échelle globale, votre connexion possède une adresse IP dite publique. C’est cette dernière qui sert à échanger avec le monde extérieur. En revanche, quand vous êtes connecté à votre box internet ou un routeur quelconque, vous possédez alors une adresse IP locale. Cette dernière est très souvent de la forme 192.168.0.xxx. C’est votre box/routeur qui servira d’aiguillage entre les paquets qui sont destinés à votre ordinateur ou votre Arduino (ou n’importe quel autre équipement sur le même réseau).
MAC
L’adresse MAC, Media Access Control, représente une adresse physique, matérielle, de votre matériel. Elle est propre à votre ordinateur/carte réseau. Elle est normalement unique à n’importe quel matériel réseau. Mais elle est aussi falsifiable, donc l’unicité ne peut être garantie globalement.
D’autres notions utiles
Ports
Comme on le voyait un peu plus tôt, différentes applications serveur peuvent fonctionner sur une même machine. MAIS, ils sont tous cachés derrière la même adresse IP. Comment donc séparer les paquets qui vont au serveur web de ceux qui vont au serveur e-mail par exemple ? Une solution pourrait être d’ajouter une information dans le paquet pour préciser l’application de destination. Et bien c’est presque ça. En effet, chaque paquet se verra attribuer un port de destination qui est celui sur lequel l’application fonctionne.
Pour imager, essayez d’imaginer la liaison Internet comme une autoroute avec de très nombreuses voies. Les paquets sont les voitures circulant sur cette autoroute. Chaque port sera alors une voie dédiée. Ainsi, le serveur web serait la voie de droite, le serveur mail celle du milieu et le serveur Arduino la voie de gauche. Et comme ça tout le monde arrive à bon port, le serveur au bout de la voie a juste à s’occuper de ses paquets et non pas ceux des autres applications !
Maintenant que les bases sont posées, nous allons pouvoir partir à l’aventure et la conquête du monde par l’Internet ! Place à la grande mode de "L’Internet des objets" !