Conectando Arduino a Internet usando un router Linksys AG241

DSC_0427

Buenas a tod@s. Después de un largo periodo de inactividad, aquí estamos de vuelta para enseñaros un poquito mas que se puede hacer con Arduino. En esta ocasión aprenderemos a conectar Arduino a Internet a través de un router Linksys, en este caso el modelo AG241.

Dada la gran versatilidad de Arduino, conectarlo a Internet puede ser muy interesante para poder interactuar a distancia con nuestro Arduino. Usar un router puede ser una de las varias opciones de las que disponemos.

Algunos estaréis pensando que esto no es nuevo, tenéis razón, existen varias alternativas para conectar Arduino a Internet. Tenemos las conocidas shields ethernet, las también conocidas shields wifi y las no tan conocidas shields GSM.

Las razones para usar un router son varias, la principal es que me gusta cacharrear con todo lo que cae en mis manos, la segunda es darle uso a un router que tenia guardando polvo pero funcionando en perfectas condiciones, y la tercera la razón es la económica, las shields pueden ser un poco caras.

Y ahora, dejemos tanto rollo de lado y empecemos con lo divertido.

Como viene siendo costumbre, aquí va la lista del material:

  • Una placa Arduino (UNO o Mega)
  • Un router Linksys AG241
  • Conector DB-9 macho (opcional)
  • Conector DB-9 hembra (opcional)

Y unas foticos:

  • Placa Arduino UNO:

ArduinoUno_R3_Front

  • Router Linksys AG241:

routers-router-adsl-2-linksys-ag241-1g

  • Conector DB-9 macho:

conector-hpdb-15-macho-para-soldar-vga

  • Conector DB-9 hembra:

db9 hembra

Como siempre, un poco de teoría:

Arduino posee un puerto de comunicaciones serie. Este tipo de puerto es el mas sencillo que puede haber, simplemente se necesitan dos canales de comunicación, uno para enviar datos (tx) y otro para recibirlos (rx). Los mas avanzados veréis que no voy a entrar en detalles de bits de paridad, bits de parada…..etc

Los routers Linksys, y puede que alguna otra marca también, tienen en su interior un puerto de comunicaciones serie, por lo que con un firmware modificado, podemos conectar y comunicar el router con Arduino.

Todos los pasos aquí explicados los podréis encontrar con más destalle aquí.

Vayamos primero a realizar las conexiones físicas para poder conectarlos entre si, después explicaré como cargar un firmware especial.

Empezaremos desmontando el router y buscando el puerto serie. Recordad que una vez abierto el router perderemos su garantía.

DSC_0434

DSC_0433

En este caso, el puerto serie viene identificado como JP4. De izquierda a derecha, tenemos los siguientes pines:

  • Pin 1 GND
  • Pin 2 No se usa
  • Pin 3 RX
  • Pin 4 TX
  • Pin 5 VCC

Una vez soldados los cables, modificaremos un poco la carcasa del router para que quede todo un poco mas “profesional”. Haremos hueco en un lateral para colocar ahí el conector DB-9. Puedes poner el conector hembra o el macho, es indiferente.

DSC_0432

DSC_0431

DSC_0429

A continuación nos hacemos un simple cable, solo hacen falta 3 hilos, GND,RX y TX. Por un lado ponemos el otro conector y por el otro, podemos dejar los cables pelados para conectarlo a Arduino.

DSC_0435

DSC_0430

Recordad identificar los cables, que luego pasa el tiempo y uno no se acuerda de cuales eran !!! 😉

Por último, solo queda conectarlo a Arduino. El esquema de pines es bien sencillo.

  • Cable TX del router    —–> Pin RX de Arduino (Pin 0)
  • Cable RX del router   —–>  Pin TX de Arduino (Pin 1)
  • Cable GND del router —->  Cualquier Pin GND de Arduino

DSC_0428

Con esto ya tenemos el router conectado físicamente con Arduino.

Actulizar firmware del Router.

El siguiente paso consiste en instalar un nuevo firmware en el router. Esto se debe realizar ya que los firmware que traen los routers están muy limitados con respecto a nuestro propósito.

Debemos saber que el firmware que llevan los router Linksys, es un Linux de muy poco tamaño, por lo que, con las debidas modificaciones, obtendremos funciones extras que el router antes no tenía.

El firmware en cuestión se llama OpenWrt, aquí tenéis mucha información detallada, ya que está en ingles, explicaré como instalar el firmware.

  • Nos descargamos el firmware en cuestión desde aquí.
  • Renombramos el fichero descargado como: “upgrade_code.bin”
  • Conectaremos el router a nuestor ordenador a traves del típico cable de red.
  • Configuramos nuestra ip como 192.168.1.2 con la mascara de red 255.255.255.0
  • Abrimos una consola (CMD) y ejecutamos el siguiente comando:

                                 tftp -i 192.168.1.1 PUT upgrade_code.bin

  • Enciende el router, y entre 0.5 y 1.5 segundos, presionamos Enter. Si lo hemos hecho bien, empezara la carga del nuevo firmware. El proceso dura unos segundos. Si no es así, apaga el router, y vuelve a probar.
  • Una vez cargado el firmware, entramos por Telnet, desde la consola hacemos:

                                 telnet 192.168.1.1

  • Desde aquí solo podemos cambiar el password, así que le asignamos el password que queramos.
  • Y por último, si queremos acceder al router para hacer cambios, que tendremos que hacer mas adelante, entraremos mediante SSH:

                                  ssh 192.168.1.1

Como usuario tendremos que poner: root (en minusculas !!!)

Y el password sera el que habeis asignado anteriormente.

Deberemos ver algo como esto:

lynksys

Una forma de comprobar que esta todo bien, tanto las conexiones con Arduino como la carga del firmware, es ver la información de arranque del router a través de Arduino.           ¿ Que como se hace esto ? Muy sencillo.

Ya teniendo Arduino conectado al router, cargamos este programa en nuestro Arduino:

void setup(){
Serial.begin(38400);
}

void loop(){
if(Serial.available()>0){
int dato=Serial.read();
Serial.print((char)dato);

}

}

Y observamos el monitor serial de Arduino, recordad cambiar la velocidad a 38400 baudios.

Instalar ser2net:

Ya estamos cerca del final !!! Ya tenemos comunicación entre el router y Arduino, ahora nos queda poder tener comunicación entre Internet y Arduino.

Para conseguir esto, instalaremos en el router un pequeño programa, ser2net, que se encargara de gestionar la comunicación. Este programa, se dedica a reenviar la información que le llega al router y enviarla por el puerto serial, con esto, dicha información llegara a nuestro Arduino.

Vamos a la faena:

  • Entramos al router por SSH, desde el CMD ejecutamos:  ssh 192.168.1.1
  • Una vez abierta la sesión, procedemos a instalar la aplicación, ejecutamos los siguientes comandos:

                               opkg update

                               opkg install ser2net

  • Si todo va bien, ya tenemos instalado la aplicacion ser2net.
  • Solo queda ejecutarla de esta manera:
ser2net -C "8082:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS"

El numero 8082 es el puesto por el que nos comunicaremos con Arduino. Toda la informacion que se 
dirija a ese puerto sera enviada al Arduino. Este puerto es de nuestra eleccion, siempre y cuando 
no entre en conflicto con otros, asi que usar puertos por encima del 1023, por debajo estan reservados
para uso especifico.

A continuación os dejo unos enlaces con mas información sobre esta aplicación y su configuración:

Una vez realizado todo el montaje, cualquier información que se mande al puerto configurado en el router, será enviada a nuestro Arduino a través del puerto serie.

Vamos a ver un sencillo ejemplo:

Vamos a manejar un simple led a través de un móvil Android.  Nos conectaremos por telnet a nuestro router linksys, y mediante comandos, encenderemos y apagaremos un led.  Con el comando “11” lo encendemos, con el “22” lo apagamos.

Lo primero que haremos es instalar un aplicación de Telnet en nuestro movil. Por ejemplo esta.

Lo segundo, cargar este código en Arduino:

int led = 13;

void setup(){
pinMode(led,OUTPUT);
Serial.begin(9600);
}

void loop(){
if(Serial.available()>0){
char dato=Serial.read();
Serial.print((char)dato);
switch(dato)
{
case ’11’:
{
digitalWrite(led,HIGH);
break;
}
case ’22’:
digitalWrite(led,LOW);
break;
}

}

}

Y ya está, nos conectamos por Telnet al puerto 8082 y mandamos los comandos. Esto funciona tanto en red local como desde Internet. Desde la red local, tendremos que poner la ip del router. Si lo hacemos desde internet, tendremos que usar la ip pública. ¿Que cual es mi ip pública? Fácil, visita esta página www.cualesmiip.com

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

3 Responses to Conectando Arduino a Internet usando un router Linksys AG241

  1. pepe says:

    se podria hacer esto mismo pero en un router en modo puente

  2. pepe says:

    se puede hacer esto en un router en modo puente

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s