树莓派音乐服务器
2016年05月13日

概述

一直比较喜欢听轻音乐,尤其在linux上遇到了mpd和ncmpcpp以后,感觉听音乐真的是一件非常愉快的事情.最近刚接触树莓派,现在的想法就是用树莓派做一个音乐服务器专门负责音乐播放,这样即便夜晚听音乐,也不用担心机箱散热风扇噪音了.

最终想实现的效果:

  1. 用树莓派播放本地音乐
  2. 定期从PC同步音乐
  3. 用手机控制音乐播放

树莓派的优点就不赘述了,下边是用到的东西:
树莓派2B
16G TF卡
hifi 声卡
无线网卡
配合hifi 声卡的外壳
HDMI转VGA
TF卡读卡器

以上链接只是本人购买的物品链接,仅供参考。hifi声卡估计是按照国外电路翻版出来的板子。

由于卧室没有给树莓派预留网线,所以采用wifi连接,树莓派2B又没有wifi模块,所以单独买了USB无线网卡和HDMI转VGA连接线,方便调试.
至于外壳,由于HIFI声卡是插在GPIO接口上,组装完成,传统外壳已经容不下了,只能用专门的外壳了,也是考虑到以后可能长期开机,减少灰尘对元器件的影响。

硬件组装

  1. HIFI声卡插到GPIO插槽
  2. 组装外壳,把树莓派放进去
  3. 插上USB无线网卡
  4. 插上键盘

系统配置

先用读卡器把TF卡插到电脑上,linux直接使用dd就可以写入镜像文件了
考虑到用的是HIFI声卡,所以直接从hifiberry官网找的配置完的系统镜像(raspbian-preconfigured.img)

写入镜像

dd bs=4M if=raspbian-preconfigured.img of=/dev/sdb 

重复查看进度

watch pkill -USR1 -n -x dd

初次启动

初次启动镜像会进入rasp-config,建议先更改键盘布局,local,时区
如果使用大容量存储卡(超过4G),建议在rasp-config里,展开文件系统[expand filesystem]

键盘布局

Interationalisation Options-Change Keyboard Layout-Ennyah DKB-1008-Other-English (US)-English (US,alternative international)-enter-enter-enter-finish
之后就可以插到树莓派上了,接通电源自动开机。默认树莓派的帐号是pi 密码raspberry,sudo -i 再改root密码。
为了省事,在树莓派上也建了一个与PC同名的帐号

useradd -m -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio -s /bin/bash user1
passwd user1 

用户组这么长,我是直接照抄的pi帐号

网络配置

先查看下usb设备,看看有没有识别出来

lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 007: ID 09da:000a A4 Tech Co., Ltd Optical Mouse Opto 510D
Bus 001 Device 004: ID 04b3:301a IBM Corp. 
Bus 001 Device 005: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
Bus 001 Device 006: ID 04b3:301b IBM Corp. SK-8815 Keyboard

#RTL8188CUS 802.11n WLAN Adapter就是无线网卡了

查看无线信号

iwlist wlan0 scan

修改无线配置

vi /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="ssid_name"    #wifi名称
    psk="password"      #wifi密码
    key_mgmt=WPA-PSK    #加密方式
    scan_ssid=1         #隐藏ssid广播 需要设置
    priority=1          #wifi的优先级 存在多个wifi配置时,可以根据优先级进行选择
    #proto=RSN          #协议类型 RSN就是WPA2
    #pairwise=CCMP      #加密方式 CCMP就是AES加密,比TKIP加密更好

}

启动网络服务

/etc/init.d/networking start 

直到提示ip分配,就算成功了

检查网络是否连通

ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_req=1 ttl=54 time=8.52 ms
64 bytes from 61.135.169.125: icmp_req=2 ttl=54 time=6.27 ms
64 bytes from 61.135.169.125: icmp_req=3 ttl=54 time=6.45 ms

更新源设置(可选)

修改软件源,加快后续软件包的下载速度
官方源列表 http://www.raspbian.org/RaspbianMirrors
以清华源为例

cd /etc/apt/ && cp sources.list sources.list.bak #备份现有的源文件
vi sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main contrib non-free pi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ wheezy main contrib non-free pi
apt-get update && apt-get upgrade

如果镜像源更新失败,可以使用source.list.bak覆盖

vim配置(可选)

raspberry默认使用vi,还是要重新安装个vim

apt-get install vim

设置为默认编辑器,顺带更新下ls的缩写

vim /etc/profile
export EDITOR=vim
alias ls='ls --color'
source /etc/profile

修改vim配置

vim /etc/vim/vimrc
set nu          "行号
set showmode    "显示当前的模式
set ruler       "显示光标位置
set autoindent  "换行自动对齐
syntax on       "语法高亮

更新系统编码(可选)

vim /etc/locale.gen
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.GB2312 GB2312
zh_CN.18030 18030

locale-gen

设置环境编码

echo "export LANG=zh_CN.UTF-8 >> /etc/profile"
source /etc/profile

ssh配置

考虑到以后同步和配置方便,配置下ssh

echo "192.168.1.11 PC" >> /etc/hosts
vim /etc/ssh/sshd_config
Port 9999

/etc/init.d/ssh start

同样的配置也在PC上进行,这样就双向可以用ssh连接

echo "192.168.1.12 raspberry" >> /etc/hosts
vim /etc/ssh/sshd_config
Port 9999

/etc/init.d/ssh start

测试下连接是否正常,另外PC上如果配置了防火墙,也要修改下防火墙规则

ssh -p 6666 raspberry

再在PC配置下ssh key,方便以后免密码登录

#直接回车 不设置密码
ssh-keygen -t rsa
ssh-copy-id -p 6666 -i ~/.ssh/id_rsa.pub raspberry
#测试
ssh -p 6666 raspberry

PC同理,不再赘述
做到这一步,其实树莓派已经可以拔掉显示器连接线,用PC配置了。

字体编码设置(可选)

复制字体到树莓派,由于是用root连接,所以需要提前修改root密码

scp -P 6666 /path/of/PC/font.ttf root@raspberry:/usr/share/fonts

TF卡挂载

查看USB设备设备名称

parted -l

raspberry自带ntfs支持,不过最近重装的过程中发现,第一次可以用mount /dev/sdx1 /mnt/usb挂载,而后第二次重装发现总是只读挂载,-o rw都无效,而ntfs-3g没有这个问题

挂载

apt-get install ntfs-3g
# 手动挂载 
# mount -t ntfs-3g -o umask=0000 /dev/sdc1 /mnt/xxx
umount /mnt/xxx
如果提示busy 可以用 fuser /mnt/xxx 查看占用的进程 载pkill掉
或者umount -fl /mnt/xxx 

写入到fstab文件

echo "/dev/sdc1 /mnt/usb ntfs-3g umask=000   0 1" >> /etc/fstab
mount -a

由于音乐文件实在太多,所以打算单独用一张TF卡存储音乐文件。考虑到访问权限,以及以后可能在别的系统上使用,所以用ntfs格式
挂载设备 添加umask才有写权限

系统声音

alsamixer
调节PCM声音到最大

mpd 相关

安装mpd相关软件包

apt-get install mpd mpc ncmpcpp

配置mpd

vim /etc/mpd.conf

music_directory			"/mnt/usb/audio"
playlist_directory		"//lib/mpd/playlists"
db_file			        "/var/lib/mpd/database"
log_file			    "/var/lib/mpd/log"
pid_file			    "/var/lib/mpd/pid"
state_file			    "/var/lib/mpd/state"
user				    "mpd"
bind_to_address		    "0.0.0.0"
bind_to_address		    "/var/lib/mpd/socket"
port				    "6600"
follow_outside_symlinks	"yes"
follow_inside_symlinks	"yes"
password                "helloworld@read,add,control,admin"

#输出配置只保留这三项
audio_output {
    type		        "alsa"
        name		        "My ALSA Device"
        mixer_type          "software"
}

filesystem_charset      "UTF-8"
id3v1_encoding			"GBK"

其中mixer_type一定要修改成software,这样mpd的音量就由自己决定而不是由系统全局音量决定,安卓上mpdroid只有在software配置,才会显示音量控制条.
以上配置就是音乐文件夹的位置,需要修改下,其他仅供参考
创建音乐文件夹,然后再找首歌,放进去

mkdir ~/music
cd ~/music
wget http://path/of/music.mp3
ncmpcpp

打开ncmpcpp播放看看,效果如何

cron 配置

用cron定期同步PC上的音乐文件到树莓派上,并更新mpd数据库

同步脚本

vim /root/syncMusic.sh
#!/bin/bash
#同步音乐文件到树莓派
rsync -r --delete -e 'ssh -p 9999' user1@PC:/path/of/music /home/user1/music
if [ $? == 0 ];then
#更新mpd设置
mpc --host helloworld@localhost update
#同步成功
echo `date +"%Y-%m-%d %H:%M:%S"`" sync completed" >> $HOME/.sync.log
else
#同步失败
echo `date +"%Y-%m-%d %H:%M:%S"`" sync failed" >> $HOME/.sync.log
fi

增加执行权限

chmod +x syncMusic.sh

增加计划任务

crontab -e
* */6 * * * /home/user1/syncMusic.sh

查看下计划任务

crontab -l

root 增加网络连通检测,卧室信号实在太差,又不打算花钱买AP中继,所以找个脚本应付下,效果还可以.

vim /root/checknetwork.sh
#!/bin/bash
ping -c 1 www.baidu.com > /dev/null

if [ $? != 0 ];then
/etc/init.d/networking restart
fi

增加执行权限

chmod +x checknetwork.sh

增加计划任务,每分钟检测一次

crontab -e
* * * * * bash /root/checknetwork.sh

路由设置

由于树莓派需要定期从PC上同步音乐文件,所以需要把PC和树莓派的IP固定下来
以TP-link路由为例,DHCP服务器-静态地址分配-添加新条目,mac地址绑定同样配置
mac地址可以用ifconfig -a查看

手机控制

我使用的是Android手机,google play上可以找到很多mpd的客户端,我选的mpdroid。同样的,苹果商店也有类似的东西。
mpdroid-Settings-connection settings-Default connection settings
Host 树莓派IP
Port 6600
Password helloworld #mpd.conf里的设置

重新打开mpdroid,enjoy!