Differenze tra le versioni di "Web radio"
(→Bottoni: inverto) |
(→LED: inverto) |
||
Riga 127: | Riga 127: | ||
!BCM | !BCM | ||
|- | |- | ||
− | | | + | |4 |
− | | | + | |16 |
− | | | + | |23 |
|- | |- | ||
− | | | + | |5 |
+ | |18 | ||
|24 | |24 | ||
− | |||
|- | |- | ||
|3 | |3 |
Versione delle 15:13, 2 ago 2014
Con questo progetto si è realizzata la web radio della Comunità pastorale di Missaglia (LC).
Il sistema prevede il collegamento audio via Internet tra le chiese parrocchiali di Maresso e Missaglia, in modo tale da poter ascoltare presso la chiesa locale eventi che si svolgano nell'altra chiesa; quanto viene diffuso attraverso l'impianto audio della chiesa viene inoltre trasmesso via radio ai parrocchiani dotati di un particolare apparecchio radio. Quando non ci sono eventi in corso, viene raccolto e trasmesso lo stream di Radio Mater.
In un secondo tempo si renderà disponibile una playlist di brani da trasmettersi in automatico nel caso saltasse il collegamento ad Internet.
In futuro si valuterà se rendere fruibile al pubblico lo stream della web radio.
Il sistema è modulare, per far sì che si possano aggiungere in futuro nuove stazioni ricetrasmittenti e mettere così in comunicazione un maggior numero di chiese tra loro.
Indice
Prerequisiti
- connessione ad Internet (ADSL o superiore)
- impianti audio con almeno un ingresso e un'uscita liberi (possibilmente bilanciati)
Hardware
Per ogni stazione ricetrasmittente:
- 1 Raspberry Pi Model B Rev 2.0 [A]
- 1 set di dissipatori in alluminio [F]
- 1 ATXRaspi [L]
- 1 JY-MCU Mini RS232 to TTL Converter Module Board [F]
- 1 scheda SD SanDisk Ultra SDHC 8 GB [A]
- 1 scheda audio USB EDIROL UA-25 [ME]
- alcuni metri di cavo microfonico Cordial CMK 222 [T]
- a seconda del tipo di impianto audio:
- connettori XLR maschi Neutrik NC3MXX [T]
- connettori XLR femmine Neutrik NC3FXX [T]
- connettori RCA REAN NYS373-0 [T]
- connettori jack 1/4" tripolari Neutrik NP3X [T]
- connettori jack 1/4" bipolari Neutrik NP2X [T]
- 1 case rack 19"/1U Adam Hall 87407V [T]
Fornitori:
- [A] Amazon.it
- [F] FastTech
- [L] LowPowerLab Store
- [ME] Mercatino Musicale
- [MO] Mouser Electronics
- [T] Thomann
Pannelli
Per la progettazione dei pannelli dell'unità rack, una valida metodologia di lavoro potrebbe essere questa (seguendo anche questi consigli). Purtroppo non è possibile al momento adattarla al mondo del software libero, a causa della indisponibilità di strumenti CAD adeguati.
Per questo progetto abbiamo dunque preferito attendere l'arrivo di tutti i pezzi da montare sui pannelli, posizionandoli manualmente sui pannelli smontati in una disposizione indicativa, e prendere le misure con metro e calibro.
Le misure reali del pannello frontale da 1U da noi acquistato sono 482,6 mm × 44,3 mm; quelle del pannello posteriore sono 400 mm × 41 mm.
Console port
Il Raspberry Pi dispone di un'interfaccia seriale via GPIO, già configurata su Raspbian per funzionare come console seriale. Abbiamo quindi deciso di sfruttare questa potenzialità per poter facilmente accedere al sistema operativo in caso di malfunzionamento.
Occorre collegare i pin GPIO ad una scheda costituita da un integrato (MAX3232) e da cinque condensatori. Questa scheda, facilmente costruibile anche in casa, fornisce un'interfaccia RS-232 standard, a 5 V; il MAX3232 invece funziona anche a tensioni più basse, come quella del Raspberry Pi (3,3 V).
Noi abbiamo optato per l'acquisto di una scheda già pronta; esistono prodotti dotati di connettore saldato, ma abbiamo preferito acquistarne uno sprovvisto, per poter posizionare la scheda liberamente all'interno dell'unità rack.
Per questioni estetiche abbiamo deciso di evitare di posizionare un connettore D-sub sul pannello frontale; ci siamo quindi inventati una nostra soluzione proprietaria, che trae ispirazione dalla console port di Cisco.
PIN | BCM | |
---|---|---|
TX | 8 | 14 |
RX | 10 | 15 |
Bottone di accensione
La procedura è spiegata chiaramente sul sito ufficiale della scheda ATXRaspi. In sintesi abbiamo alimentato la scheda saldando direttamente due fili all'alimentatore; abbiamo attaccato un bottone e un LED saldando i fili del primo direttamente, e interponendo una resistenza adeguata per il LED; abbiamo saldato 4 pin header all'header P5 del Raspberry Pi (la fila più vicina all'header P1), ai quali abbiamo attaccato i 4 cavi diretti alla scheda ATXRaspi (alimentazione sui pin laterali e controllo in mezzo, GPIO28 a IN e GPIO30 ad OUT).
Il programma gpio
è già incluso in Raspbian; di conseguenza non è più necessario scaricare la libreria wiringPi
e procedere alla compilazione.
Abbiamo riscritto lo script shutdowncheck
sostanzialmente da zero, ponendolo nella directory /root/
:
#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin echo "ATXRaspi shutdown script starting..." echo "Asserting pins (28=in,low; 30=out,high)" gpio -g mode 28 in gpio -g write 28 0 gpio -g mode 30 out gpio -g write 30 1 while [ 1 ]; do if [ "$(gpio -g read 28)" = "1" ]; then echo "PIN 28 requested a SYSTEM HALT !" shutdown -h now break fi sleep 0.5 done exit 0
Infine abbiamo aggiunto a /etc/rc.local
la seguente riga, giusto prima di exit 0
:
exec /root/shutdowncheck &
Bottoni
N° | PIN | BCM |
---|---|---|
1 | 11 | 17 |
2 | 15 | 22 |
3 | 12 | 18 |
LED
N° | PIN | BCM |
---|---|---|
4 | 16 | 23 |
5 | 18 | 24 |
3 | 26 | 7 |
4 | 21 | 9 |
5 | 23 | 11 |
Software
Sistema operativo
Seguire le istruzioni presenti qui per ottenere una versione recente di Raspbian.
Una volta estratto l'installer sulla scheda SD, montare la scheda e creare al suo interno un file da salvare come installer-config.txt
, il cui contenuto sarà:
preset=server packages=apt-utils,vim,aptitude,bash-completion,ddclient,libio-socket-ssl-perl,python3-rpi.gpio,alsa-base,ices2,vlc-nox,hexedit mirror=http://mirrordirector.raspbian.org/raspbian/ release=wheezy hostname=pi # TO BE MODIFIED domainname= rootpw=raspbian # TO BE MODIFIED cdebootstrap_cmdline= bootsize=+50M # /boot partition size as given to fdisk rootsize= # / partition size in megabytes, leave empty to use all free space timeserver=time.nist.gov ip_addr=dhcp ip_netmask=0.0.0.0 ip_broadcast=0.0.0.0 ip_gateway=0.0.0.0 ip_nameservers= online_config= # URL to extra config that will be executed after installer-config.txt usbroot= # set to 1 to install to first USB disk cmdline="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline" rootfstype=ext4
Se si dispone di un server approx, dopo averlo configurato con il nuovo repository, modificare la terza riga di installer-config.txt
come segue:
mirror=http://IP_SERVER:9999/raspbian/
(ovviamente sostituendo IP_SERVER con l'indirizzo IP del server).
Smontare la scheda SD e inserirla nel Raspberry Pi; collegare il cavo di rete al Raspberry, possibilmente un monitor HDMI e alimentarlo. L'installazione dovrebbe procedere automaticamente. Seguire poi le istruzioni precedentemente indicate, al primo boot; in particolare creare ed attivare 512 MB di swap.
Impostare l'indirizzo IP come fisso, modificando il file /etc/network/interfaces
; nel nostro caso abbiamo scelto come indirizzo 192.168.0.40
.
Per impostare la scheda audio esterna come dispositivo di default, creare il file /etc/asound.conf
col seguente contenuto:
pcm.!default { type hw card 1 } ctl.!default { type hw card 1 }
VLC, così come è compilato nel pacchetto fornito, non consente di essere eseguito dall'utente root
. Per evitare di ricompilare tutto il programma è sufficiente sostituire la stringa "geteuid" con "getppid" usando un editor esadecimale:
# hexedit /usr/bin/vlc
Premere TAB per passare alla modalità ASCII; cercare la stringa con CTRL+S; posizionarsi sui caratteri da sostituire; digitare i caratteri; premere CTRL+X per salvare e uscire.
DNS dinamico
La condizione ideale sarebbe quella di disporre di un indirizzo IP statico per ogni ricetrasmittente. Purtroppo è molto più probabile che il contratto col provider offra un indirizzo IP dinamico.
Per rendere sempre raggiungibili i diversi host occorre quindi sfruttare un servizio di DNS dinamico. Per questo progetto si è deciso di sfruttare DNSdynamic. Occorre creare un account sul sito e poi registrare un dominio di terzo livello per ogni stazione ricetrasmittente.
Impostare il file di configurazione (/etc/ddclient.conf
) come segue:
# /etc/ddclient.conf protocol=dyndns2 use=web, web=myip.dnsdynamic.com server=www.dnsdynamic.org login=INDIRIZZO_EMAIL password='LA_MIA_PASSWORD' IL_MIO_DOMINIO.QUALCOSA.QUALCOS'ALTRO daemon=60 # check every 60 seconds ssl=yes # use ssl-support; works with ssl-library
Configurazione di IceS
Copiare il file /usr/share/doc/ices2/examples/ices-alsa.xml in /root/
e modificare le righe evidenziate in grassetto:
<?xml version="1.0"?> <ices> <background>0</background> <logpath>/var/log/ices</logpath> <logfile>ices.log</logfile> <logsize>2048</logsize> <loglevel>4</loglevel> <consolelog>0</consolelog> <stream> <metadata> <name>Example stream name</name> <genre>Example genre</genre> <description>A short description of your stream</description> <url>http://mysite.org</url> </metadata> <input> <module>alsa</module> <param name="rate">44100</param> <param name="channels">1</param> <param name="device">hw:1,0</param> <param name="metadata">1</param> <param name="metadatafilename">test</param> </input> <instance> <hostname>indirizzo_IP_corretto</hostname> <port>8000</port> <password>password_corretta</password> <mount>/example.ogg</mount> <yp>0</yp> <encode> <quality>0</quality> <samplerate>44100</samplerate> <channels>1</channels> </encode> <downmix>1</downmix> ' </instance> </stream> </ices>
Creare la directory per i log:
# mkdir /var/log/ices
VLC
Radio Mater mette a disposizione lo stream in quattro formati, pensati per quattro player multimendiali:
- iTunes, mono, codifica MPEG Audio layer 1/2/3 (mpga), campionamento 24000 Hz, bitrate 32 kb/s
- Windows Media Player, stereo, codifica Windows Media Audio 2 (WMA2), campionamento 32000 Hz (32 bit per campione), bitrate variabile attorno ai 32 kb/s
- RealPlayer, mono, codifica MPEG Audio layer 1/2/3 (mpga), campionamento 24000 Hz, bitrate 32 kb/s
- QuickTime, VLC 2.1.2 non lo supporta
Icecast
Icecast va installato su un server con banda sufficiente a permettere il download a tutti gli utenti che dovessero collegarli.
Per installarlo su un server Debian:
# aptitude install icecast2
Rispondere "No" alla proposta di configurazione.
Per configurarlo, modificare il file /etc/icecast.xml
riducendo il numero di client che si possono connettere da 100 a 5 e impostando le 3 password (source, relay e admin). Mettere anche ENABLE=true
in /etc/default/icecast2
, in modo che parta automaticamente.
Ricordarsi di aprire la porta 8000.
TODO
- interfaccia seriale (vedi anche qui, qui in basso, qui e qui)
- alimentazione
- disegno e stampa dei frontali
- reset
- testare il codec Opus con DarkIce