101.8: mi radio, y cada día la de menos gente.
Hoy vengo a contaros un proyecto sencillo pero muy interesante que se puede hacer con la raspberry pi. Lo bueno de esto, es que apenas necesitas hardware adicional, ya que con solo conectar un cable al pin GPIO4 ya tienes toda la infraestructura montada. Además, este cable es opcional, pero necesitamos algo de potencia, por lo que es recomendable. En caso de no ponerlo, el rango que alcanzaríamos es de unos 10 cm (en lugar de los supuestos 100m con cable), y para eso, casi es mejor ni molestarse en hacer lo siguiente.
Optimizando hardware
Queremos la máxima transferencia de potencia con los medios que tenemos. La longitud de onda (?) está directamente relacionada con la frecuencia (f).
?=v/f
donde v es la velocidad. Estamos en el aire, por lo que usaremos la velocidad de la luz (no es el vacío, ok, luego ajustamos).
?=c/f
La longitud de la antena (L) también está relacionada con la longitud de onda de la frecuencia a la que emitimos.
L=?/4
Por último quitamos un 5% por posibles atenuaciones del medio en el que se transmite la onda. La fórmula nos queda de la siguiente forma.
L=(3?10^8)/(4?f)?0,95
Ahora podemos decidir a qué frecuencia emitimos dependiendo de la longitud del cable o viceversa. Si queremos emitir a la frecuencia 101.8MHz, la longitud del cable será de 70cm.
Primeras pruebas
Con la raspberry actualizada, lo primero que hacemos es crear una carpeta donde iremos almacenando lo que vamos a hacer en este proyecto.
mkdir pifm cd pifm
A continuación nos descargamos los archivos necesarios, y lo descomprimimos.
wget http://www.omattos.com/pifm.tar.gz tar xvzf pifm.tar.gz
Una vez hecho esto, comprobamos que nos funciona. Viene un archivo para realizar la prueba que se llama «sound.wav». Los últimos dígitos son la frecuencia a la que podemos emitir. En mi caso he buscado una libre, y la he «conquistado».
//desde el directorio sudo ./pifm sound.wav 101.8
Si todo ha funcionado correctamente, estaremos escuchando la canción de Star Wars.
Esto es muy interesante, pero una vez que hayamos reproducido la canción un par de veces en distintas frecuencias, habrá perdido la gracia, así que ahora vamos a probar a emitir en stereo.
Para hacer esta prueba también hay un archivo de prueba.
sudo ./pifm left_right.wav 101.8 22050 stereo
22050 es la frecuencia de muestreo.
Para entender algo mejor el funcionamiento de cómo funciona el stereo he encontrado esta imagen en wikipedia. Explica el diagrama de generación y emisión de una señal MPX. +info
Hasta aquí todo muy bien, pero ahora vamos a emitir alguna canción nuestra. Para ello, en primer lugar conseguimos alguna canción en formato .wav. Luego la tenemos que guardar en la raspberry. Para transferir los archivos, he usado el protocolo SFTP con la ayuda del FileZilla. Después con el comando anterior vamos probando con distintas canciones.
Automatizando el sistema
A continuación vamos a instalar PiFM Play. De esta forma, podemos reproducir una lista de canciones sin que tengamos que estar todo el rato ejecutando un comando con la canción que queramos escuchar. Según el autor «no es bonito, pero funciona», así que vamos a ello.
En primer lugar instalamos ffmpeg y sox
sudo apt-get install ffmpeg sox libsox-fmt-all
Ahora descargamos PiFMPlay y lo descomprimimos.
wget https://github.com/Mikael-Jackhelln/PiFMPlay/archive/master.zip unzip master.zip
Movemos la carpeta pifmplay a /home/pi y borramos la carpeta PiFMPlay que no nos hace falta.
Modificamos el archivo pifmplay para escoger la frecuencia 101.8 como la de defecto. Aquí podemos poner la que queramos.
//en el directorio donde se encuentra el archivo nano pifmplay //buscamos la linea de la frecuencia por defecto que viene con 91.3 //y ponemos nuestra favorita
A continuación proporcionamos permisos de ejecución.
sudo chmod +x pifm sudo chmod +x pifmplay
Ahora ya tenemos todo configurado. Vamos a hacer una carpeta donde subiremos todas nuestras canciones. En este caso, las voy a subir en .mp3 ya que es el formato en el que las tengo, y con lo que hemos ido instalando, ahora somos capaces de reproducir en este formato. Usamos el FileZilla de nuevo para ello.
Para retransmitir todas las canciones que hemos puesto en nuestra carpeta escribiremos lo siguiente
sudo sh $HOME/pifmplay/pifmplay "$HOME/pifm/canciones" & //Lo que aparece entre comillas es la ruta de la carpeta donde //hemos guardado la música.
El símbolo & es para que cuando pulsemos Ctrl+C, la música quede sonando en segundo plano, y podamos seguir haciendo cosas con nuestra raspberry.
Si no queremos escuchar las canciones de determinada carpeta, sino que lo que nos apetece es escuchar una canción en concreto, la ruta que pondremos será la de la canción. En caso de que no queramos usar la frecuencia que hemos definido antes como frecuencia por defecto, el comando quedaría tal que así
sudo sh $HOME/pifmplay/pifmplay "$HOME/pifm/canciones" 99.3 //en la frecuenca 99.3 por ejemplo
Para poder interactuar con estas canciones como si fuera un reproductor de música, usaremos los siguientes comandos.
//Pausar la retransmisión sudo sh $HOME/pifmplay/pifmplay pause //Continuar sudo sh $HOME/pifmplay/pifmplay resume //Parar sudo sh $HOME/pifmplay/pifmplay stop //Siguiente cancion sudo sh $HOME/pifmplay/pifmplay next
Y aquí finaliza el experimento.
Retransmitir voz
Esto de aquí no lo he probado porque no era mi idea principal llegar a esto, pero suena interesante si a alguien le apetece hablar por la radio. Hace falta un micrófono usb.
arecord -fS16_LE -r 22050 -Dplughw:1,0 - | sudo ./pifm - 101.8 22050
Un par de links
Por último, os dejo aquí un artículo en inglés sobre este tema que me ha parecido muy interesante.
Aquí os dejo otra forma de hacerlo: Make
Con esto, ya hemos conseguido nuestra emisora fm, y podemos retransmitir la música que nos gusta, o lo que queramos, sin anuncios de ningún tipo.