Tutorial de Arduino Ethernet Shield

El Arduino Ethernet Shield le permite conectar fácilmente su Arduino a internet. Este escudo le permite a su Arduino enviar y recibir datos desde cualquier parte del mundo con una conexión a Internet. Puede usarlo para hacer cosas divertidas, como controlar robots de forma remota desde un sitio web, o hacer sonar una campana cada vez que reciba un nuevo mensaje de Twitter. Este escudo abre un sinfín de posibilidades al permitirle conectar su proyecto a Internet en un abrir y cerrar de ojos.

Paso 1: configuración

Configurarlo es tan simple como conectar los pines del encabezado del escudo a su Arduino.

Tenga en cuenta que el Ethernet Shield utilizado aquí solía venderse en RadioShack. Sin embargo, como RadioShack ya no existe, es más difícil encontrar el escudo. Este escudo de ethernet genérico disponible en Amazon también debería funcionar. * Está destinado a ser utilizado con las placas Arduino Uno Rev. 3 (o posterior). Tiene demasiados pines para enchufar en placas Arduino de versiones anteriores.

* No lo he confirmado personalmente. ¡El comprador tenga cuidado!

Paso 2: Características del escudo

Ethernet Shield se basa en el chip W51000, que tiene un búfer interno de 16K. Tiene una velocidad de conexión de hasta 10 / 100Mb. Esta no es la conexión más rápida que existe, pero tampoco es nada para volverse loco.

Se basa en la biblioteca Arduino Ethernet, que viene incluida con el entorno de desarrollo.

También hay una ranura micro SD incorporada que le permite almacenar una gran cantidad de datos y servir sitios web completos utilizando solo su Arduino. Esto requiere el uso de una biblioteca SD externa, que no viene incluida con el software. El uso de la tarjeta SD no está cubierto en este Instructable. Sin embargo, está cubierto en el Paso 8 de la tarjeta SD inalámbrica instructable.

La placa también tiene espacio para agregar un módulo Power over Ethernet (PoE), que le permite alimentar su Arduino a través de una conexión Ethernet.

Para obtener una descripción técnica completa, consulte la página oficial de Ethernet Shield.

Paso 3: Comience

Conecte el Arduino al puerto USB de su computadora y el escudo de Ethernet a su enrutador (o conexión directa a Internet).

A continuación, abra el entorno de desarrollo Arduino. Recomiendo actualizar a Arduino 1.0 o posterior (si aún no lo ha hecho). Esta versión del software tiene soporte DHCP incorporado y no requiere la configuración manual de una dirección IP.

Para averiguar qué dirección IP se ha asignado a su placa, abra el boceto DhcpAddressPrinter. Esto se puede encontrar en:

Archivo -> Ejemplos -> Ethernet -> DhcpAddressPrinter

Una vez abierto, es posible que deba cambiar la dirección Mac. En las versiones más nuevas del escudo de Ethernet, debería ver esta dirección en una etiqueta pegada a la placa. Si le falta una pegatina, simplemente crear una dirección de Mac única debería funcionar. Si está utilizando múltiples escudos, asegúrese de que cada uno tenga una dirección mac única.

Una vez que la dirección mac esté configurada correctamente, cargue el boceto en su Arduino y abra el monitor en serie. Debe imprimir la dirección IP en uso.

Paso 4: servidor

Puede utilizar el escudo Arduino Ethernet como servidor web para cargar una página HTML o funcionar como servidor de chat. También puede analizar las solicitudes enviadas por un cliente, como un navegador web. Los siguientes dos ejemplos muestran cómo usarlo para servir páginas HTML y analizar cadenas de URL.

Una cosa importante a tener en cuenta es que deberá ingresar la dirección IP de su Arduino en los dos ejemplos a continuación para que funcionen.

El siguiente código cambia la página web que se sirve al presionar un botón:
 / * Demostración del servidor web reunida por Randy Sarafan Un servidor web simple que cambia la página que se sirve, que se activa al presionar un botón. Circuito: * Protección Ethernet conectada a los pines 10, 11, 12, 13 * Conecte un botón entre el Pin D2 y 5V * Conecte una resistencia de 10K entre el Pin D2 y tierra Basado casi en su totalidad en el servidor web por Tom Igoe y David Mellis Editar historial: creado 18 de diciembre de 2009 por David A. Mellis modificado el 4 de septiembre de 2010 por Tom Igoe * / #include #include // Ingrese una dirección MAC y una dirección IP para su controlador a continuación. // La dirección IP dependerá de su red local: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< ¡INGRESE SU DIRECCIÓN IP AQUÍ! // Inicialice la biblioteca del servidor Ethernet // con la dirección IP y el puerto que desea usar // (el puerto 80 es el predeterminado para HTTP): Servidor EthernetServer (80); int buttonPress = 1; configuración vacía () {pinMode (2, INPUT); // inicia la conexión Ethernet y el servidor: Ethernet.begin (mac, ip); server.begin (); } void loop () {buttonPress = digitalRead (2); // escucha los clientes entrantes Cliente EthernetClient = server.available (); if (cliente) {// una solicitud http finaliza con una línea en blanco boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // si ha llegado al final de la línea (recibió un carácter // de nueva línea) y la línea está en blanco, la solicitud http ha finalizado // para que pueda enviar una respuesta si (c == '\ n' && currentLineIsBlank) {// envía un encabezado de respuesta http estándar client.println ("HTTP / 1.1 200 OK"); client.println ("Tipo de contenido: texto / html"); client.println (); // sirve una versión diferente de un sitio web dependiendo de si se presiona o no el botón // conectado al pin 2. if (buttonPress == 1) {client.println ("¡LUZ!"); } else if (buttonPress == 0) {client.println ("DARK!"); } rotura; } if (c == '\ n') {// estás comenzando una nueva línea currentLineIsBlank = true; } else if (c! = '\ r') {// has obtenido un carácter en la línea actual currentLineIsBlank = false; }}} // dar tiempo al navegador web para recibir el retraso de datos (1); // cierra la conexión: client.stop (); }} 

Para que este código de ejemplo funcione, simplemente conecte un botón entre el pin D2 y 5V, una resistencia de 10K entre el pin D2 y tierra, y luego cargue la dirección IP de su Arduino en su navegador web. La página debe cargarse con un fondo negro. Mantenga presionado el botón y luego actualice la página del navegador. El sitio ahora debería cargarse con un fondo blanco.


El siguiente código enciende un LED dependiendo de la URL que se envía al Arduino:
 / * Demostración del servidor web reunida por Randy Sarafan Le permite encender y apagar un LED ingresando diferentes URL. Para encenderlo: // su-dirección-IP / $ 1 Para apagarlo: // su-dirección-IP / $ 2 Circuito: * Protección Ethernet conectada a los pines 10, 11, 12, 13 * Conecte un LED al pin D2 y ponerlo en serie con una resistencia de 220 ohm a tierra Basado casi por completo en el servidor web por Tom Igoe y David Mellis Editar historia: creado el 18 de diciembre de 2009 por David A. Mellis modificado el 4 de septiembre de 2010 por Tom Igoe * / #include #include boolean entrante = 0; // Ingrese una dirección MAC y una dirección IP para su controlador a continuación. // La dirección IP dependerá de su red local: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< ¡INGRESE SU DIRECCIÓN IP AQUÍ! // Inicialice la biblioteca del servidor Ethernet // con la dirección IP y el puerto que desea usar // (el puerto 80 es el predeterminado para HTTP): Servidor EthernetServer (80); configuración nula () {pinMode (2, OUTPUT); // inicia la conexión Ethernet y el servidor: Ethernet.begin (mac, ip); server.begin (); Serial.begin (9600); } void loop () {// escucha los clientes entrantes Cliente EthernetClient = server.available (); if (cliente) {// una solicitud http finaliza con una línea en blanco boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // si ha llegado al final de la línea (recibió un carácter // de nueva línea) y la línea está en blanco, la solicitud http ha finalizado // para que pueda enviar una respuesta // lee la cadena de URL de $ a primero espacio en blanco if (entrante && c == '') {entrante = 0; } if (c == ' 

Para que esto funcione, conecte el cable positivo, un LED al pin D2, y el cable negativo en serie con una resistencia de 220 ohm a tierra.

Para encender el LED ingrese esto en su navegador:
// [SU DIRECCIÓN IP AQUÍ] / $ 1

Para apagar el LED ingrese esto en su navegador:
// [SU DIRECCIÓN IP AQUÍ] / $ 2

Nota: Obviamente, debe reemplazar [SU DIRECCIÓN IP AQUÍ] con su dirección IP.) {Entrante = 1; } // Comprueba la cadena URL $ 1 o $ 2 if (entrante == 1) {Serial.println (c); if (c == '1') {Serial.println ("ON"); digitalWrite (2, ALTO); } if (c == '2') {Serial.println ("OFF"); digitalWrite (2, BAJO); }}

if (c == '\ n') {// está comenzando una nueva línea currentLineIsBlank = true; } else if (c! = '\ r') {// has obtenido un carácter en la línea actual currentLineIsBlank = false; }}} // dar tiempo al navegador web para recibir el retraso de datos (1); // cierra la conexión: client.stop (); }}

Para que esto funcione, conecte el cable positivo, un LED al pin D2, y el cable negativo en serie con una resistencia de 220 ohm a tierra.

Para encender el LED ingrese esto en su navegador:
// [SU DIRECCIÓN IP AQUÍ] / $ 1

Para apagar el LED ingrese esto en su navegador:
// [SU DIRECCIÓN IP AQUÍ] / $ 2

Nota: Obviamente, debe reemplazar [SU DIRECCIÓN IP AQUÍ] con su dirección IP.

Paso 5: cliente

También puede usar el Escudo de Ethernet como cliente. En otras palabras, puede usarlo para leer sitios web como un navegador web.

Los sitios web tienen mucho texto visible y oculto, lo que hace que la programación en el lado del cliente sea muy complicada. Leer información de sitios web generalmente implica analizar muchas cadenas. Esto es enloquecedor, pero vale la pena, si eso es lo que pretendes hacer.

Iba a escribir algún código para leer mensajes de Twitter, pero ese código ya existe como ejemplo dentro del programador Arduino. En cambio, simplemente lo modifiqué un poco para encender un LED si se lee un mensaje especial.

Para que esto funcione, conecte el cable positivo, un LED al pin D2, y el cable negativo en serie con una resistencia de 220 ohm a tierra.

No olvide ingresar su propia dirección IP en el siguiente código, o no funcionará.

Aquí está el código:
 / * Cliente de Twitter con cadenas Este boceto se conecta a Twitter mediante un escudo de Ethernet. Analiza el XML devuelto, y busca que sea un tweet. Puede usar el escudo Arduino Ethernet, o el escudo Adafruit Ethernet, cualquiera funcionará, siempre que tenga un módulo Wiznet Ethernet a bordo. Este ejemplo usa las rutinas DHCP en la biblioteca Ethernet que es parte del núcleo Arduino de la versión 1.0 beta 1 Este ejemplo usa la biblioteca String, que es parte del núcleo Arduino de la versión 0019. Circuito: * Escudo Ethernet conectado a los pines 10, 11, 12, 13 creado el 21 de mayo de 2011 por Tom Igoe Este código es de dominio público. * / #include #include // Ingrese una dirección MAC y una dirección IP para su controlador a continuación. // La dirección IP dependerá de su red local: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01}; IPAddress ip (191, 11, 1, 1); // <<< ¡INGRESE SU DIRECCIÓN IP AQUÍ! // inicializa la instancia de la biblioteca: cliente EthernetClient; const int requestInterval = 60000; // retraso entre solicitudes char serverName [] = "api.twitter.com"; // URL de Twitter booleana solicitada; // si ha realizado una solicitud desde que conectó longAttemptTime = 0; // última vez que se conectó al servidor, en milisegundos String currentLine = ""; // cadena para contener el texto del servidor String tweet = ""; // cadena para contener el tweet boolean readingTweet = false; // si actualmente estás leyendo el tweet void setup () {pinMode (2, OUTPUT); // reserva espacio para las cadenas: currentLine.reserve (256); tweet.reserve (150); // inicializar serial: Serial.begin (9600); // intente una conexión DHCP: if (! Ethernet.begin (mac)) {// si DHCP falla, comience con una dirección codificada: Ethernet.begin (mac, ip); } // conectarse a Twitter: connectToServer (); } void loop () {if (client.connected ()) {if (client.available ()) {// leer bytes entrantes: char inChar = client.read (); // agrega el byte entrante al final de la línea: currentLine + = inChar; // si obtienes una nueva línea, borra la línea: if (inChar == '\ n') {currentLine = ""; } // si la línea actual termina con, // será seguida por el tweet: if (currentLine.endsWith ("")) {// el tweet está comenzando. Borre la cadena de tweet: readingTweet = true; tweet = ""; } // si actualmente está leyendo los bytes de un tweet, // agréguelos a la cadena de tweet: if (readingTweet) {if (inChar! = '<') {tweet + = inChar; } else {// si tienes un "Hello Cruel World") {digitalWrite (2, HIGH); Serial.println ("LED ENCENDIDO"); } if (tweet! = "> Hello Cruel World") {digitalWrite (2, LOW); Serial.println ("LED apagado!"); } // cierra la conexión al servidor: client.stop (); }}}} else if (millis () - lastAttemptTime> requestInterval) {// si no está conectado y han pasado dos minutos desde // su última conexión, intente conectarse nuevamente: connectToServer (); }} void connectToServer () {// intenta conectarse y espera un milisegundo: Serial.println ("conectando al servidor ..."); if (client.connect (serverName, 80)) {Serial.println ("haciendo una solicitud HTTP ..."); // realiza una solicitud HTTP GET a twitter: client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP / 1.1"); client.println ("HOST: api.twitter.com"); client.println (); } // tenga en cuenta la hora de este intento de conexión: lastAttemptTime = millis (); } 

Presumiblemente, querrá leer algo más que la publicación reciente en el feed de Twitter de RandyMcTester.

Para leer otros feeds de Twitter, cambie el siguiente fragmento de texto:
client.println ("GET /1/statuses/user_timeline.xml?screen_name= [NUEVO NOMBRE DE TWITTER AQUÍ] & count = 1 HTTP / 1.1");

Artículos Relacionados