Algún Guru del linux?

Hola,

Estoy jugando con un router Linksys y el dd-wrt. Le he sacado el puerto serie del micro del router y se lo he conectado al Arduino. (Hay mucha info por la red).

Me conecto a la consola del router por telnet mediante WIFI, y para enviar algo por puerto serie, hago:
echo S1F > /dev/cua/1
ó
echo S0F > /dev/cua/1

Mi Arduino interpreta estos comandos como apaga(S0F) ó enciende(S1F) un led.
Hasta aquí, todo bien. Me funciona y puedo encender/apagar mi led conectado al Arduino via WIFI.

¿Como puedo hacer lo contrario? Es decir, como puedo ver lo que se recibe por el puerto serie del router al shell.
(No tengo conocimientos acerca de linux)

Gracias!! :wink:

Igor R.

Prueba con:

cat /dev/cua1

con esto deberias cver la salida por la consola

Gracias Pofenas...

Asi debe ser.... Acabo de encontrar un link que dice eso mismo...
http://www.herbert-dingfelder.de/WRT54GL_add_on/WRT54GL_add_on.html

cat < /dev/cua/1

Voy a probarlo!!!!!

:wink:

[edit]
Lo he probado... y funciona!!! Pero tengo que abrir dos conexiones (tal y como dice el documento del link) :smiley: :smiley: :smiley: :smiley:
[/edit]

Igor R.

Curioso, existe hasta un libro acerca hacking los routers Linksys...

Existe mucha info por la red, pero yo añado mis experiencias:

:wink:

Hola, este es mi primer post aki, asi ke tambien sera el de presentacion, asi pues,
¡Hola a to el mundo!! y siguiendo con el tema que nos atañe, decirte que estoy haciendo mas o menos lo mismo, pero en lugar de un Linksys con una fonera, que a efectos es lo mismo. En mi caso en lugar de DD-WRT lo tengo con OpenWRT, por lo tanto deberia funcionar igual.
Volviendo al tema, comentarte, que para comunicar arduino >> fonera, lo que hago es ejecutar comandos directamenete desde el serial, asi por ejemeplo puedo ejecutar scripts, para que la fonera haga lo que kiero, o por ejemplo para guardar datos, como por ejemplo la temperatura medida con un DS18s20, y lo guarde en un fichero en la fonera, con registro de fecha y hora.
Asi que depende de lo que quieras hacer es mas comodo hacerlo asi que hacer que el router este a la espera de ordendes con cat < /dev/cua/1

Salu2

Hola Isdios,

Exactamente no es quedarse a la espera con la orden cat, es recibir dato enviado desde Arduino a la consola (por ejemplo, para confirmar que la instrucción que le has mandando se está ejecutando... es decir, tener feedback).

Esta claro que lo de poder utilizar la potencia del router ejecutando scripts es buenisimo..... Como no controlo mucho de linux, estoy en ello... ya nos contarás tus experiencias!!! :wink:

Bienvenido!!

Saludos

Igor R.

Por cierto.... algún link para aprender scripting, comandos del shell (VeryBusybox??), etc. ?

Gracias!!!

:wink:

Buenas a todos, yo también soy nuevo por aquí.
El caso es que yo también me puse manos a la obra con mi router (asus WL500gP) y OpenWRT.
La verdad es que funciona bastante bien aunque no he tenido tiempo para programar mucha cosa, los drivers son poca cosa así que no debería de dar problemas, en mi caso le he implementado una interfaz web con lighttpd para controlar el arduino, pero como ya os he dicho, no he tenido tiempo de trastear mucho más. En cuanto pueda iré poniendo cómo lo he montado en el router :slight_smile:

Un saludo!

Igor, yo tengo un robot desarrollado con un Linksys y un arduino. La pega de la programación en script en OpenWrt o DD es que no es un sistema Linux completo. Como intérprete de comandos utiliza una aplicación (busybox) que emula un montón de comandos, con la intención de ahorrar espacio. El busybox en cuanto al bash, emula bastante fielmente las funciones más utilizadas, pero hace una interpretación particular en otras funciones, y hay otras que ni siquiera entiende.
Si conoces algo de programación, es muy sencillo programar en C para linksys. Si tienes otro sistema linux aparte, instalando un pequeño paquete podrás hacer compilación cruzada. En C luego ya es coser y cantar, abres el puerto, esperas recepción , interpretas lo recibido, ejecutas lo que sea, etc.

Hola Eduardo,

¿Qué se ha de tener instalado para realizarlo en C? Lo digo para programar en C en linksys... aunque no quiero perder el dd-wrt, ya que me interesa el poder utilizar WDS y/ó repetidor universal con el entorno web que tiene....

Gracias!!

:wink:

No se si me has entendido, me refiero a programar en C fuera del linksys, es decir, tener otro PC con linux (linux completo, no DD ni WRT), instalar un paquete de compilación cruzada, y generar la aplicación binaria para meter en el linksys. No pierdes absolutamente nada del linksys, sigue teniendo sus funciones 100%, simplemente lanzas una aplicación más generada por ti. Te busco la pagina donde descargué el paquete este, que hace ya bastante tiempo.

ahhhhhhh!! No entendí bien.... No sé si necesito tanto....Me imagino que lo que quiero hacer, con scripting servirá... Bueno, si tienes info, por si acaso, nunca está mal tenerla a mano...

Y de scripting, algo de info???

Gracias!!

No encuentro de dónde me bajé el paquete, sigo buscando...
Mientras tanto, en cuanto a scripting, lo que más te interesa empollarte son lo que se conocen como "textutils", que son herramientas sencillas para manipular cadenas de texto.
Por ejemplo cat, tac, nl, tail, head, sort, split, wc, etc
También hay un par de aplicaciones más "gordas" que ahora mismo no recuerdo si vienen instaladas en DD o WRT, que son SED y AWK, la primera más sencilla que la segunda.
Estas últimas herramientas permiten operaciones sencillas, como buscar, reemplazar, ordenar, etc, pero también tienen un lenguaje interpretado específico para que puedas realizar un "script" dentro de la aplicación para procesar cadenas de textos. Especialmente AWK es MUY potente.
Dime en qué puedo ayudarte, llevo desde el 92 manejando Linux.

Ya lo he encontrado:
http://www.dd-wrt.com/phpBB2/viewtopic.php?p=261635&sid=f4057f23385fb3d28986ed6e4d035f8d

Basicamente es bajarte el paquete, descomprimirlo, cambiar el path para que al ejecutar el compilador lo encuentre en su ubicación, y finalmente, desde la carpeta donde está el .c a compilar, ejecutar:

mips-linux-uclibc-gcc ejemplo.c -o ejemplo

Esto te genera el binario ejemplo (mira con "file ejemplo", verás que no es i386 sino mips) que directamente puedes pasar a la SD del linksys y ejecutarlo.

En mi caso he seguido este metodo (extraído de otra página pero venía a decir más o menos lo mismo) y me ha funcionado perfectamente para compilar programas.
Suerte!

Hola,

Aunque soy consciente que algunos no les gustará que sea en windows... ;), he publicado en mi blog, cómo crear una hoja excel que establece una conexión telnet con el router Linksys y controla el ejemplo de encender/apagar mediante botones.

Seguro que más de uno le encuentra utilidad a ésto....

Saludos

Igor R.

Bueno, pues aqui hos dejo otro ejemplo de comunicacion entre arduino y Openwrt, en mi caso lo que he hecho es un script para openwrt para que de la hora al arduino, y asi pueda mostrar la hora correcta en un LCD serie.

tambien se puede hacer lo mismo para fijarle una hora para realizar una accion (encender una bombilla, un rele, medir una temperatura, etc, etc)

Hola Isdios,

Interesante!! Una pregunta, el puerto serie de la fonera... ¿es el de la consola?

Me imagino por el script de tu ejemplo que si... Porque en ningun momento le dices que salga la info por el puerto serie.... ¿verdad?

Otra duda: ¿como haces para que el script este continuamente ejecutandose?

Otra duda a los usuarios de OpenWRT: ¿Dispone de gestor web de configuración? Una cosa que me gusta del dd-wrt que puedes configurar todo mediante web, sin necesidad de comandos.... existe lo mismo para OpenWRT??

Saludos

Igor R.

Haber partes. El puerto serie de la consola es un puerto serie con niveles TTL lo que significa que ca "a pelo" y si no me equivoco lo mismo pasa en casi todos los routers (esto mismo se puede hacer con los comntren de telefonica o los livebox de orange)
En el script no digo 0nunca que salga por puerto serie, ya que el comando lo recibe por puerto serie, por lo tanto responde por el mismo.
Si kiero darle la orden por la red (SSH, o web) deberia indicarle que saliese por el puerto serie / >> /dev/ttS0) pero como la hora la "pide" el arduinoi por serie, pues la fonera responde por el mismo camino. al iniciar el programa en el arduino, este envia la orden "time.sh" por puerto serie por lo que la fonera responde por el mismo con la hora es bien simple jejejej
OpenWRT en sus nuevas versiones si que tiene interface web. No obstante esto mismo te funcionara en DD-wrt ya que DD-wrt esta basado en OpenWRT.
OpenWRT utiliza otro sistema de gstion web llamado LUCI, http://luci.freifunk-halle.net/WebUI/Screenshots/Administration (aqui tienes algunas capturas)
Personalmente me gusta mas Openwr por la estabilidad, sobre todo al usar la fonera para conectarme a una red wifi.

El lynksis y la fonera no son muy diferentes asi que tambien podras ponerle un lector de tarjetas SD y asi poder por ejemplo, hacer que se registren datos recogidos por el arduino "temèratura. humedad, luz etc) en una SD en el router. Y muchas cosas mas jejejeje

Sobre electronica no puedo ayudar mucho (estamos aprendiendo) pero con openwrt (o dd-wrt) si que te puedo ayudar un poco, ya que llevo bastante tiempo "peleandome" con la fonera.

salu2

Ok.

La verdad, que si es potente el hacer cosas dentro del router...
Pero no sé si necesito para mis propósitos...De momento con la pasarela telnet-serie, me va perfecto.
Simplemente me hago un protocolo serie, y uso el router de forma "transparente".

Yo no utilizo el puerto serie de consola, utilizo el segundo que hay libre en el wrt54gl.
He probado a sacar una orden por el puerto serie de consola, y me da mensaje de ocupado.
Pero bueno, teniendo dos, tampoco es crítico.

Saludos

:wink: