Los Shield de Arduino
La ventaja de trabajar con un Arduino, es que la comunidad ha ido creando cantidad de electrónica lista para usarse, sin necesidad de protoboard. En muchos casos son placas que vienen diseñadas para encajar encima de los pines hembra de que dispone Arduino, añadiéndole funcionalidad.
La ventaja de trabajar con un Arduino, es que la comunidad ha ido creando cantidad de electrónica lista para usarse, sin necesidad de protoboard. En muchos casos son placas que vienen diseñadas para encajar encima de los pines hembra de que dispone Arduino, añadiéndole funcionalidad.
A este tipo de placas prediseñadas para encajar en los pines de Arduino se les llama genéricamente Shields (Escudos), y en esta sesión vamos a utilizar un shield Ethernet que nos da acceso a la red local de que dispongamos, lo que nos abre unas posibilidades de lo más interesantes.
Para ello lo primero es encajar el shield en nuestro Arduino:
Para ello lo primero es encajar el shield en nuestro Arduino:
Hacedlo con el Arduino apagado. Intentar colocar un Shield con Arduino bajo tensión es una ruleta rusa de consecuencias impredecibles.
Los pines tienen que encajar con suavidad primero, y después presionar cuidadosamente para se una a Arduino. No lo forcéis.
Si alguno de los pines no se alinea adecuadamente, podéis ayudarle, con cuidado pero no forcéis.
Aseguraros de todos y cada uno de los pines encaja en los conectores de abajo.
Una vez que haya encajado podéis alimentar el Arduino y luego conectar el cable de red, debería tener un aspecto similar a este, y veréis parpadear una serie de LEDs:
Por si no sabéis como conectar el Shield a la red Ethernet (Y todos hemos tenido una primera vez), la idea es que uséis un cable Ethernet con RJ45 en ambos extremos, uno de ellos va al Shield y el otro al Router o Swicth de que dispongas.
Si te conectas con un ADSL o con Fibra, es probable que tengas instalado un Router Swicth cuya trasera se parezca a la imagen derecha. Suelen incluir 4 entradas RJ45 (Y una RJ11, la típica telefónica)
Tendrás alguna de las bocas en uso con tu PC o similar.
La WAN, es un RJ11, parecida pero un poco más estrecha, así que no te empeñes en forzarla si ves que no va.
• Normalmente cuando te instalan el Router, en la caja suele ir un cable Ethernet como el de la foto de la izquierda.
• Normalmente cuando te instalan el Router, en la caja suele ir un cable Ethernet como el de la foto de la izquierda.
Conecta un extremo al Swicth, oirás un clic característico y el otro al Shield Ethernet y eso es todo, tu Arduino ya está conectado a la red local y probablemente a Internet.
Materiales
Placa de Arduino Uno o similar.
Shield Eternet
Cables Dupont Macho-Hembra
Un cable Ethernet RJ45
Acceso a la red local y al Switch
Probando la conexión con DHCP
Tenemos que comprobar que la conexión es válida. No es posible conocer todos los modelos de Shields Ethernet, pero normalmente incluirán un LED bajo el conector que se encenderá con el cable conectado al Swicth, y se apagará si lo sueltas. (Y lo mismo ocurrirá en el Swicth, que encenderá un piloto en el frontal, cuando detecte la conexión Ethernet.
Tenemos que comprobar que la conexión es válida. No es posible conocer todos los modelos de Shields Ethernet, pero normalmente incluirán un LED bajo el conector que se encenderá con el cable conectado al Swicth, y se apagará si lo sueltas. (Y lo mismo ocurrirá en el Swicth, que encenderá un piloto en el frontal, cuando detecte la conexión Ethernet.
Vamos lo primero a buscar una dirección IP valida. Para ello y por simplificar vamos a comprobar si en vuestra red existe un servidor DHCP, que recordar servía para asignarnos una dirección IP al arrancar.
Vamos a probar con uno de los ejemplos que vienen con la librería Ethernet, que por cierto viene preinstalada en el IDE de Arduino.
Tenemos que importar en primer lugar un par de librerías, la SPI que ya conocemos y la Ethernet que es nueva.
Tenemos que importar en primer lugar un par de librerías, la SPI que ya conocemos y la Ethernet que es nueva.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 } ;
EthernetClient client;
En el setup, inicializamos la puerta serie:
oid setup() {
Serial.begin(115200);
if (Ethernet.begin(mac) == 0){
Serial.println("No ha sido possible configurar la Ethernet por DHCP");
while (true); // No sigas, quédate aquí eternamente
}
if (Ethernet.begin(mac) == 0){
Serial.println("No ha sido possible configurar la Ethernet por DHCP");
while (true); // No sigas, quédate aquí eternamente
}
Serial.print("Mi direccion IP es: ");
Serial.print("Mi direccion IP es: ");
for (byte B = 0; B < 4; B++)
{
Serial.print(Ethernet.localIP()[B], DEC);
Serial.print(".");
}
Serial.println();
Antes de cerrar el tema el DHCP,
El código completo es
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 } ;
EthernetClient client;
void setup() {
Serial.begin(115200);
if (Ethernet.begin(mac) == 0){
Serial.println("No ha sido possible configurar la Ethernet por DHCP");
while (true); // No sigas, quédate aquí eternamente
}
Serial.print("Mi direccion IP es: ");
for (byte B = 0; B < 4; B++)
{
Serial.print(Ethernet.localIP()[B], DEC);
Serial.print(".");
}
Serial.println();
}
void loop() {
// put your main code here, to run repeatedly:
}
Que hacemos si no tenemos DHCP
Si en nuestra red no hay disponible un DHCP, o necesitamos la memoria que usa, aun no estamos perdidos. Tenemos que determinar nuestro rango de direcciones y asignarlas manualmente a nuestro Shield Ethernet.
En Windows tenemos que abrir la configuración de red. El procedimiento depende mucho de la versión, pero si podéis abrir la consola del sistema acabaremos enseguida.
En “Buscar programas y archivos”, escribe CMD y pulsa intro. Te saldrá la temida consola en negro funesto. Escribe ipconfig y pulsa intro.
Esos valores muestran los datos de tu conexión. Como mi dirección IP es la 192.168.1.50, lo lógico es probar una dirección del tipo 192.168.1.xx, donde xx es un valor entre 0 y 255, que no coincida con otra dirección de tu red.
Prueba con un valor tipo 237, por aquello de que es una dirección rara improbable en una red doméstica.
Para forzar a nuestro Shield a una dirección determinada, sin recurrir al DHCP, podéis hacerlo creando antes de llamar a Ethernet.begin (mac), uno o varios arrays de 4 bytes:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);
Con definir la IPAddress.ip es suficiente. El resto de los valores se asignan por defecto.
Además si no vamos a salir a Internet, ni acceder a nuestro Arduino desde internet, no será necesario definir la Gateway.
En Mac podemos ir a Preferencias del Sistema, Red y nos saldra la configuracion directamente:
Y después podemos ya probar una dirección tipo la que definíamos para Windows.
Accediendo a una página WEB desde Arduino
El IDE incluye un ejemplo muy interesante de acceso a Google desde la Ethernet y para hacerle una consulta. Vamos a cargarlo y comprobar que nuestra conexión y configuración funcionan correctamente.
Además si no vamos a salir a Internet, ni acceder a nuestro Arduino desde internet, no será necesario definir la Gateway.
En Mac podemos ir a Preferencias del Sistema, Red y nos saldra la configuracion directamente:
Y después podemos ya probar una dirección tipo la que definíamos para Windows.
Accediendo a una página WEB desde Arduino
El IDE incluye un ejemplo muy interesante de acceso a Google desde la Ethernet y para hacerle una consulta. Vamos a cargarlo y comprobar que nuestra conexión y configuración funcionan correctamente.
Haremos una petición desde nuestro programa de búsqueda en Google y mostraremos el resultado en el monitor serie.
Es importante que tengáis en cuenta lo siguiente:
El volumen de información que genera el acceso a páginas Web es descomunal, aun en los casos más sencillos, porque hay mucha información de gestión que normalmente el usuario no ve y que ahora va a aparecer.
Os recomiendo que pongáis la velocidad de la puerta seria a 115.200 bps, porque si no, la consola va a tardar lo suyo.
Una vez que haya finalizado la recepción de texto HTML en la consola, podéis seleccionar y copiar el texto en un editor externo como el notepad, y guardarlo con la extensión HTML y no txt cuidado.
Haciendo doble click en el fichero así guardado os abrirá el navegador con la respuesta,
Si vas a buscar datos concretos en el texto recibido, prepararos para hacer parsing (análisis) abundante y es fácil que un UNO se os quede corto de memoria.
Aquí teneis una copia del ejemplo Ethernet\WebClient
Si vas a buscar datos concretos en el texto recibido, prepararos para hacer parsing (análisis) abundante y es fácil que un UNO se os quede corto de memoria.
Aquí teneis una copia del ejemplo Ethernet\WebClient
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 } ;
//IPAddress server(74,125,232,128); // numeric IP for Google (no DNS)
char server[] = "www.magomiguelon.es"; // name address for Google (using DNS)
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 80);
EthernetClient client ;
void setup(){
Serial.begin(115200);
//while (!Serial) ; // Para Leonardo
if (Ethernet.begin(mac) == 0){
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000); // Esperar a que Ethernet se inicie
Serial.println("connecting...");
if (client.connect(server, 80)){
Serial.println("connected");
// Make a HTTP request:
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.magomiguelon.es");
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop(){
if (client.available()){
char c = client.read();
Serial.print(c);
}
if (!client.connected()){ // Si no hay conexion
Serial.println();
Serial.println("disconnecting.");
client.stop();
while (true) ; // No hagas mas
}
}
No hay comentarios:
Publicar un comentario