Autor Tema: [Tutorial] Receptor de radio Wi-Fi con OpenWrt  (Leído 173777 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raphik

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #180 en: 24-03-2013, 10:04 (Domingo) »
Existen diversos problemillas para la interfaz web:  Si utilizas los scripts que se vieron hace unas pocas páginas, utilizan frames, que solo los entiende el IExplore, por lo que dicha interfaz no funcionara correctamente en Firefox, Chrome o Safari....

Efectivamente, sin darme cuenta utilicé código exclusivo para IE. En cuanto pueda subo una versión compatible con todos los navegadores.
EDITO: Interfaz corregida. Ahora funciona también en Firefox, Opera, Chrome y Safari, con sólo dos ficheros y menos código.


« Última modificación: 03-04-2013, 20:16 (Miércoles) por raphik »

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #181 en: 27-03-2013, 18:16 (Miércoles) »
Bueno, pues ahora Mi radio tiene dos lindos vumetros digitales, un jack de 3.5 mm de auriculares que desconecta los altavoces y un lindo display azul por puerto serie... que no va.

Me explico, una vez conectado el puerto serie del PC, puedo mandar datos y los lee perfectamente, para eso tiene una patilla RTS que admite serie RS232.

Tambien tiene su pin RX que funciona con bajo nivel de tensión para microcontroladores y demás, como es el caso de este puerto serie del HG553, pero no hay forma.

Inicialmente, el osciloscopio indica que en el proceso de arranque hay datos varios saliendo por el pin Tx, y el display de hecho cambia su mensaje de "PRESS CR" por una rayita de prompt.... Pero a partir de ahi nada de nada.

Cualquier intento del estilo:

                                              echo -e "hola" > /dev/ttyS0

produce un impulso bajo de salida que Me recuerda al bit de start, o al de stop, pero ya esta... no hay mas impulsos ( los correspondientes a las letras de "hola" ) y asi no hay forma...

Alguna idea del puerto serie? se Me olvida de configurar algo?  Algo o alguien lo usa de forma contñinua y no lo deja funcionar?

Como siempre, Gracias por anticipado!!!!

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #182 en: 27-03-2013, 20:28 (Miércoles) »
No estoy seguro pero creo que necesitas deshabilitar el puerto serie para que no lo use el kernel enviando mensajes de debug, y así poder usarlo tú con la aplicación que quieras.

Concretamente antes de compilar cuando haces

make kernel_menuconfig
en este apartado
Código: [Seleccionar]
-> Kernel hacking
       -> Built-in kernel command line (CMDLINE_BOOL [=y])

Y luego ya una vez compilado y flasheado enviar datos manualmente al puerto serie. Tal vez también sea necesario asegurarse de usar una velocidad en el puerto adecuada para tu display tal como se explica en la página de mightyohm, por ejemplo:
Código: [Seleccionar]
root@OpenWrt:~# stty 9600 < /dev/ttyS0
« Última modificación: 27-03-2013, 20:33 (Miércoles) por danitool »

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #183 en: 27-03-2013, 21:52 (Miércoles) »
Efectivamente, esta tarde Me di cuenta del tema de la velocidad del display... ya cargue stty y a 38400 va bien... He probado a blindar el cable del serie, pero sigue igual.... ahora el problema es poder arrancar de principio el puerto serie desde el inicio de la carga del router a esa velocidad, para evitar el cuelgue, pero no se donde estará el script de carga de inicio para tal cosa... Mis conocimientos de linux no dan para mas.

Por otra parte, este display tiene una serie de comandos en la forma esc[<numero> <letra>... El problema es que no se mandar con echo estas secuencias que comienzan por "esc"... si Me podeis ayudar, graciasssssssssss........

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #184 en: 28-03-2013, 02:19 (Jueves) »
pues justamente esa velocidad la cambias donde indiqué anteriormente


Código: [Seleccionar]
-> Kernel hacking
       -> Built-in kernel command line (CMDLINE_BOOL [=y])

raphik

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #185 en: 29-03-2013, 13:07 (Viernes) »
... ahora el problema es poder arrancar de principio el puerto serie desde el inicio de la carga del router a esa velocidad
La receta para cambiar la velocidad de transferencia del puerto serie la tienes aquí: http://wiki.openwrt.org/doc/recipes/serialbaudratespeed

Un saludo.

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #186 en: 30-03-2013, 12:19 (Sábado) »
Bueno, retocando el Kernel al compilar conseguí que lo hiciera a 38400, por lo que ya no tendré el problema de no sincronizar, pero... en el inicio se produce cierto trasiego de información en el puerto serie, y Me cuelga al display este de Ebay, el cual pide como primer caracter un "\r" para sincronizarse.... ahora la idea es:  existe algun lugar donde decirle la cadena de caracteres a mandar en esos primeros momentos que hace la sincrónía? o alguna forma de no chequear el puerto serie en el arranque?  o directamente, mejor con un transistor y un microrelé corto la alimentacion de la pantalla hasta que no se enciendan las luces del router en /init.d/rc.common...

Por otra parte, chequeando en make kernel_menuconfig, he encontrado sitios donde aparentemente activar soporte para los gpio y mmc/sd... quizas por fin aparezca como hacer andar el lector?

Como siempre, la ayuda es buena, y si hago lo del rele, ya pondre el esquema para evitar que os pase lo mismo que a Mi si comprais el display este....

http://www.ebay.es/itm/20x4-LCD-Display-Module-With-I2C-Serial-and-Keypad-Controller-/110893433937?pt=UK_BOI_Electrical_Test_Measurement_Equipment_ET&hash=item19d1c38451#ht_2724wt_1163

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #187 en: 01-04-2013, 15:34 (Lunes) »
Tal vez ahora el problema está en el bootloader, el cual está a una velocidad que no puedes cambiar. En el inicio el bootloader envía su propia información via puerto serie hasta que le da el control al kernel linux. El kernel seguramente ya haga todo correctamente y no es quien te cuelga el dislplay, la culpa es del del bootloader CFE,

Tendrás que tratar de buscar una forma de arreglarlo, esa que dices puede funcionar supongo, no sé demasiado de electrónica. Si el display dispone de un pin de reset tal vez también puedas usar eso para conectarlo a un gpio del router para que envíe una señal de reset activando el gpio y volviéndolo a desactivar, algo simple de conseguir con un script, o viceversa según sea el pin active high o low.

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #188 en: 01-04-2013, 16:05 (Lunes) »
Por cierto, supongo que ya lo habrás visto el datasheet de ese display

https://raw.github.com/LaosLaser/AddOns/master/i2c-panel/Datasheets/BV4618/BV4618%20DataSheet.pdf

Por lo que indica, puede llegar hasta una velocidad de 115200, con lo cual no habría que tocar nada, ya que esa velocidad es la que usa por defecto tanto bootloader como el kernel.

No sé por defecto como va configurado el display, pero en teoría puedes configurarlo para varias velocidades con ciertos comandos

Código: [Seleccionar]
[esc1bsería para 115200, no me preguntes como se envía el comando... no sé si en texto plano o alguna combinación especial de caracteres desde su consola serie. Luego creo que hay que reiniciarlo o algo así para que guarde el cambio, no estoy seguro.

Yo antes trataría de probar estas opciones que trae el dispositivo
« Última modificación: 01-04-2013, 16:08 (Lunes) por danitool »

raphik

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #189 en: 01-04-2013, 21:06 (Lunes) »
Existen diversos problemillas para la interfaz web:  Si utilizas los scripts que se vieron hace unas pocas páginas, utilizan frames, que solo los entiende el IExplore, por lo que dicha interfaz no funcionara correctamente en Firefox, Chrome o Safari....
Efectivamente, el código que utilicé para la interfaz web presenta algunas incompatibilidades con navegadores distintos de IE. Ya he localizado el bug y sé cómo arreglarlo (eso creo). En cuanto lo termine lo subo.
Ya tengo la interfaz web funcionando en IE, Firefox, Chrome y Safari. En Opera no funciona bien la función setTimeout(), pero el resto va bien. Me ha llevado algo más de tiempo del que tenía previsto, pero es que me empeñé en montarla en un solo script. (Tienes otra interfaz más simple aquí.)


Citar
#!/bin/sh
read -t 1 cadena
#código para el iframe
if [ "$cadena" ] ; then
  echo -e "Content-type:text/html\n\n"
  if [ cadena ] ; then
    case ${cadena:0:4} in
   prev)   mpc -q prev;;
   next)   mpc -q next;;
   play)   mpc -q play;;
   togg)   mpc -q toggle;;
   stop)   mpc -q stop;;
   baja)   mpc -q volume -5;;
   sube)   mpc -q volume +5;;
    esac
    STATUS=$(echo "status" | nc localhost 6600 | grep -e "^state: ")
    VOLUMEN=$(echo "status" | nc localhost 6600 | grep -e "^volume: ")
    EMISORA=$(echo "currentsong" | nc localhost 6600 | grep -e "^Name: ")
    TEMA=$(echo "currentsong" | nc localhost 6600 | grep -e "^Title: ")
    echo "<script>parent.estado('${STATUS:7}');</script>"
    echo "<script>parent.posVolumen('${VOLUMEN:7}');</script>"
    echo "<script>parent.informa('${EMISORA:6:45}', 0);</script>"
    if [ ${cadena:0:4} == 'info' ] ; then
   echo "<script>parent.informa('${TEMA:7:45}', 5000);</script>"
    fi
  fi
  exit
fi

#código para el navegador
mpd
if [ "$?" == 0 ]; then
  mpc -q repeat on
  mpc -q stop
fi
/bin/cat <<EOF
Content-type:text/html

<html>
<head>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<title>Radio Wi-Fi</title>
<style type="text/css">
  .texto {font-family:courier; font-size:12px; color:white; background-color:black; }
  .boton {position:absolute; top:36px; background-color:black;}
</style>
<script>
var emisora="emisora";

 function posVolumen(valor){
  var posi = Math.round( valor * ( 318 - 5 ) / 100 + 5 );
  document.getElementById('dialVolumen').style.left=posi-1+'px';
}

function informa(texto, tiempo){
  if(texto.length==0){ texto="desconocido" };
  document.getElementById('info').innerHTML=texto;
  if (tiempo>0) { window.setTimeout(function() {info(emisora)}, tiempo) } else emisora=texto ;
}

function info(param){
  document.getElementById('info').innerHTML=param;
}

function estado(param){
  document.getElementById('play').style.background='black';
  document.getElementById('pause').style.background='black';
  document.getElementById('stop').style.background='black';
  document.getElementById(param).style.background='white';
}

</script>
</head>
<body onload="document.info.submit()">
<iframe name="invisible" width=0 height=0 frameborder=0 scrolling=no marginwidth=0 marginheight=0>Invisible</iframe>
<div style="background-color:grey; position:relative; width:327px; height:62px;">
<div id="info" class="texto" style="position:absolute; left:5px; top:5px; width:318px; height:16px;"></div>
<div id="dialFondo" style="background-color:black; position:absolute; left:5px; top:24px; width:318px; height:8px;"></div>
<div id="dialVolumen" style="background-color:white; position:absolute; left:5px; top:24px; width:1px; height:8px;"></div>
  <form action="" method="POST" target="invisible"><input type="hidden" name="prev">
    <button title="anterior" class="boton" type="submit" style="left:5px;">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="play">
    <button title="marcha" id="play" class="boton" type="submit" style="left:45px;">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="togg">
    <button title="pausa" id="pause" class="boton" type="submit" style="left:85px">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="stop">
    <button title="parada" id="stop" class="boton" type="submit" style="left:125px;">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="next">
    <button title="siguiente" class="boton" type="submit" style="left:165px;">
    </button></form>
  <form name="info" action="" method="POST" target="invisible"><input type="hidden" name="info">
    <button title="información" class="boton" style="left:205px;">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="baja">
    <button title="bajar volumen" class="boton" style="left:245px;">
    </button></form>
  <form action="" method="POST" target="invisible"><input type="hidden" name="sube">
    <button title="subir volumen" class="boton" style="left:285px;">
    </button></form>
</div>
</body>
</html>
EOF
exit
« Última modificación: 10-04-2013, 20:43 (Miércoles) por raphik »

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #190 en: 02-04-2013, 22:21 (Martes) »
Bueno, pues se resolvió el misterio de la pantalla serie... aunque eso no signifique que se haya resuelto el problema.

Para empezar, hice caso a danitool ( gracias!!! ) y coloque en Kernel Hacking, en la sección de linea de comando el valor 38400 en lugar del 115200, con lo que teoricamente debería solucionarse el tema... pero no fue así en parte.

Probando con otras velocidades llegué a 9600 baudios, y cual no es mi sorpresa cuando veo letras en pantalla de forma correcta, pero la sorpresa fue mayor cuando Me fijo: lo que se ve en pantalla es un volcado similar al de "dmesg".

Resulta que por algún motivo no dilucidado aún, el contenido del Registro del Sistema se manda a la consola por serie a 9600 baudios, hasta que el puerto serie es detectado correctamente mediante esa famosa línea en el Kernel Hacking, momento en el cual se pone a la velocidad dicha ahi... En cualquier caso, se produce una corrupción por el cambio de velocidad.

Si bien acabé eliminando los parámetros "console=ttyS0, 38400" de la linea de comando en Kernel Hacking, sigue mandando dicha información al serie... supongo que tendrá que ver en como manda syslog y Klogd ( creo que se llaman asi esos daemon ) su información, pero Mis conocimientos de Linux no dan mas de si...  La molestia es cuando pinchas un pendrive o cuando se pierde la autentificacion wifi o cosas similares, que la pantalla muestra todo eso borrando la información que alli hubiere... alguna forma de eliminar esos "echo" de los logs a consola?

Por otra parte, mas cositas:  Como sabeis, tengo conectado un Gpio de un Led a un zumbador, para que las pulsaciones de las teclas manden un pitido con duración dada por "sleep", que acepta valores enteros mayor que 1.... pues bien, si os vais a:

make menuconfig  ----> Base System ----> Busybox ----> Configuration ----> Coreutils ----> sleep

y aparece una opcion a marcar:  enable fractional numeric.

De esta forma, Mi pitido de zumbador suena con sleep .2., lo bastante corto para las repeticiones de tecla y lo bastante largo para ser oido :)

Comentar tambien que este display tiene posibilidad de reprogramar algunos parametros de su eeprom, como el mensaje inicial o la velocidad ( a 9660 para evitar mas lios!!! ), y que se le manda los códigos de control mediante el comando "echo"... la secuencia de escape sería comenzando por \x1b que corresponde a la tecla esc...
« Última modificación: 02-04-2013, 22:25 (Martes) por Sir-Stephen »

raphik

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #191 en: 03-04-2013, 21:23 (Miércoles) »
... La molestia es cuando pinchas un pendrive o cuando se pierde la autentificacion wifi o cosas similares, que la pantalla muestra todo eso borrando la información que alli hubiere... alguna forma de eliminar esos "echo" de los logs a consola?

Sí, puedes evitarlo con el comando klogd (kernel logger daemon).

Código: [Seleccionar]
klogd -c 6
Esos mensajes al puerto serie los envía el kernel de Linux (y no el bootloader, como yo pensaba). Se clasifican por prioridad, del 1 (más urgente) al 8 (menos urgente). Con el comando klogd estableces el límite entre lo que se reporta y lo que no. Un nivel 6 es suficiente para que no se envíen mensajes cuando se pincha o se desconecta un dispositivo USB.

La información (en inglés) la he encontrado aquí.
« Última modificación: 07-04-2013, 12:05 (Domingo) por raphik »

gmtii

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #192 en: 07-04-2013, 12:24 (Domingo) »
hola

yo también intenté conectar un LCD directo por serial, pero era dificil controlarlo a veces para hacer ciertas cosas... al final hice lo mismo, pero programando un PIC y mediante determinador caracteres especiales controlar la pantalla según yo quisiera:

empezar a mostrar caracteres cuando yo le diga, y evitar todo el bootlog
seleccionar la línea de pantalla
borrar, etc.

al final, el script que se ejecuta en el router ordena lo que debe hacerse en cada momento.

por si les sirve de algo lo he subido todo a github. También lo tengo para MSP430 si les interesa...

https://github.com/gmtii/lcd_hd44780_openwrt/

saludos!

saludos.

raphik

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #193 en: 08-04-2013, 23:50 (Lunes) »
hola

yo también intenté conectar un LCD directo por serial, pero era dificil controlarlo a veces para hacer ciertas cosas... al final hice lo mismo, pero programando un PIC y mediante determinador caracteres especiales controlar la pantalla según yo quisiera:

empezar a mostrar caracteres cuando yo le diga, y evitar todo el bootlog
seleccionar la línea de pantalla
borrar, etc.

al final, el script que se ejecuta en el router ordena lo que debe hacerse en cada momento.

por si les sirve de algo lo he subido todo a github. También lo tengo para MSP430 si les interesa...

https://github.com/gmtii/lcd_hd44780_openwrt/

saludos!

Gracias por compartirlo, gmtii. ¿Empleaste un 18F14K50? Supongo que tu código funcionaría igualmente con el 16F687, que también tiene USART. Por lo que parece, lo montaste con un Xtal externo de 10MHz. ¿Se podría eliminar, aprovechando que el micro tiene el oscilador interno?

Saludos.

gmtii

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #194 en: 09-04-2013, 00:03 (Martes) »
buenas,

si,  pedido a samples de microchip, pero vamos, cualquier vale, ajustando los conf bits  ^-^ pues para temas de USART mejor siempre cristal por el tema de la precisión, pero vamos, todo es probar; el bus pirate con el oscilador interno va perfecto!

puedes usar cualquier cristal; únicamente recuerda ajustar el cálculo del divisor multiplicando la frecuencia por 4 y aplicando lo que hay en serial.c si usases el 18f14k50

también con un arduino nano se podría hacer.. la idea es anteponer en el script carácteres no imprimibles tipo 0x1A y tal para controlar lo que se ve en el lcd...

saludos!


Gracias por compartirlo, gmtii. ¿Empleaste un 18F14K50? Supongo que tu código funcionaría igualmente con el 16F687, que también tiene USART. Por lo que parece, lo montaste con un Xtal externo de 10MHz. ¿Se podría eliminar, aprovechando que el micro tiene el oscilador interno?

Saludos.

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #195 en: 01-05-2013, 18:10 (Miércoles) »
Saludos a todos desde la última vez que escribí.... a ver si pongo las fotos de como quedó el bicho y subo a Mi nube los archivos de configuración y demás, para que algún otro los aproveche....


Pero ahora Me ha surgido un pequeño problema:  El display va controlado por un script denominado "muestra.sh", basado en uno que se puso hace ya bastantes páginas atras.... su ejecución se realiza contínuamente en segundo plano con la opcion "&", pero en un determinado momento necesito "matarlo" para luego volverlo a ejecutar.... es evidente que:

killall -9 muestra.sh

hace lo que debe hacer.... el problema es que dicha sentencia forma parte de un script, y una vez ejecutada, no sigue el resto del script, sino que se para.... es debido a los mensajes que quiere mostrar en pantalla? o hay algun problema con estas sentencias referidas a procesos que acaban saliendo también de su propio proceso?

Alguna solución, y gracias por anticipado, como siempre....

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #196 en: 01-05-2013, 19:14 (Miércoles) »
es debido a los mensajes que quiere mostrar en pantalla?

Si ese fuese el problema solo tienes que direccionar la salida a /dev/null

Código: [Seleccionar]
killall -9 muestra.sh > /dev/null
Pero me temo que no pueda ser ese el problema.

Edito: estás invocando eso desde dentro del propio script muestra.sh? si es así, lógico que se mate a si mismo y no continue el script.
« Última modificación: 01-05-2013, 19:17 (Miércoles) por danitool »

Sir-Stephen

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #197 en: 01-05-2013, 20:13 (Miércoles) »
No, no... la invocación se hace desde otro script... y lo de redirigir a /dev/null no funciona..... hay alguna otra forma de matar el proceso asi en vivo y en directo y que el script que lo llame siga vivo?  Esto Me lleva calentando la cabeza ya dos dias.....

me109zito

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #198 en: 15-05-2013, 00:15 (Miércoles) »
Hola a todos, el router me detecta la tarjeta de sonido y puedo seguir el tutorial hasta la parte de arrancar el mpd (al instalar los paquetes el mpd-full no me lo encuentra y en su defecto instalo el mpd, creo que de ahí me viene el problema).

Al ejecutar el comando mpd, me tira los siguientes errores:
Failed to load database: Failed to open database file "/root/.mpd/mpd.db": No such file or directory
output: line 199: No such audio output plugin: alsa

Y la verdad que no se que mas probar, he intentado poner despues create-database, pero no le vale ese comando.

Un ayudita??

danitool

  • Visitante
Re: [Tutorial] Radio Wi-Fi con OpenWrt
« Respuesta #199 en: 15-05-2013, 12:07 (Miércoles) »
Para poder usar alsa necesitas tener mpd-full instalado no mpd-mini.