# Rdio internet amb Raspberry Pi i LCD 16x2 amb 5 botons
# =======================================================
# Abril 2013, Xindes, http://pip.cat/bloc
# 
# http://pip.cat/bloc/2013/04/24/radio-internet-amb-raspberry-pi-i-lcd-16x2-amb-5-botons/

Funcionament:
-------------
S'acopla el kit LCD + botons a sobre una raspberry, es connecta a una cadena de msica o altaveus, i es controlen les rdios des dels botons.

Les emisores estan agrupades en diferents llistes, per exemple per escoltar el futbol, per msica kanyera, comercial, jazz, etc.

Hi ha 4 versions del programa disponibles:

radio.py :
#  up    : carrega llista segent
#  down  : carrega llista anterior
#  left  : anterior emisora
#  right : segent emisora
#  select: alterna play/stop. Si es mant premut 2 segons alterna LCD on/off, si 4 segons apaga la RPi.

radio2.py :
	Es controla a travs d'un men "grfic" amb esquerra, dreta i select.
	Prova de men, experimental, no gaire cmoda ;-)
	
radio3.py :
	Combina les dues anteriors. Es pot paginar entre llistes i emisores amb els 4 botons de direcci, i amb el bot select s'accedeix a un men per fer diferents accions (ms cmode i ms opcions que haver de mantenir el bot premut)

radio4.py :
	Continuaci de radio3.py amb la incorporaci de podcasts

Demo:
http://www.youtube.com/watch?v=TVemm_1OPO4  (primera prova amb radio.py)
http://www.youtube.com/watch?v=wwMLzdL0w7g  (amb radio3.py)

Per provar-ho sense tenir el kit lcd+botons, es pot executar python prova.py


Preparatius:
------------
*) Installar MPD i MPC (Music Player Daemon i Client):
$ sudo apt-get install mpd mpc

*) Establir sortida udio:
$ sudo amixer cset numid=3 1 (see the man pages for amixer)

*) Establir memria GPU al mnim(16) ja que funcionar headless [opcional]
$ sudo raspi-config

*) Installar package configobj per python
$ sudo apt-get install python-configobj

*) Installar package unidecode per python
$ sudo apt-get install python-unidecode

*) Installar el relatiu al LCD 16x2:
http://learn.adafruit.com/adafruit-16x2-character-lcd-plus-keypad-for-raspberry-pi/usage
$ sudo nano /etc/modules
I afegir 2 lnies:
i2c-bcm2708
i2c-dev

$ sudo apt-get install python-smbus
$ sudo apt-get install i2c-tools

*) Copiar carpeta radio a /home/pi/ o on es vulgui i editar radio4.py per establir la variable RUTA segons on s'hagi copiat.

*) Afegir sudo python /home/pi/radio/radio4.py a /etc/rc.local per executar-se al arrencar la RPi.


Detall de fitxers:
------------------

- radio.conf
LLISTES = per establir manualment els fitxers amb llistes d'emisores a utilitzar. Anomenar els fitxers llista_NomAmostrar.txt
llista = indica la ltima llista escoltada per carregar-la al iniciar. Aquest valor s'actualitza automticament.
actuals = indica la ltima emisora escoltada per a cada llista, per posicionar-s'hi al carregar-la. Aquest valor s'actualitza automticament, per si s'afegeixen ms fitxers a LLISTES cal incrementar l'array.
volum = indica el volum al iniciar. Aquest valor s'actualitza automticament.

- llista_*.txt
Contenen les diferents emisores que estaran disponibles a cada llista.
El format s simple: Una lnia que comena amb # d'on s'agafar el nom a mostrar i a la lnia segent la url de l'emisora. Es poden deixar lnies en blanc desprs de les urls.
Les llistes i emisores inicials sn una petita mostra personal per provar, que caldr anar completant. La de 40 emisores de Jazz s d'en Joan Quintana.

- radio.py
El programa per escoltar les emisores. s el meu primer contacte amb python i les coses es podrien millorar per ms o menys fa el qu havia de fer. Es pot modificar a voluntat ... ;-)

- radio2.py
Versi del programa que es controla a travs d'un men "grfic". Esquerra i Dreta per seleccionar opci, Select per fer-la. Dalt i Baix no s'utilitzen.

- radio3.py
Versi del programa que combina radio.py i radio2.py.
Al arrencar surt la rdio com a la versi 1 (dalt i baix per canviar de llista, esquerra i dreta per emisores)
Per al fer clic al bot select es mostra el men "grfic" on es pot fer play/pause/stop, veure info de l'emisora, la hora, apagar/encendre el lcd, o triar una emisora aleatria.

- radio4.py (la que utilitzo)
Continuaci de radio3.py amb l'afegit de l'accs a canals de podcasts

- prova.py
Prova inicial abans de tenir el kit lcd+botons, gestionada per teclat des de la consola.


Ms info:
---------

*) Links:
http://learn.adafruit.com/adafruit-16x2-character-lcd-plus-keypad-for-raspberry-pi/
http://wiki.joanillo.org/index.php/Raspberry_Pi:_Internet_R%C3%A0dio

http://www.listenlive.eu/index.html
http://www.listenlive.eu/spain.html
http://www.internet-radio.com/
http://www.shoutcast.com/
http://www.live365.com

Nota:
Algunes emisores ofereixen urls amb extensi .pls o .m3u i no es poden afegir directament amb mpc add ...
En aquests casos, editar el fitxer .pls o .m3u amb "bloc de notes", copiar la url que contingui, i amb aquesta url fer el mpc add ... o afegir-la a llista_*.txt


*) Material:
- Raspberry Pi model B
http://raspberrypi.org/

- Kit LCD 16x2 + 5 botons
http://www.adafruit.com/products/1110
http://shop.pimoroni.com/collections/kits/products/adafruit-rgb-16x2-lcd-keypad-kit-for-raspberry-pi

- USB WiFi
http://www.amazon.es/TP-Link-TL-WN725N-M%C3%B3dem/dp/B008B7PZU4

- SD 4gb classe 10
http://www.amazon.es/Platinum-Class-SDHC-Secure-Digital/dp/B00509CO3M


Modificacions:
--------------
v01 : versi inicial.
v02 : 
- afegida la hora al display. Desactivar-ho a voluntat ;-)
- desactivat per defecte el sudo halt al sortir. Activar-ho a voluntat ;-)
v03 : 
- afegit radio2.py (controlada a travs d'un men "grfic")
- afegit radio3.py (combinaci radio.py i radio2.py)
v04 :
- Opcions 'r' i 'R' al men per seleccionar una emisora aleatriament (r: dins llista actual. R: entre totes les llistes)
- Opci volum al men per poder canviar-lo i afegida variable volum a radio.conf
  (aix permet connectar auriculars o altaveus sense control de volum)
- Logo estelada. Freedom for Catalonia !!*!!
v05 :
- mpc add "..." enlloc de mpc add ... per permetre urls amb carcters problemtics com els parntesi.
- Petit canvi a carregar_fitxer() per permetre comentaris inicials als fitxers llista_*.txt
- Afegit radio4.py (radio3.py ms podcasts)
- Afegida opci de podcasts a travs de 2 "pantalles"
  1) Selecci del canal rss llegint del fitxer podcasts.txt (esquerra, dreta, select)
  2) Selecci del podcast a escoltar (esquerra, dreta, select) (dalt tornar a canals, baix tornar a men)
- Afegit fitxer podcasts.txt amb alguns exemples de canals rss. Modificar a voluntat amb els canals volguts (mxim 14)
- Afegida variable canal a radio.conf per recordar ltim canal utilitzat

v06 :
- Utilitzaci del package unidecode per convertir millor els accents (que no t el lcd)
Installar amb $ sudo apt-get install python-unidecode
- Urls dels podcasts agafats de <enclosure url="..."/> enlloc de <link>...</link>
