Tutoriel Arduino Ethernet Shield

Le blindage Ethernet Arduino vous permet de connecter facilement votre Arduino à Internet. Ce bouclier permet à votre Arduino d'envoyer et de recevoir des données de n'importe où dans le monde avec une connexion Internet. Vous pouvez l'utiliser pour faire des choses amusantes comme des robots de contrôle à distance à partir d'un site Web ou sonner à chaque fois que vous recevez un nouveau message Twitter. Ce bouclier ouvre des possibilités infinies en vous permettant de connecter votre projet à Internet en un rien de temps.

Étape 1: configuration

La configuration est aussi simple que de brancher les broches d'en-tête du blindage sur votre Arduino.

Notez que le bouclier Ethernet utilisé ici était vendu chez RadioShack. Cependant, comme RadioShack n'est plus, le bouclier est plus difficile à trouver. Ce bouclier Ethernet générique disponible sur Amazon devrait également fonctionner. * Il est destiné à être utilisé avec les cartes Arduino Uno Rev. 3 (ou ultérieures). Il a trop de broches pour se connecter aux cartes Arduino de la version précédente.

* Je n'ai pas personnellement confirmé cela. Acheteur, méfiez-vous!

Étape 2: Caractéristiques du bouclier

Le bouclier Ethernet est basé sur la puce W51000, qui a un tampon interne de 16K. Il a une vitesse de connexion allant jusqu'à 10 / 100Mb. Ce n'est pas la connexion la plus rapide, mais ce n'est pas non plus la raison pour laquelle vous devez vous taire.

Il s'appuie sur la bibliothèque Arduino Ethernet, fournie avec l'environnement de développement.

Il y a aussi un slot micro SD intégré qui vous permet de stocker un tas de données et de servir des sites Web entiers en utilisant uniquement votre Arduino. Cela nécessite l'utilisation d'une bibliothèque SD externe, qui n'est pas fournie avec le logiciel. L'utilisation de la carte SD n'est pas couverte dans cet Instructable. Cependant, il est couvert à l'étape 8 de la carte SD sans fil pouvant être commandée.

La carte dispose également d'un espace pour l'ajout d'un module Power over Ethernet (PoE), qui vous permet d'alimenter votre Arduino via une connexion Ethernet.

Pour un aperçu technique complet, consultez la page officielle Ethernet Shield.

Étape 3: Commencez

Branchez l'Arduino sur le port USB de votre ordinateur et le blindage Ethernet sur votre routeur (ou connexion Internet directe).

Ensuite, ouvrez l'environnement de développement Arduino. Je recommande fortement la mise à niveau vers Arduino 1.0 ou version ultérieure (si vous ne l'avez pas déjà fait). Cette version du logiciel intègre la prise en charge DHCP et ne nécessite pas de configuration manuelle d'une adresse IP.

Pour savoir quelle adresse IP a été attribuée à votre carte, ouvrez l'esquisse DhcpAddressPrinter. Vous pouvez le trouver sur:

Fichier -> Exemples -> Ethernet -> DhcpAddressPrinter

Une fois ouvert, vous devrez peut-être modifier l'adresse Mac. Sur les versions plus récentes du blindage Ethernet, vous devriez voir cette adresse sur un autocollant attaché à la carte. Si vous manquez un autocollant, la simple création d'une adresse mac unique devrait fonctionner. Si vous utilisez plusieurs boucliers, assurez-vous que chacun a une adresse mac unique.

Une fois que l'adresse mac est correctement configurée, téléchargez l'esquisse sur votre Arduino et ouvrez le moniteur série. Il devrait imprimer l'adresse IP utilisée.

Étape 4: serveur

Vous pouvez utiliser le blindage Ethernet Arduino comme serveur Web pour charger une page HTML ou fonctionner comme un serveur de chat. Vous pouvez également analyser les demandes envoyées par un client, tel qu'un navigateur Web. Les deux exemples suivants montrent comment l'utiliser pour servir des pages HTML et analyser des chaînes URL.

Une chose importante à garder à l'esprit est que vous devrez entrer l'adresse IP de votre Arduino dans les deux exemples ci-dessous pour qu'ils fonctionnent.

Le code suivant modifie la page Web servie en appuyant sur un bouton:
 / * Démonstration de serveur Web réunie par Randy Sarafan Un simple serveur Web qui modifie la page qui est servie, déclenché par une pression sur un bouton. Circuit: * Blindage Ethernet attaché aux broches 10, 11, 12, 13 * Connecter un bouton entre les broches D2 et 5V * Connecter une résistance 10K entre la broche D2 et la masse Basé presque entièrement sur le serveur Web par Tom Igoe et David Mellis Historique de modification: créé 18 décembre 2009 par David A. Mellis modifié le 4 septembre 2010 par Tom Igoe * / #include #include // Entrez une adresse MAC et une adresse IP pour votre contrôleur ci-dessous. // L'adresse IP dépendra de votre réseau local: octet mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< ENTREZ VOTRE ADRESSE IP ICI !!! // Initialisez la bibliothèque du serveur Ethernet // avec l'adresse IP et le port que vous souhaitez utiliser // (le port 80 est par défaut pour HTTP): EthernetServer server (80); int buttonPress = 1; void setup () {pinMode (2, INPUT); // démarre la connexion Ethernet et le serveur: Ethernet.begin (mac, ip); server.begin (); } boucle vide () {buttonPress = digitalRead (2); // écoute les clients entrants Client EthernetClient = server.available (); if (client) {// une requête http se termine par une ligne vierge boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // si vous êtes arrivé à la fin de la ligne (reçu un caractère // de nouvelle ligne) et que la ligne est vide, la requête http est terminée, // vous pouvez donc envoyer une réponse si (c == '\ n' && currentLineIsBlank) {// envoyer un en-tête de réponse http standard client.println ("HTTP / 1.1 200 OK"); client.println ("Content-Type: text / html"); client.println (); // sert une version différente d'un site Web selon que le bouton // connecté à la broche 2 est enfoncé ou non. if (buttonPress == 1) {client.println ("LIGHT!"); } else if (buttonPress == 0) {client.println ("DARK!"); } Pause; } if (c == '\ n') {// vous commencez une nouvelle ligne currentLineIsBlank = true; } else if (c! = '\ r') {// vous avez obtenu un caractère sur la ligne courante currentLineIsBlank = false; }}} // donne au navigateur Web le temps de recevoir le délai des données (1); // ferme la connexion: client.stop (); }} 

Pour que cet exemple de code fonctionne, il suffit de fixer un bouton entre les broches D2 et 5V, une résistance 10K entre la broche D2 et la masse, puis de charger l'adresse IP de votre Arduino dans votre navigateur Web. La page doit se charger avec un fond noir. Appuyez sur le bouton et maintenez-le enfoncé, puis actualisez la page du navigateur. Le site devrait maintenant se charger avec un fond blanc.


Le code suivant allume une LED en fonction de l'URL envoyée à l'Arduino:
 / * Démonstration de serveur Web réunie par Randy Sarafan Vous permet d'allumer et d'éteindre une LED en entrant différentes URL. Pour l'allumer: // votre-adresse-IP / $ 1 Pour l'éteindre: // votre-adresse-IP / $ 2 Circuit: * Blindage Ethernet fixé aux broches 10, 11, 12, 13 * Connectez une LED à la broche D2 et le mettre en série avec une résistance de 220 ohms à la terre Basé presque entièrement sur Web Server par Tom Igoe et David Mellis Modifier l'historique: créé le 18 décembre 2009 par David A. Mellis modifié le 4 septembre 2010 par Tom Igoe * / #include #include boolean entrant = 0; // Entrez une adresse MAC et une adresse IP pour votre contrôleur ci-dessous. // L'adresse IP dépendra de votre réseau local: octet mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< ENTREZ VOTRE ADRESSE IP ICI !!! // Initialisez la bibliothèque du serveur Ethernet // avec l'adresse IP et le port que vous souhaitez utiliser // (le port 80 est par défaut pour HTTP): EthernetServer server (80); void setup () {pinMode (2, OUTPUT); // démarre la connexion Ethernet et le serveur: Ethernet.begin (mac, ip); server.begin (); Serial.begin (9600); } void loop () {// écoute les clients entrants EthernetClient client = server.available (); if (client) {// une requête http se termine par une ligne vierge boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // si vous êtes arrivé à la fin de la ligne (reçu un caractère // de nouvelle ligne) et que la ligne est vide, la requête http est terminée, // vous pouvez donc envoyer une réponse // lit la chaîne URL de $ au premier espace vide si (entrant && c == '') {entrant = 0; } if (c == ' 

Pour que cela fonctionne, connectez le fil positif une LED à la broche D2 et le fil négatif en série avec une résistance de 220 ohms à la masse.

Pour allumer la LED, entrez ceci dans votre navigateur:
// [VOTRE ADRESSE IP ICI] / $ 1

Pour éteindre la LED, entrez ceci dans votre navigateur:
// [VOTRE ADRESSE IP ICI] / 2 $

Remarque: vous devez évidemment remplacer [VOTRE ADRESSE IP ICI] par votre adresse IP.) {Entrant = 1; } // Vérifie la chaîne d'URL $ 1 ou $ 2 if (entrant == 1) {Serial.println (c); if (c == '1') {Serial.println ("ON"); digitalWrite (2, HIGH); } if (c == '2') {Serial.println ("OFF"); digitalWrite (2, LOW); }}

if (c == '\ n') {// vous commencez une nouvelle ligne currentLineIsBlank = true; } else if (c! = '\ r') {// vous avez obtenu un caractère sur la ligne courante currentLineIsBlank = false; }}} // donne au navigateur Web le temps de recevoir le délai des données (1); // ferme la connexion: client.stop (); }}

Pour que cela fonctionne, connectez le fil positif une LED à la broche D2 et le fil négatif en série avec une résistance de 220 ohms à la masse.

Pour allumer la LED, entrez ceci dans votre navigateur:
// [VOTRE ADRESSE IP ICI] / $ 1

Pour éteindre la LED, entrez ceci dans votre navigateur:
// [VOTRE ADRESSE IP ICI] / 2 $

Remarque: vous devez évidemment remplacer [VOTRE ADRESSE IP ICI] par votre adresse IP.

Étape 5: Client

Vous pouvez également utiliser le bouclier Ethernet en tant que client. En d'autres termes, vous pouvez l'utiliser pour lire des sites Web comme un navigateur Web.

Les sites Web ont beaucoup de texte visible et caché, ce qui rend la programmation côté client très délicate. La lecture d'informations sur des sites Web implique généralement l'analyse d'un grand nombre de chaînes. C'est exaspérant, mais ça vaut le coup, si c'est ce que vous avez l'intention de faire.

J'allais écrire du code pour lire les messages Twitter, mais un tel code existe déjà comme exemple dans le programmeur Arduino. Au lieu de cela, je l'ai simplement légèrement modifié pour allumer une LED si un message spécial est lu.

Pour que cela fonctionne, connectez le fil positif une LED à la broche D2 et le fil négatif en série avec une résistance de 220 ohms à la masse.

N'oubliez pas de saisir votre propre adresse IP dans le code ci-dessous, sinon cela ne fonctionnera pas.

Voici le code:
 / * Client Twitter avec chaînes Cette esquisse se connecte à Twitter à l'aide d'un bouclier Ethernet. Il analyse le XML renvoyé et recherche ceci est un tweet Vous pouvez utiliser le blindage Ethernet Arduino ou le blindage Ethernet Adafruit, l'un ou l'autre fonctionnera, tant qu'il aura un module Ethernet Wiznet à bord. Cet exemple utilise les routines DHCP de la bibliothèque Ethernet qui fait partie du noyau Arduino de la version 1.0 bêta 1 Cet exemple utilise la bibliothèque String, qui fait partie du noyau Arduino de la version 0019. Circuit: * Blindage Ethernet attaché aux broches 10, 11, 12, 13 créé le 21 mai 2011 par Tom Igoe Ce code est dans le domaine public. * / #include #include // Entrez une adresse MAC et une adresse IP pour votre contrôleur ci-dessous. // L'adresse IP dépendra de votre réseau local: octet mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01}; IPAddress ip (191, 11, 1, 1); // <<< ENTREZ VOTRE ADRESSE IP ICI !!! // initialise l'instance de bibliothèque: client EthernetClient; const int requestInterval = 60000; // délai entre les requêtes char serverName [] = "api.twitter.com"; // URL URL booléenne demandée; // si vous avez fait une demande depuis la connexion longue lastAttemptTime = 0; // la dernière fois que vous vous êtes connecté au serveur, en millisecondes String currentLine = ""; // chaîne pour contenir le texte du serveur String tweet = ""; // chaîne pour contenir le tweet booléen readingTweet = false; // si vous lisez actuellement le tweet void setup () {pinMode (2, OUTPUT); // réserve de l'espace pour les chaînes: currentLine.reserve (256); tweet.reserve (150); // initialise serial: Serial.begin (9600); // tente une connexion DHCP: si (! Ethernet.begin (mac)) {// si DHCP échoue, commencez par une adresse codée en dur: Ethernet.begin (mac, ip); } // se connecter à Twitter: connectToServer (); } void loop () {if (client.connected ()) {if (client.available ()) {// lire les octets entrants: char inChar = client.read (); // ajoute l'octet entrant à la fin de la ligne: currentLine + = inChar; // si vous obtenez une nouvelle ligne, effacez la ligne: if (inChar == '\ n') {currentLine = ""; } // si la ligne actuelle se termine par // elle sera suivie du tweet: if (currentLine.endsWith ("")) {// le tweet commence. Effacez la chaîne de tweet: readingTweet = true; tweet = ""; } // si vous lisez actuellement les octets d'un tweet, // ajoutez-les à la chaîne de tweet: if (readingTweet) {if (inChar! = '<') {tweet + = inChar; } else {// si vous avez un "Hello Cruel World") {digitalWrite (2, HIGH); Serial.println ("LED ON!"); } if (tweet! = "> Hello Cruel World") {digitalWrite (2, LOW); Serial.println ("LED OFF!"); } // ferme la connexion au serveur: client.stop (); }}}} else if (millis () - lastAttemptTime> requestInterval) {// si vous n'êtes pas connecté et que deux minutes se sont écoulées depuis // votre dernière connexion, puis essayez de vous reconnecter: connectToServer (); }} void connectToServer () {// tente de se connecter et attend une milliseconde: Serial.println ("connexion au serveur ..."); if (client.connect (serverName, 80)) {Serial.println ("faire une requête HTTP ..."); // faire une requête HTTP GET à Twitter: client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP / 1.1"); client.println ("HÔTE: api.twitter.com"); client.println (); } // notez l'heure de cette tentative de connexion: lastAttemptTime = millis (); } 

Vraisemblablement, vous allez vouloir lire autre chose que le récent post sur le flux Twitter RandyMcTester.

Pour lire d'autres flux Twitter, modifiez le bit de texte suivant:
client.println ("GET /1/statuses/user_timeline.xml?screen_name= [NOUVEAU TWITTER NAME ICI] & count = 1 HTTP / 1.1");

Articles Connexes