Veremos como conectar este magnifico router junto a Arduino. Hasta ahora, siempre habia utilizado este router para crear redes WDS ó como repetidor universal.
Repetidor externo gracias a WRT54GL en una caja con IP65: apto para alimentación 220v ó con batería 12v
.
La ventaja de este router, es la de disponer de linux en su interior y ésto ha creado una gran comunidad, la cual ha desarrollado nuevos firmwares, que añaden multitud de ventajas respecto al original. Haciendo que este router de consumo no tenga nada que envidiar a equipos profesionales.
Uno de ellos es DD-WRT (http://www.dd-wrt.com)
Buscando por la red información, encontré multitud de proyectos que lo usaban, llamandome la atención el poder usar el puerto serie del micro (Broadcom BCM5352).Véase: http://ahorcandoeltiempo.blogspot.com/search/label/Arduino
Existe un libro de cómo hackearlo:
- http://books.google.com/books?id=GBtJdvMeAJQC&printsec=frontcover&hl=es&source=gbs_v2_summary_r&cad=0#v=onepage&q=&f=false
- http://www.amazon.com/Linksys-WRT54G-Ultimate-Hacking-Asadoorian/dp/1597491667
No hace falta explicar aquí como se debe cambiar el software ó el pin-out del puerto serie, ya que existe multitud de información en la red, pero sólamente recalcar el hecho de tener primero que instalar la version mini ó micro de firmware, antes que cualquier otra. La salida serie del router Linksys es 3v3 y la del arduino es 5v...CUIDADO!!
WRT 54 GL v1.1 + Arduino
Una vez con el firmware instalado, nos podemos conectar al shell del router mediante telnet ó ssh. Para ello podemos usar el putty. El usuario y contraseña por defecto una vez instalado el dd-wrt es: User:root y Password:admin.
Ahora, abrimos dos sesiones de telnet del router (Rx y Tx):
+ En la primera, sacaremos toda la información del puerto serie al shell. Para ello usaremos:
cat < /dev/cua/1
+ En la segunda, enviaremos las cadenas de texto que queramos al puerto serie.
echo cadenaaenviar > /dev/cua/1
En el ejemplo que he realizado, en la parte Arduino se programa un simple prótocolo serie, en el que al recibir una pequeña trama, encienda ó apague un led. Las ordenes serán S1F ó S0F.
Veamos un diagrama de flujo del programa:
Por supuesto que podría mejorarse, pero vamos paso a paso... Ya que no se contempla rutinas de salida cuando se reciben carácteres no esperados ó por exceso de tiempo, checksum,...
Aquí adjunto el programa de arduino:
Code:
//Mini protocolo serie //Igor Real int luz1= 13; int el1; int estado=0; byte dato_recibido; void setup() { pinMode(luz1, OUTPUT); pinMode(12, OUTPUT); digitalWrite(12,LOW); Serial.begin(9600); } void loop() { //trama a recibir --> S1F o S0F //S inicio //1 ENCENDIDO Y 0 APAGADO //F fin while (Serial.available() > 0) { //Significa que has recibido algo y lees el primer byte dato_recibido=Serial.read(); if (dato_recibido=='S' && estado==0){ estado=1; } if (((dato_recibido=='1')||(dato_recibido=='0')) && estado==1){ estado=2; if (dato_recibido=='1') el1=1; if (dato_recibido=='0') el1=0; } if (dato_recibido=='F' && estado==2){ estado=0; digitalWrite(luz1,el1); if (el1==0) Serial.println("APAGADO"); if (el1==1) Serial.println("ENCENDIDO"); } } }
En mi montaje, el led va unido entre el pin 12 (cátodo) y 13 (ánodo).
A continuación, veremos una captura de pantalla de los dos shell abiertos contra el router. En la superior vemos los que nos contesta Arduino, y en la inferior le enviamos las ordenes.
(click para ampliar)
Y sólo nos queda ver el video funcionando.... Curioso en la electrónica, que todo se resume en encender/apagar leds de diferentes formas....je,je,je
Ahora, por la parte de PC, nos queda hacer una aplicación un poco más vistosa. Ya que no es muy profesional usar el putty y trabajar en modo comandos...
Veamos como darle conectividad mediante Excel, lo cual nos añade un potencial grandísimo.
1) Para poder conectarnos a telnet con Excel, nos podemos descargar la libreria COM gratuita Ostrosoft Winsock Component => http://www.ostrosoft.com/oswinsck.asp
2) Seguir las instrucciones de la web para registar la libreria.
3) ¡¡ Ya podemos utilizar el control en Excel !! Para ello sólamente tenemos que añadir nuestro nuevo control mediante la barra de herramientas "Cuadro de controles" y en "Más controles..." buscamos Winsock Component.
Por ejemplo, podríamos hacer algo asi:
En la hoja dispongo de:
- Celdas de configuración de la IP del router, usuario y password del mismo.
- Botones (4) que corresponden a establecer conexión, cerrar conexión, encender led y apagar led.
- Cuadro de texto dónde adjunto info recibida de la conexión establecida.
En la imagen se puede ver el resultado tras establecer una conexión y haber encendido/apagado 3 veces el led.
Veamos el código de Excel:
Code:
Private Sub CommandButton1_Click() TextBox1.Text = "" Winsock1.RemoteHost = Range("B2").Text Winsock1.Protocol = sckTCPProtocol Winsock1.Connect End Sub Private Sub CommandButton2_Click() Winsock1.SendData "echo S1F > /dev/cua/1" & vbCrLf End Sub Private Sub CommandButton3_Click() Winsock1.SendData "echo S0F > /dev/cua/1" & vbCrLf End Sub Private Sub CommandButton4_Click() Winsock1.CloseWinsock End Sub Private Sub Winsock1_OnConnect() Winsock1.SendData Range("B3").Text & vbCrLf Application.Wait Now + TimeValue("0:0:01") Winsock1.SendData Range("B4").Text & vbCrLf Application.Wait Now + TimeValue("0:0:01") End Sub Private Sub Winsock1_OnDataArrival(ByVal bytesTotal As Long) Winsock1.GetData data TextBox1.Text = TextBox1.Text + data End Sub Private Sub Winsock1_OnError(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox Number & ": " & Description End Sub
Ahora ya tendremos de forma muy sencilla una interfaz gráfica, en que mediante los botones encendemos/apagamos nuestro led via WIFI.... no queda nada mal, ¿verdad?
(El cuadro de texto está para la depuración con la información que devuelve la conexión de telnet, no hace falta para nada)
Ya puedes darle conectividad Wireless a tus proyectos con Arduino, aprovechándote del potencial de Excel para graficar, cálculos, Visual Basic,....
Ahora, incrementamos el nivel.... GRAFICAR UN VALOR ANALÓGICO EN "TIEMPO REAL"
TELEMETRÍA CON ARDUINO
Fotos del montaje
Mejor, si vemos un video:
Aqui tenemos una captura de pantalla de la hoja excel :
Pues ahora queda en la imaginación de cada uno el potencial que se dispone gracias a ésto... Existen en el mercado, routers compatibles con DD-WRT que disponen de USB... (ejemplo Asus WL-520GU,Linksys WRT350N y Linksys WRT600N)
Véase:
http://www.mightyohm.com/blog/2008/10/building-a-wifi-radio-part-1-introduction/
http://www.jbprojects.net/projects/wifirobot/
http://www.youtube.com/watch?v=Wp0q9eTZECk
Telemetría; Telecontrol; Alarmas; Robótica, Domótica; Apertura/Cierre de puertas,calderas, camaras frigoríficas,... a través de intranet/internet.
Puedes ver más ejemplos con este hardware, navegando por el menu izquierdo (Proyecto LINKDUINO).
Igor R.
Un saludo desde zaragoza.
ResponderEliminarMiguel I.
Impresionante,,,muchas gracias por compartir la información!
ResponderEliminarCómo se puede controlar mediante comandos ssh al linksys, en vez de un led, 4 leds (independientemente) ???
ResponderEliminarSoy muy novato en esto....
Gracias!!
novecapa, la filosofía de 1 ó 4 es lo mismo. Es decir, se trata de realizar un programa en Arduino, que actue a tu antojo según los comandos que le lleguen por puerto serie.
ResponderEliminarse puede usar tal router para conectar el arduino via TX/RX y hacer que el arduino llame a una web?
ResponderEliminarla idea es pasa subir datos a una tabla mysql
www.nombreweb.com/upload.php?P=2900&V=230
upload.php ya se encarga de hacer un GET de P y de V y luego subirlo a la tabla mysql.
si fuese posible seria una grandisima opción ya que eliminas el ethernet shield del arduino (q no es barato)
gracias
Si se puede!!
ResponderEliminarok gracias !! en base a esto tendre q mirar de comprar un router de esos. lastima que no sea tipo N.
ResponderEliminara ver si encuentro algun tutorial de como se haria esto. yo ahora mismo hago un
Client.print("www.paginaweb.com/upload.php?P=2900&V=230");
y va de vicio con el ethernet shield. a ver si consigo q sea tan sencillo hacer lo mismo pero desde el router directamente.
Gracias !!
Hi Igor,
ResponderEliminarCould I use something similiar to the link below to interface to pachube, I have serial sensor data from /dev/tts/1 on my WRT54GL from the arduino.
I think I need to install Curl and use BASH but what else is required ? and is there enough room on the router in the JFFS partition ?
Thank you for your great post and help !
http://dereenigne.org/computers/openwrt-ddwrt/pachube-bandwidth-monitor#comment-1138
Jean
Hola! soy antonio
ResponderEliminarestoy siguiendo este tutorial pero me he atorado en esta parte:
hora, abrimos dos sesiones de telnet del router (Rx y Tx):
+ En la primera, sacaremos toda la información del puerto serie al shell. Para ello usaremos:
cat < /dev/cua/1
+ En la segunda, enviaremos las cadenas de texto que queramos al puerto serie.
echo cadenaaenviar > /dev/cua/1
tEngo las dos shell abiertas ingreso los dos comandos una en cada una respectivmente pero no ocurre nada. Alguna idea?
Otra pregunta: Entre el arduino y el Linksys existe un circuito de conversion como el MAX 232? De ante mano muchas Gracias!
El linksys funciona a 3v3 y Arduino a 5v, por lo que pondría algo para protegerlo. Yo lo hice con una resistencia y un par de diodos.
ResponderEliminarQue router tienes? Hay algunos que el puerto serie es tts/1
Me imagino que estas pruebas las estas haciendo con el programa de Arduino publicado, verdad?
Saludos
Igor
Estoy probando esto con un WAP54G he unido el rx y tx juntos pero no logro recibir en la consola rx lo que envio por la consola tx probe con tts y cua :( alguna idea????
ResponderEliminar