1
Bonjour, bonjour. Moi c'est Bob ! Et c'est à toi, petit Stormtrooper que je vais tenter d'expliquer ce qu'est un Arduino, tout ce que tu peux faire avec, et quel lien il possède avec le réseau. BB-8 va aussi nous suivre. Oui mais moi, j’ai jamais fait d’électronique et en plus je connais rien en informatique ! Aucun soucis ! C’est justement le but du projet : être accessible à tous, et même aux débutants, afin que chacun soit capable de créer facilement ses propres systèmes électroniques. Je m’explique. Le concept est basé sur une carte élèctronique, l’Arduino, qui est capable de comprendre un langage de program- mation (similaire au C++). Pour faire simple, grâce à ce langage, tu vas pouvoir donner des instructions à l’Arduino pour lui demander de réaliser des actions. De façon très simple, ceci est basé sur des "si", des Ahhhh ! Donc par exemple, si je connecte un capteur sensoriel à BB-8 et qu’ensuite je connecte ce capteur à ma carte Arduino, je peux la programmer pour lui faire faire quelque chose. Donc je pourrais dire à mon Arduino : "si je touche BB-8, alors il se met en marche, sinon, il reste éteint". C’est ça ? Schéma de câblage, dit «typon» Carte électronique Arduino Uno La carte électronique est compo- sées de différentes pistes qui relient les composants entre eux grâce au schéma électronique. Si l’on veut réaliser la carte, il faudra ensuite transformer ce dernier en schéma de câblage. Une fois que tout cela est prêt, il ne reste plus qu’à programmer notre carte grâce à un langage informa- tique. Pour cela, on aura besoin du logiciel Arduino (open-source et multiplateforme), qui transformera les instructions de notre programme. Schéma électronique Arduino Uno Bon, ok, pour l’ins- tant je saisi (il y en a là dedans hein). Mais alors, comment il fait ça ce logiciel ? // définition de la broche 2 de la carte en tant que variable const int led_rouge = 2; // fonction d'initialisation de la carte void setup() { // initialisation de la broche 2 comme étant une sortie pinMode(led_rouge, OUTPUT); } void loop() { // allume la LED digitalWrite(led_rouge, LOW); // fait une pause de 1 seconde delay(1000); // éteint la LED digitalWrite(led_rouge, HIGH); // fait une pause de 1 seconde delay(1000); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Programme informatique // définition de la broche 2 de la carte en tant que variable const int led_rouge = 2; // fonction d'initialisation de la carte void setup() { // initialisation de la broche 2 comme étant une sortie pinMode(led_rouge, OUTPUT); } void loop() { // allume la LED digitalWrite(led_rouge, LOW); // fait une pause de 1 seconde delay(1000); // éteint la LED digitalWrite(led_rouge, HIGH); // fait une pause de 1 seconde delay(1000); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Langage machine 010110101111001101111 011111000010001100100 11110011011110111110 001000110010100110101 101011110011011110111 110000100011001001111 001101111011111000100 011001010011101111100 001000110010011110011 011110111110001000110 010100110101010110101 111001101111011111000 010001100100111100110 111101111100010001100 101001101011010111100 110111101111100001000 110010011110011011110 111110001000110010100 111011111000010001100 100111100110111101111 100010001100101001101 Logiciel compilateur ARDuino 1.6.7 Adapte le signal électronique pour le microcontroleur Envoi du signal via le port USB Puis il est acheminé vers le microcontrôleur 010110101111001101111 011111000010001100100 11110011011110111110 001000110010100110101 101011110011011110111 110000100011001001111 001101111011111000100 011001010011101111100 001000110010011110011 011110111110001000110 010100110101010110101 111001101111011111000 010001100100111100110 111101111100010001100 101001101011010111100 110111101111100001000 110010011110011011110 111110001000110010100 111011111000010001100 100111100110111101111 100010001100101001101 Pour faire simple, il va se charger de traduire notre langage texte, en langage "machine", afin que la carte puisse savoir comment éxecuter nos instructions. Le langage machine est un langage binaire, composé de 1 et des 0. Ce sont ces chiffres que la carte comprend et va transformer en signal électrique. Le logiciel sert simplement de compilateur et jouera en quelque sorte, le rôle d’interprête, entre nous et la carte. Je fais un petit schéma pour BB-8, il comprendra mieux ! Et voilà un peu plus bas à quoi ressemble l’interface de ce logiciel. Il est basé sur 3 éléments principaux : les éléments structurels, les variables et constantes, et enfin les fonctions. Regarde à côté, je t’ai mis un exemple de ce que tu pouvais trouver dans ce langage. BB-8 arrête de faire buguer le programme s’il te plait. Ouais c’est bien gentil ta petite carte et tes mots qui veulent rien dire, mais il est où le rapport avec le réseau là dedans ? Parce qu’à part avec un ordinateur (et peut-être BB-8), ton engin là il est pas connecté à grand chose quand même. Une fois que tout est programmé, notre Arduino est prêt à recevoir nos instructions. C’est là que tout commence. Vous pouvez alors assembler à votre carte Arduino, tous les compo- sants et shield que vous souhaitez : des moteurs, des capteurs sensoriels, des écrans LCD, des accéléromètres, potentio- mètres et autres "chos-omètres" que vous voulez. Et c’est aussi à ce moment là que vous pouvez donner libre court à votre imagination en programmant toutes sortes d’objets. Qu’il mesure votre température corporelle ou créé des sons en fonction de l’analyse de vos mouvements, vous pouvez tout faire (ou presque) avec l’Arduino. Les Strom’ on cesse ! Le réseau, on y vient. Maintenant que vous comprenez le principe de l’Arduino, on va voir qu’il existe des moyens de le connecter à internet, et ce, grâce à des «shield». Ce sont des types de cartes qui possèdent d’autres composants, et viennent se raccorder à la carte principale de l’Arduino, un peu comme des extensions par exemple. On en trouve des dizaines. Mais en ce qui concerne internet, on en dénombre seulement quatre : l’Arduino Yun, qui est la plus complète car elle offre un port Ethernet et un support WIFI, le tout conjugué à la puissance de la distribution Linux. Ensuite, l’Arduino Ethernet, le wifi ou encore le GSM shield. Mais c’est essentiellement sur "l’Arduino Ethernet Shield" que nous allons nous concentrer. Bon ça, c’était la partie tranquille de l’article. Maintenant ça se corse, on passe du côté obscur de la force. Le shield Arduino Ethernet permet à une carte Arduino de se connecter à internet en utilisant la librairie Ethernet. Avec le shield Arduino Ethernet, cette librairie permet de connecter ta carte Arduino à Internet ! C’est en quelque sorte un dictionnaire qui repertorie les mots que le shield Ethernet comprend et que tu peux donc utiliser. Grâce à ce langage, tu pourrais par exemple programmer la carte pour qu’elle soit un serveur (acceptant des connexions entrantes) ou un client (faisant des requêtes sortantes). Cette librairie suppporte jusqu'à 4 connexions simultanées (sortantes, entrantes ou une combinaison des deux). Va sur ce lien si tu veux avoir quelques infos supplémentaires sur la librairie. Attention ce site est en anglais.. Dommage ! Le travail du serveur est d’exécu- ter des opérations à la demande des "clients". Cette demande peut être une page web par exemple et on parlera alors du "serveur HTTP" qui sera chargé de répondre au client en renvoyant la page demandée. Il en existe pour de nombreux usages : web, e-mail, impression,etc. Quand nous utiliserons notre Arduino pour offrir une donnée, la carte aura une fonction de "ser- veur". On aura en quelque sorte un "Serveur Arduino". Le client est, tu l’auras compris, celui qui effectuera la demande d’informa- tions ou de services. Serveur/client Dans l’Arduino, la carte SD sert entre autre à stocker ou envoyer des données Ethernet mais encore charger des pages. On devra donc utiliser une broche comme "esclave" qui sera la cible pour déclarer au système à quel composant on s'adresse, soit l’Ethernet, soit la SD. Carte SD L'adresse MAC représente une adresse physique de ton matériel, de quelque sorte qu’il soit, tant que celui ci est connecté à un réseau. Elle est propre à chaque équipement et donc unique. adresse mac Media access control Une liaison SPI est une interface electronique entre deux appareils. Cette communication synchrone se base sur un schéma maître-esclave et est destinée au transfert des données. Ce système est en «full duplex», ce qui signifie que les don- nées peuvent être transmis dans les deux directions simultanément. Dans notre cas, l’Arduino communi- quera avec le shield Ethernet à travers le bus SPI. SPi Serial Protocol interface iP internet protocol L'adresse IP représente ton adresse à l’échelle du réseau. Tu possèdes donc une IP publique, qui est unique et visible, pour rejoindre le réseau global. Et une IP privée lorsque tu es sur ton réseau local. Ces adresses servent aux ordinateurs du réseau pour communiquer entre-eux. Les serveurs et les clients doivent posséder une adresse pour savoir où délivrer les paquets de données échangés. Concernant notre cher Arduino, c’est grâce à l’IP privée fournie par ta box que les petits paquets de données seront dirigés pour être envoyés à ton ordinateur, ou à l’Arduino ou tout autre équipement sur ton réseau. DHCP Dynamic Host configuration protocol Le DHCP, c’est un protocole réseau qui se charge automatiquement de la configuration des adresses IP d'un réseau. Il permet à un ordinateur qui se connecte sur un réseau d'obtenir dynamiquement (c'est-à-dire sans intervention particulière) sa configu- ration. Par exemple, toi BB-8 tu n’as jamais eu à te créer un adresse IP. Et bien c’est normal ! C’est le DHCP qui s’en est chargé pour toi au moment où tu t’es connecté sur le réseau la première fois. Donc quand tu fais une requête au serveur DHCP, il va te déliver un bail DHCP. Il contient une adresse IP, une durée de vie, et les paramètres du réseau. episode ii Configuration du shield Ethernet C’est quoiiiiiii une librairie Ethernet ? Mais alors en quoi ce shield Ethernet il est différent de la carte Arduino ? https://www.arduino.cc/en/Reference/Ethernet * *ce lien est un fake. Copie-colle le dans ton navigateur si tu veux y accéder. Les classes de la librairie • Classe EthernetUDP : Regroupe les fonctions pour réaliser une commu- nication UDP. begin() read() write() beginPacket() endPacket() parsePacket() available() remoteIP() remotePort() • Classe IPAddress : Représente une adresse IP. IPAddress() • Classe Ethernet : Initialise le shield, la librairie ethernet et les paramètres du réseau. begin() localIP() maintain() • Classe EthernetServer : Crée des serveurs et regroupe les fonctions pour l'utilisation du shield en tant que serveur. Server EthernetServer() begin() available() write() print() println() • Classe EthernetClient : Utilisation du shield en tant que client. Ces clients peuvent se connecter à des serveurs et envoyer ou recevoir des données. Client EthernetClient() if (EthernetClient) connected() connect() write() print() println() available() read() flush() stop() Bon maintenant que tu com- prends ce qu’est la librairie Ethernet, je vais pouvoir te montrer comment on connecte notre shield Ethernet à notre carte Arduino. Et pour ça rien de mieux qu’un tuto ! Pour commencer il te faut : Grâce à lui, on pourra entre autre piloter à distance des composants ou encore, visua- liser l'état de notre carte Arduino. Ordinateur x1 Carte Arduino x1 Shield Ethernet x1 Câble ETHERNET x1 Câble USB x1 * Le circuit intégré Wiznet W5100 supporte le proto- cole TCP/IP et 4 connexions en même temps. * TX se charge de T rans- mettre les données. RX les Reçoit. Et bien c’est simplement qu’il ne comporte pas les mêmes compo- sants. Il en possède certains qui sont spécifiques pour pouvoir le relier au réseau, comme le port ethernet ou encore le Wiznet W5100. Port Ethernet Wiznet W5100* Micro SD TX* RX* Alimentation prise jack Adresse MAC Vue de face Vue de dos A noter : il existe des versions antérieures qui ne comporteront pas les mêmes éléments. Paramétrer l’adresse IP et le masque de sous-réseau de votre ordinateur. Vous pouvez égale- ment utiliser directement le protocole DHCP afin que celui-ci vous en délivre un dynamiquement lorsque vous vous connectez au réseau. La deuxième solution est plus simple puisque vous n’avez rien à faire, si ce n’est vous connecter à votre box internet. Pour connaitre votre adresse IP ainsi que le port utilisé, vous pouvez aller sur le site : http://www.mon-ip.com. Si : if() Sinon : else if "si" (j’appuie sur le bouton 1) { "alors" réalise l’action 1 } else "sinon" { réalise action 2 } Exemple "alors" et des "sinon". Il faut savoir que ces instructions sont données en anglais, naturellement. Je vous montre un petit exemple concret. Voilà, tu as saisi ! Mais ça n’est qu’un exemple parmis tant d’autres. Avec l’Arduino, ta seule limite est ton imagination. EtAPE 1 : assembler le shield ethernet sur la carte arduino EtAPE 2 : Paramétrer l'adresse iP Maintenant, il faut relier ton Arduino à ton ordinateur. Pour cela, utilise ton câble USB. Ensuite, pour pouvoir te connecter au réseau, branche ton câble Ethernet à ton shield Ethernet d’un côté et ta box internet de l’autre. Plutôt logique non ? EtAPE 3 : Relier la carte et le shield à l’ordinateur Une fois que tout est bien relié, il te faut maintenant lancer le logiciel Arduino IDE dans lequel nous allons écrire notre programme. Pour cela, on écrira notre code dans un "sketch" et on utilisera les termes qui sont référencés dans la librairie que nous avons vu un plus haut. Je te montre maintenant le code que tu devras écrire (ou copier-coller, car on sait tous que le but des développeurs est d’en faire toujours le moins possible). EtAPE 4 : Programmer le serveur HTTP Nous allons configurer ensemble notre Arduino pour qu’il soit serveur HTTP // Ces deux librairies sont indispensables pour le shield. #include <SPI.h> // Communication SPI avec le Shield éthernet. #include <Ethernet.h> // Communication éthernet sur réseau local. // Recopie l’adresse MAC de ton shield Ethernet ou affecte en une aléatoire. byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E }; // On affecte l’adresse IP au shield Ethernet. Rentre ton adresse IP ici. IPAddress ip(192,168,0,143); // On initialise notre serveur sur le port 80* EthernetServer serveur(80); void setup() { char erreur = 0; // On lance la connexion Ethernet avec l'adresse MAC et mais SANS l’adresse IP (qui sera donné par le DHCP). erreur = Ethernet.begin(mac); if (erreur == 0) { // Si une erreur a eu lieu, cela signifie que l'attribution DHCP ne fonctionne pas. On initialise donc en forçant l’adresse IP affecté. Ethernet.begin(mac, ip); } // Donne une seconde au shield pour s'initialiser delay(1000); // On lance le serveur HTTP serveurHTTP.begin(); } void loop() void loop() 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 * Le port 80 est le port utilisé par le protocole HTTP par le biais d'un navigateur web. Donc si je comprend bien, une fois que j’ai initialisé mon Arduino en tant que serveur HTTP, j’ai plus qu’à rajouter quelques lignes d’instructions dans et après mon "void loop()" pour demander à mon Arduino de faire ce que je lui demande, depuis n’importe quel navigateur et depuis n’importe quel ordinateur ou smartphone, c’est bien ça ? C’est quoiiiiiii le NAT ? Ce n’est pas aussi simple. Grâce au tuto de Chewbacca, on peut accéder au réseau mais seulement local. C’est à dire depuis un appareil qui est connecté à ton réseau local, donc pour ton cas, à ta box internet. En fait, le problème c'est que ta box laisse passer le trafic vers l’extérieur et accepte les réponses, mais n’accepte pas trop qu'on accède directement à son adresse sur n'importe quel port. C'est logique car si tu as plusieurs équipe- ments connectés à ta box, pour accéder à l’un d’entre eux depuis l’exté- rieur, la box ne saura pas à quel matériel te renvoyer. Dans ton réseau local, chaque appareil à sa propre adresse IP qui le repré- sente localement. Par exemple, ton téléphone pourrait avoir une adresse IP en 192.168.0.142, ton ordinateur en 192.168.0.158 et ton Arduino en 192.168.0.199. Ta box, elle, possède une IP publique. C'est cette IP qui la représente sur le réseau extérieur et non plus local. Admettons, par exemple, que ton IP publique soit 42.128.12.13. Si tu cherches à accéder à l'adresse publique en espérant atteindre ton Arduino, cela ne fonctionne- ra pas. En effet, tu atteindras bien la box, mais celle-ci ne saura pas quel équipement elle doit interroger ! Il va donc falloir lui expliquer… Et ceci, grâce au NAT. Juste au dessus, je t’ai mis un exemple d’interface d’administration de NAT d’un fournisseur d’accès (FAI), dans mon cas : Orange. Le NAT est un mécanisme de translation d’adresse ou de redirection de port. Il permet notamment de faire correspondre une seule adresse publique (visible sur Internet) à toutes les adresses d'un réseau privé (visible sur le réseau local). Grâce à cela, nous allons pouvoir rediriger le trafic qui arrive sur notre adresse publique, sur l’équipement que nous cherchons à atteindre, dans notre cas, l’Arduino. Je ne te montre pas de démonstration plus pousser car je sens que je vais te perde, or j’ai encore quelques petites choses à te montrer. Si bien sur, j’y viens ! Tu pourrais par exemple, faire une recherche Google grâce à ton shield et ton Arduino. Pour cela, il te suffirait de rajouter la classe IPAddress server avec en paramètre, l’IP du site que tu veux visiter, soit dans notre cas Google (ayant pour IP 173,194,67,147 en ce moment). Tu écrirais donc IPAddress server(173,194,67,147); pour dire à ton Arduino d’effectuer la requête sur le site ayant pour IP celle qu’il y a entre les parenthèses (le paramètre). Une fois que ton Arduino sait sur quel site il doit aller, tu pourrais lui dire de chercher "yoda" sur Google. Pour cela, il te faudrait rajouter une requête GET : client.println("GET /search?q=yoda HTTP/1.0"); Bon ok, il y aurait quelques lignes en plus, mais sur le principe c’est ça. Ce dernier point est reservé à ceux qui veulent aller un peu plus loin, à savoir, les problèmes de sécurité réseau. En effet, dès que vous vous connectez sur le réseau, vous savez tous que votre système, s’il possède des failles, peut se faire hacker. En effet, lorsqu’on se fait hacker, celui qui réussi à rentrer dans votre système, par le réseau, peut s’il le veut, accéder à vos données et même les modifier. Imaginez si Dark Vador hackait BB-8. Plus besoin de vous envoyer vous, petits Stromtroopers, vous battre pour récupérer la carte qui contient les coordon- nées géographiques de la position de Anakin dans la galaxie. Il n’aurait qu’à rester tranquillement assis dernière son ordinateur et simplement lire les données récoltés. Plus pratique non ? Et bien pour l’Arduino, c’est pareil. D’autant plus que, comparé à un système normal, celui ci peut contenir des données sensibles et confidentielles. Imagi- nons que vous programmez votre Arduino un peu comme une montre connec- tée. Dans ces cas là, vous allez stocker des données qui vous concernent physiquement : votre activité, rythme cardiaque ou bien votre température corporelle. Et ces informations, si elles étaient accessibles, pourraient être bien utiles à des personnes malveillantes ou même servir des intérêts écono- miques par exemple (pensez aux assurances qui se feraient une joie de calcu- ler le prix de votre complémentaire santé en fonction des données physiques qu’elles récolteraient directement à la source : sur vous). Plus dangeureux encore, imaginons que l’on programme notre Arduino pour ouvrir notre porte de garage qui est élèctrique, et cela, simplement en rentrant une commande depuis le navigateur de votre smartphone. Quelqu’un crack votre programme et n’a plus qu’à rentrer chez vous. Vous voyez maintenant pourquoi les personnes qui travaillent en sécurité informatique (cc Mr Chamak) sont com- plètement paranos. Car il existe des risques réels dont on a parfois pas conscience. En plus de cela, lorsqu’on utilise notre Arduino sur le réseau extérieur et non plus en local, on indique à notre ordinateur d’ouvrir un port que l’on a défini. Or, il existe des logiciels qui permettent de scanner les ports ouverts sur les adresses IP, afin de s’y introduire. Vous laissez votre porte ouverte, il ne faudra pas s’étonner si quelqu’un essaye de rentrer chez vous, surtout si facilement. Vous pouvez vérifier si un de vos port est ouvert sur ce site par exemple : http://www.yougetsignal.com/tools/open-ports/ Enfin, l’Arduino possède d’autres problèmes de sécurité du fait que ce soit un élément physique. Je m’explique : vous programmez un Arduino pour que lorsque vous touchez un objet auquel il est relié, celui ci envoit à votre porte élèctrique de garage un signal qui lui ordonne de s’ouvrir. Si quelqu’un trouve cette objet, il n’a qu’à récupérer l’Arduino qu’il y a dedans, le connecter à son ordinateur et lui envoyer un autre programme qui lui indique de faire le contraire. Dans ces cas là, votre garage sera ouvert tout le temps et ne se fermera que lorsque vous toucherez l’objet. Bref, ceci n’est qu’un exemple et je n’ai pas encore suffisamment de force obscure en moi pour passer du côté des hackers malveillants et trouver des moyens de détourner les Arduino, mais faites un tour du côté de notre ami Tor, et son cousin le Darknet, vous devriez y trouver votre bonheur. Cet article est maintenant terminé, j’espère qu’il t’aura donner envie de te mettre à l’Arduino et que la force soit avec toi, petit Stromtrooper. NAT Network Adress translation Ok je commence à comprendre. Mais tu n’aurais pas d’autres exemples un peu plus concrets de l’utilisation du shield Ethernet avec l’Arduino ? advance level : vitesse lumière activée the end

Arduino

Embed Size (px)

Citation preview

Bonjour, bonjour. Moi c'est Bob ! Et c'est à toi, petit Stormtrooper que je vais tenter d'expliquer ce qu'est un Arduino, tout ce que tu peux faire avec, et quel lien il possède avec le réseau. BB-8 va aussi nous suivre.

Oui mais moi, j’ai jamais fait d’électronique et en plus je connais rien en informatique !

Aucun soucis ! C’est justement le but du projet : être accessible à tous, et même aux débutants, afin que chacun soit capable de créer facilement ses propres systèmes électroniques. Je m’explique. Le concept est basé sur une carte élèctronique, l’Arduino, qui est capable de comprendre un langage de program-mation (similaire au C++). Pour faire simple, grâce à ce langage, tu vas pouvoir donner des instructions à l’Arduino pour lui demander de réaliser des actions. De façon très simple, ceci est basé sur des "si", des

Ahhhh ! Donc par exemple, si je connecte un capteur sensoriel à BB-8 et qu’ensuite je connecte ce capteur à ma carte Arduino, je peux la programmer pour lui faire faire quelque chose. Donc je pourrais dire à mon Arduino : "si je touche BB-8, alors il se met en marche, sinon, il reste éteint". C’est ça ?

Schéma de câblage, dit «typon»

Carte électronique Arduino Uno

La carte électronique est compo-sées de différentes pistes qui relient les composants entre eux grâce au schéma électronique. Si l’on veut réaliser la carte, il faudra ensuite transformer ce dernier en schéma de câblage.Une fois que tout cela est prêt, il ne reste plus qu’à programmer notre carte grâce à un langage informa-tique. Pour cela, on aura besoin du logiciel Arduino (open-source et multiplateforme), qui transformera les instructions de notre programme.

Schéma électronique Arduino Uno

Bon, ok, pour l’ins-tant je saisi (il y en a là dedans hein).Mais alors, comment il fait ça ce logiciel ?

// définition de la broche 2 de la carte en tant que variableconst int led_rouge = 2;

// fonction d'initialisation de la cartevoid setup(){ // initialisation de la broche 2 comme étant une sortie pinMode(led_rouge, OUTPUT);}

void loop(){ // allume la LED digitalWrite(led_rouge, LOW); // fait une pause de 1 seconde delay(1000); // éteint la LED digitalWrite(led_rouge, HIGH); // fait une pause de 1 seconde delay(1000);}

123456789101112131415161718192021

Programme informatique

// définition de la broche 2 de la carte en tant que variableconst int led_rouge = 2;

// fonction d'initialisation de la cartevoid setup(){ // initialisation de la broche 2 comme étant une sortie pinMode(led_rouge, OUTPUT);}

void loop(){ // allume la LED digitalWrite(led_rouge, LOW); // fait une pause de 1 seconde delay(1000); // éteint la LED digitalWrite(led_rouge, HIGH); // fait une pause de 1 seconde delay(1000);}

123456789101112131415161718192021

Langagemachine

01011010111100110111101111100001000110010011110011011110111110 001000110010100110101101011110011011110111110000100011001001111001101111011111000100011001010011101111100001000110010011110011011110111110001000110010100110101010110101111001101111011111000010001100100111100110111101111100010001100101001101011010111100110111101111100001000110010011110011011110111110001000110010100111011111000010001100100111100110111101111100010001100101001101

Logicielcompilateur

ARDuino 1.6.7

Adapte le signal électronique pour le

microcontroleur

Envoi du signal via le port USB

Puis il est acheminé vers le microcontrôleur

01011010111100110111101111100001000110010011110011011110111110 001000110010100110101101011110011011110111110000100011001001111001101111011111000100011001010011101111100001000110010011110011011110111110001000110010100110101010110101111001101111011111000010001100100111100110111101111100010001100101001101011010111100110111101111100001000110010011110011011110111110001000110010100111011111000010001100100111100110111101111100010001100101001101

Pour faire simple, il va se charger de traduire notre langage texte, en langage "machine", afin que la carte puisse savoir comment éxecuter nos instructions. Le langage machine est un langage binaire, composé de 1 et des 0. Ce sont ces chiffres que la carte comprend et va transformer en signal électrique. Le logiciel sert simplement de compilateur et jouera en quelque sorte, le rôle d’interprête, entre nous et la carte. Je fais un petit schéma pour BB-8, il comprendra mieux !

Et voilà un peu plus bas à quoi ressemble l’interface de ce logiciel. Il est basé sur 3 éléments principaux : les éléments structurels, les variables et constantes, et enfin les fonctions. Regarde à côté, je t’ai mis un exemple de ce que tu pouvais trouver dans ce langage.

BB-8 arrête de faire buguer le programme s’il te plait.

Ouais c’est bien gentil ta petite carte et tes mots qui veulent rien dire, mais il est où le rapport avec le réseau là dedans ? Parce qu’à part avec un ordinateur (et peut-être BB-8), ton engin là il est pas connecté à grand chose quand même.

Une fois que tout est programmé, notre Arduino est prêt à recevoir nos instructions. C’est là que tout commence. Vous pouvez alors assembler à votre carte Arduino, tous les compo-sants et shield que vous souhaitez : des moteurs, des capteurs sensoriels, des écrans LCD, des accéléromètres, potentio-mètres et autres "chos-omètres" que vous voulez. Et c’est aussi à ce moment là que vous pouvez donner libre court à votre imagination en programmant toutes sortes d’objets. Qu’il mesure votre température corporelle ou créé des sons en fonction de l’analyse de vos mouvements, vous pouvez tout faire (ou presque) avec l’Arduino.

Les Strom’ on cesse ! Le réseau, on y vient. Maintenant que vous comprenez le principe de l’Arduino, on va voir qu’il existe des moyens de le connecter à internet, et ce, grâce à des «shield». Ce sont des types de cartes qui possèdent d’autres composants, et viennent se raccorder à la carte principale de l’Arduino, un peu comme des extensions par exemple. On en trouve des dizaines. Mais en ce qui concerne internet, on en dénombre seulement quatre : l’Arduino Yun, qui est la plus complète car elle offre un port Ethernet et un support WIFI, le tout conjugué à la puissance de la distribution Linux. Ensuite, l’Arduino Ethernet, le wifi ou encore le GSM shield. Mais c’est essentiellement sur "l’Arduino Ethernet Shield" que nous allons nous concentrer.

Bon ça, c’était la partie tranquille de l’article. Maintenant ça se corse, on passe du côté obscur de la force.

Le shield Arduino Ethernet permet à une carte Arduino de se connecter à internet en utilisant la librairie Ethernet.

Avec le shield Arduino Ethernet, cette librairie permet de connecter ta carte Arduino à Internet ! C’est en quelque sorte un dictionnaire qui repertorie les mots que le shield Ethernet comprend et que tu peux donc utiliser. Grâce à ce langage, tu pourrais par exemple programmer la carte pour qu’elle soit un serveur (acceptant des connexions entrantes) ou un client (faisant des requêtes sortantes). Cette librairie suppporte jusqu'à 4 connexions simultanées (sortantes, entrantes ou une combinaison des deux).

Va sur ce lien si tu veux avoir quelques infos supplémentaires sur la librairie. Attention ce site

est en anglais.. Dommage !

Le travail du serveur est d’exécu-ter des opérations à la demande des "clients". Cette demande peut être une page web par exemple et on parlera alors du "serveur HTTP" qui sera chargé de répondre au client en renvoyant la page demandée. Il en existe pour de nombreux usages : web, e-mail, impression,etc. Quand nous utiliserons notre Arduino pour offrir une donnée, la carte aura une fonction de "ser-veur". On aura en quelque sorte un "Serveur Arduino". Le client est, tu l’auras compris, celui qui effectuera la demande d’informa-tions ou de services.

Serveur/client

Dans l’Arduino, la carte SD sert entre autre à stocker ou envoyer des données Ethernet mais encore charger des pages. On devra donc utiliser une broche comme "esclave" qui sera la cible pour déclarer au système à quel composant on s'adresse, soit l’Ethernet, soit la SD.

Carte SD

L'adresse MAC représente une adresse physique de ton matériel, de quelque sorte qu’il soit, tant que celui ci est connecté à un réseau. Elle est propre à chaque équipement et donc unique.

adresse macMedia access

control

Une liaison SPI est une interface electronique entre deux appareils. Cette communication synchrone se base sur un schéma maître-esclave et est destinée au transfert des données. Ce système est en «full duplex», ce qui signifie que les don-nées peuvent être transmis dans les deux directions simultanément. Dans notre cas, l’Arduino communi-quera avec le shield Ethernet à travers le bus SPI.

SPiSerial Protocol interface

iP internet protocol

L'adresse IP représente ton adresse à l’échelle du réseau. Tu possèdes donc une IP publique, qui est unique et visible, pour rejoindre le réseau global. Et une IP privée lorsque tu es sur ton réseau local. Ces adresses servent aux ordinateurs du réseau pour communiquer entre-eux.Les serveurs et les clients doivent posséder une adresse pour savoir où délivrer les paquets de données échangés.Concernant notre cher Arduino, c’est grâce à l’IP privée fournie par ta box que les petits paquets de données seront dirigés pour être envoyés à ton ordinateur, ou à l’Arduino ou tout autre équipement sur ton réseau.

DHCPDynamic Host

configuration protocol

Le DHCP, c’est un protocole réseau qui se charge automatiquement de la configuration des adresses IP d'un réseau. Il permet à un ordinateur qui se connecte sur un réseau d'obtenir dynamiquement (c'est-à-dire sans intervention particulière) sa configu-ration. Par exemple, toi BB-8 tu n’as jamais eu à te créer un adresse IP. Et bien c’est normal ! C’est le DHCP qui s’en est chargé pour toi au moment où tu t’es connecté sur le réseau la première fois. Donc quand tu fais une requête au serveur DHCP, il va te déliver un bail DHCP. Il contient une adresse IP, une durée de vie, et les paramètres du réseau.

episode iiConfiguration du shield Ethernet

C’est quoiiiiiii une librairie Ethernet ?

Mais alors en quoi ce shield Ethernet il est différent de la carte Arduino ?

https://www.arduino.cc/en/Reference/Ethernet**ce lien est un fake. Copie-colle le dans ton navigateur si tu veux y accéder.

Les classes de la librairie

• Classe EthernetUDP :

Regroupe les fonctions pour réaliser une commu-nication UDP.

begin()read()write()beginPacket()endPacket()parsePacket()available()remoteIP()remotePort()

• Classe IPAddress :

Représente une adresse IP.

IPAddress()

• Classe Ethernet :

Initialise le shield, la librairie ethernet et les paramètres du réseau.

begin()localIP()maintain()

• Classe EthernetServer :

Crée des serveurs et regroupe les fonctions pour l'utilisation du shield en tant que serveur.

ServerEthernetServer()begin()available()write()print()println()

• Classe EthernetClient :

Utilisation du shield en tant que client. Ces clients peuvent se connecter à des serveurs et envoyer ou recevoir des données.

ClientEthernetClient()if (EthernetClient)connected()connect()write()

print()println()available()read()flush()stop()

Bon maintenant que tu com-prends ce qu’est la librairie Ethernet, je vais pouvoir te montrer comment on connecte notre shield Ethernet à notre carte Arduino.

Et pour ça rien de mieux qu’un tuto !

Pour commencer il te faut :

Grâce à lui, on pourra entre autre piloter à distance des composants ou encore, visua-liser l'état de notre carte Arduino.

Ordinateur x1

Carte Arduino x1

Shield Ethernet x1

Câble ETHERNET x1

Câble USB x1

* Le circuit intégré Wiznet W5100 supporte le proto-cole TCP/IP et 4 connexions en même temps.

* TX se charge de Trans-mettre les données.RX les Reçoit.

Et bien c’est simplement qu’il ne comporte pas les mêmes compo-sants. Il en possède certains qui sont spécifiques pour pouvoir le relier au réseau, comme le port ethernet ou encore le Wiznet W5100.

Port Ethernet

Wiznet W5100*

Micro SD

TX*RX*

Alimentation prise jack

Adresse MAC

Vue de face Vue de dos

A noter : il existe des versions antérieures qui ne comporteront pas les mêmes éléments.

Paramétrer l’adresse IP et le masque de sous-réseau de votre ordinateur. Vous pouvez égale-ment utiliser directement le protocole DHCP afin que celui-ci vous en délivre un dynamiquement lorsque vous vous connectez au réseau. La deuxième solution est plus simple puisque vous n’avez rien à faire, si ce n’est vous connecter à votre box internet.

Pour connaitre votre adresse IP ainsi que le port utilisé, vous pouvez aller sur le site :http://www.mon-ip.com.

Si : if()Sinon : else

if "si" (j’appuie sur le bouton 1){ "alors" réalise l’action 1}else "sinon"{ réalise action 2}

Exemple"alors" et des "sinon". Il faut savoir que ces instructions sont données en anglais, naturellement. Je vous montre un petit exemple concret.

Voilà, tu as saisi ! Mais ça n’est qu’un exemple parmis tant d’autres. Avec l’Arduino, ta seule limite est ton imagination.

EtAPE 1 : assembler le shield ethernet sur la carte arduino

EtAPE 2 : Paramétrer l'adresse iP

Maintenant, il faut relier ton Arduino à ton ordinateur. Pour cela, utilise ton câble USB. Ensuite, pour pouvoir te connecter au réseau, branche ton câble Ethernet à ton shield Ethernet d’un côté et ta box internet de l’autre.Plutôt logique non ?

EtAPE 3 : Relier la carte et le shield à l’ordinateur

Une fois que tout est bien relié, il te faut maintenant lancer le logiciel Arduino IDE dans lequel nous allons écrire notre programme. Pour cela, on écrira notre code dans un "sketch" et on utilisera les termes qui sont référencés dans la librairie que nous avons vu un plus haut. Je te montre maintenant le code que tu devras écrire (ou copier-coller, car on sait tous que le but des développeurs est d’en faire toujours le moins possible).

EtAPE 4 : Programmer le serveur HTTP

Nous allons configurer ensemble notre Arduino pour qu’il soit serveur HTTP

// Ces deux librairies sont indispensables pour le shield.#include <SPI.h> // Communication SPI avec le Shield éthernet.#include <Ethernet.h> // Communication éthernet sur réseau local.

// Recopie l’adresse MAC de ton shield Ethernet ou affecte en une aléatoire.byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E };// On affecte l’adresse IP au shield Ethernet. Rentre ton adresse IP ici.IPAddress ip(192,168,0,143);

// On initialise notre serveur sur le port 80*EthernetServer serveur(80);

void setup(){

char erreur = 0; // On lance la connexion Ethernet avec l'adresse MAC et mais SANS l’adresse IP (qui sera donné par le DHCP). erreur = Ethernet.begin(mac);

if (erreur == 0) { // Si une erreur a eu lieu, cela signifie que l'attribution DHCP ne fonctionne pas. On initialise donc en forçant l’adresse IP affecté. Ethernet.begin(mac, ip); }

// Donne une seconde au shield pour s'initialiser delay(1000); // On lance le serveur HTTP serveurHTTP.begin();}

void loop()

void loop()

12345678910111213141516171819202122232425262728293031323334

* Le port 80 est le port utilisé par le protocole HTTP par le biais d'un navigateur web.

Donc si je comprend bien, une fois que j’ai initialisé mon Arduino en tant que serveur HTTP, j’ai plus qu’à rajouter quelques lignes d’instructions dans et après mon "void loop()" pour demander à mon Arduino de faire ce que je lui demande, depuis n’importe quel navigateur et depuis n’importe quel ordinateur ou smartphone, c’est bien ça ?

C’est quoiiiiiii le NAT ?

Ce n’est pas aussi simple. Grâce au tuto de Chewbacca, on peut accéder au réseau mais seulement local. C’est à dire depuis un appareil qui est connecté à ton réseau local, donc pour ton cas, à ta box internet. En fait, le problème c'est que ta box laisse passer le trafic vers l’extérieur et accepte les réponses, mais n’accepte pas trop qu'on accède directement à son adresse sur n'importe quel port. C'est logique car si tu as plusieurs équipe-ments connectés à ta box, pour accéder à l’un d’entre eux depuis l’exté-rieur, la box ne saura pas à quel matériel te renvoyer.

Dans ton réseau local, chaque appareil à sa propre adresse IP qui le repré-sente localement. Par exemple, ton téléphone pourrait avoir une adresse IP en 192.168.0.142, ton ordinateur en 192.168.0.158 et ton Arduino en 192.168.0.199. Ta box, elle, possède une IP publique. C'est cette IP qui la représente sur le réseau extérieur et non plus local. Admettons, par exemple, que ton IP publique soit 42.128.12.13. Si tu cherches à accéder à l'adresse publique en espérant atteindre ton Arduino, cela ne fonctionne-ra pas. En effet, tu atteindras bien la box, mais celle-ci ne saura pas quel équipement elle doit interroger ! Il va donc falloir lui expliquer… Et ceci, grâce au NAT.

Juste au dessus, je t’ai mis un exemple d’interface d’administration de NAT d’un fournisseur d’accès (FAI), dans mon cas : Orange. Le NAT est un mécanisme de translation d’adresse ou de redirection de port. Il permet notamment de faire correspondre une seule adresse publique (visible sur Internet) à toutes les adresses d'un réseau privé (visible sur le réseau local). Grâce à cela, nous allons pouvoir rediriger le trafic qui arrive sur notre adresse publique, sur l’équipement que nous cherchons à atteindre, dans notre cas, l’Arduino. Je ne te montre pas de démonstration plus pousser car je sens que je vais te perde, or j’ai encore quelques petites choses à te montrer.

Si bien sur, j’y viens ! Tu pourrais par exemple, faire une recherche Google grâce à ton shield et ton Arduino. Pour cela, il te suffirait de rajouter la classe IPAddress server avec en paramètre, l’IP du site que tu veux visiter, soit dans notre cas Google (ayant pour IP 173,194,67,147 en ce moment). Tu écrirais donc IPAddress server(173,194,67,147); pour dire à ton Arduino d’effectuer la requête sur le site ayant pour IP celle qu’il y a entre les parenthèses (le paramètre). Une fois que ton Arduino sait sur quel site il doit aller, tu pourrais lui dire de chercher "yoda" sur Google. Pour cela, il te faudrait rajouter une requête GET :client.println("GET /search?q=yoda HTTP/1.0");Bon ok, il y aurait quelques lignes en plus, mais sur le principe c’est ça.

Ce dernier point est reservé à ceux qui veulent aller un peu plus loin, à savoir, les problèmes de sécurité réseau. En effet, dès que vous vous connectez sur le réseau, vous savez tous que votre système, s’il possède des failles, peut se faire hacker. En effet, lorsqu’on se fait hacker, celui qui réussi à rentrer dans votre système, par le réseau, peut s’il le veut, accéder à vos données et même les modifier. Imaginez si Dark Vador hackait BB-8. Plus besoin de vous envoyer vous, petits Stromtroopers, vous battre pour récupérer la carte qui contient les coordon-nées géographiques de la position de Anakin dans la galaxie. Il n’aurait qu’à rester tranquillement assis dernière son ordinateur et simplement lire les données récoltés. Plus pratique non ? Et bien pour l’Arduino, c’est pareil. D’autant plus que, comparé à un système normal, celui ci peut contenir des données sensibles et confidentielles. Imagi-nons que vous programmez votre Arduino un peu comme une montre connec-tée. Dans ces cas là, vous allez stocker des données qui vous concernent physiquement : votre activité, rythme cardiaque ou bien votre température corporelle. Et ces informations, si elles étaient accessibles, pourraient être bien utiles à des personnes malveillantes ou même servir des intérêts écono-miques par exemple (pensez aux assurances qui se feraient une joie de calcu-ler le prix de votre complémentaire santé en fonction des données physiques qu’elles récolteraient directement à la source : sur vous). Plus dangeureux encore, imaginons que l’on programme notre Arduino pour ouvrir notre porte de garage qui est élèctrique, et cela, simplement en rentrant une commande depuis le navigateur de votre smartphone. Quelqu’un crack votre programme et n’a plus qu’à rentrer chez vous. Vous voyez maintenant pourquoi les personnes qui travaillent en sécurité informatique (cc Mr Chamak) sont com-plètement paranos. Car il existe des risques réels dont on a parfois pas conscience. En plus de cela, lorsqu’on utilise notre Arduino sur le réseau extérieur et non plus en local, on indique à notre ordinateur d’ouvrir un port que l’on a défini. Or, il existe des logiciels qui permettent de scanner les ports ouverts sur les adresses IP, afin de s’y introduire. Vous laissez votre porte ouverte, il ne faudra pas s’étonner si quelqu’un essaye de rentrer chez vous, surtout si facilement. Vous pouvez vérifier si un de vos port est ouvert sur ce site par exemple : http://www.yougetsignal.com/tools/open-ports/

Enfin, l’Arduino possède d’autres problèmes de sécurité du fait que ce soit un élément physique. Je m’explique : vous programmez un Arduino pour que lorsque vous touchez un objet auquel il est relié, celui ci envoit à votre porte élèctrique de garage un signal qui lui ordonne de s’ouvrir. Si quelqu’un trouve cette objet, il n’a qu’à récupérer l’Arduino qu’il y a dedans, le connecter à son ordinateur et lui envoyer un autre programme qui lui indique de faire le contraire. Dans ces cas là, votre garage sera ouvert tout le temps et ne se fermera que lorsque vous toucherez l’objet.Bref, ceci n’est qu’un exemple et je n’ai pas encore suffisamment de force obscure en moi pour passer du côté des hackers malveillants et trouver des moyens de détourner les Arduino, mais faites un tour du côté de notre ami Tor, et son cousin le Darknet, vous devriez y trouver votre bonheur.

Cet article est maintenant terminé, j’espère qu’il t’aura donner envie de te mettre à l’Arduino et que la force soit avec toi, petit Stromtrooper.

NATNetwork Adress translation

Ok je commence à comprendre. Mais tu n’aurais pas d’autres exemples un peu plus concrets de l’utilisation du shield Ethernet avec l’Arduino ?

advance level : vitesse lumière activée

the end