手里有一个第一代的树莓派开发板,很长时间都没有使用过。今天尝试着搭建一个支持AirPlay的服务。顺便回顾一下树莓派的烧录、配置、远程登录等操作。
AirPlay是苹果公司的在iOS4.2及OS X Mountain Lion中加入的一种播放技术,可以将iPhone、iPod touch、iPad及Mac(需要OS X Mountain Lion或更新版)上的视频镜像传送到支持Airplay的设备
前一段时间购买了“Beats X”这个耳机,被苹果设备间切换的流畅与无缝所吸引。想着时候可以让其他的音频设备也实现这样的无缝切换。查资料发现苹果自家的AirPlay技术可以实现这样的流畅体验(AirPlay与Beats X耳机的实现原理不同。前者是基于无线局域网,后者是蓝牙和icloud的协同配合。但是用户体方面很像,可以在苹果设备的控制中心控制)。基于网上的相关教程,通过树莓派运行一个Airplay服务,配合小音响实现相应的功能。
树莓派支持很多系统,这里选用的官方的raspbian系统。
下载后得到raspbian-jessie.zip
的压缩包,解压得到系统镜像raspbian-jessie.img
。通过 Win32DiskImager
软件烧录镜像到一张空白SD卡上。
待烧录完毕,插入树莓派,上电即可开机。
一般来说,登陆到树莓派的系统有三种方式:
1. 开发板外接显示器和键盘鼠标。
2. 通过VNC远程桌面登陆
3. 通过SSH登陆
这次用树莓派,只是需要搭建AirPlay服务,所以SSH远程登陆时最省时省力的方式。
目前的树莓派系统默认是关闭SSH服务的,所以无法在第一次直接使用SSH登陆,首先在刚才烧录好SD卡的根目录下建立一个名为SSH
文件(大写,且没有后缀名)。之后再插卡上电就可以使用了。
通过网线将树莓派和路由器相连,登陆路由器后台可以查询树莓派获得的IP地址。
知道树莓派的IP后可以通过软件PuTTY
进行登陆。
Host Name(or IP address)这里填写刚才查到的IP地址,Connection type选择SSH。其他选项默认,点击Open。依次输入树莓派的账户和密码:
在SSH登陆的基础上,可以配置实现远程桌面登陆(图形化界面)。
由于系统中默认没有安装相关服务,所以首先需要安装。
执行如下命令:
sudo apt-get install tightvncserver
安装完毕后设置密码
vncpasswd
启动服务
tightvncserver -geometry 800x600 :1
通过软件RealVNC Viewer
远程登陆图形化界面
VNC Server 这里填写IP地址:控制台号码。刚才命令tightvncserver -geometry 800x600 :1
表示以800x600的分辨率开启1号控制台。所以这里输入192.168.123.5:1
。之后点击登陆,输入密码就可以看到以图形化界面访问到树莓派。
如果希望每次都使用VNC登陆树莓派,可以配置其开机启动。具体方法可以参考文章《VNC远程登录树莓派的图形界面》。其中有详细的配置方法。
刚才的是通过网线使树莓派和电脑在同一个局域网下的。第一代的树莓派默认硬件是不支持无线网络的(貌似新的树莓派支持无线)。我采用了树莓派默认免驱的无线网卡RTL8188CUS
。通过USB接口和树莓派相连。在SSH登陆的情况下(SSH登陆对网络质量要求低)。通过命令:
lsusb
可以显示是否识别到了无线网卡
同时执行命令:
ifconfig
也可以查询无线网卡的信息(Wlan0)
通过一下命令, 搜素当前环境的无线网络。
sudo iwlist wlan0 scan | grep ESSID
通过如下命令备份原始文件。
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bak
通过命令
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
修改其中的内容
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB
network={
ssid="your_wfi_Name"
psk="your_wifi_PassWord"
key_mgmt=WPA-PSK
}
这里ssid
psk
key_mgmt
分别指无线网的名称、密码、加密方式。更改完后,CTRL+O
保存更改, CTRL+X
退出编辑器。
如果你用VNC的形式登录树莓派,则配置Wifi只要点击远程桌面右上角的Wifi图表进行连接即可。
树莓派默认的软件源地址比较慢(亲测只有20~30 kb/s)。所以普遍会更关国内的镜像源
SSH方式登录树莓派
输入以下命令
nano /etc/apt/sources.list
复制一下内容在其中,并且通过#
号注销原来的地址
deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
效果如下
之后通过CTRL+O
保存更改, CTRL+X
退出编辑器。
执行如下命令,进行更新系统软件。
sudo apt-get update && apt-get upgrade -y
以下的整个安装都是基于一个开源项目进行的,这是项目主页(https://github.com/juhovh/shairplay)。
其中给出了详细的安装方法。
通过SSH登录树莓派,分别执行如下命令
sudo apt-get install autoconf automake libtool
sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev
sudo apt-get install avahi-daemon
git clone https://github.com/juhovh/shairplay.git
进入对应的目录
cd shairplay
依次执行如下四条指令,进行代码的编译和安装
./autogen.sh
./configure
make
sudo make install
进入软件的当前目录 /home/pi/shairplay
。执行如下命令即可开启服务
shairplay -a your_AirPlay_Name
此时ios设备或者Mac设备连接在同一个Wifi下,便可看到支持AirPlay的设备,名称就是your_AirPlay_Name
。点击连接后,苹果设备的音频信号就通过Wifi传输到树莓派的3.5mm音频口。这里可以接入音响的信号输入口。
为了使树莓派每次上电后可以自动开启AirPlay服务。需要配置自启动,另外消除噪声。
依次执行如下命令,建立一个启动脚本文件。
cd /etc/init.d/
touch shairplay
nano shairplay
在其中复制一下内容
#!/bin/bash
#
# This starts and stops shairplay
#
### BEGIN INIT INFO
# Provides: shairplay
# Required-Start: $network
# Required-Stop:
# Short-Description: Free portable AirPlay server implementation similar to ShairPort.
# Description: Free portable AirPlay server implementation similar to ShairPort.
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# Source function library.
. /lib/lsb/init-functions
DAEMON="/usr/local/bin/shairplay"
DAEMON_ARGS="-a your_AirPlay_Name"
AIRPORT_KEY_DIR="/usr/local/share/shairplay"
[ -x $binary ] || exit 0
RETVAL=0
start() {
echo -n "Starting shairplay: "
start-stop-daemon --start --quiet --chdir $AIRPORT_KEY_DIR \
--exec "$DAEMON" -b --oknodo -- $DAEMON_ARGS
log_end_msg $?
}
stop() {
echo -n "Shutting down shairplay: "
start-stop-daemon --stop --quiet --exec "$DAEMON" \
--retry 1 --oknodo
log_end_msg $?
}
restart() {
stop
sleep 1
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status shairplay
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
;;
esac
exit 0
其中刚才的脚本文件中的DAEMON_ARGS="-a your_AirPlay_Name"
可以设置自己的名字。
DAEMON="/usr/local/bin/shairplay"
DAEMON_ARGS="-a your_AirPlay_Name"
AIRPORT_KEY_DIR="/usr/local/share/shairplay"
之后通过CTRL+O
保存更改, CTRL+X
退出编辑器。
依次执行如下命令。赋予脚本执行权限,并且更新配置信息。
chmod +x /etc/init.d/shairplay
update-rc.d shairplay defaults
执行如下命令,切换到用户目录
cd ~
依次执行如下命令,拷贝airport.key
mkdir /usr/local/share/shairplay
cp shairplay/airport.key /usr/local/share/shairplay
输入一下命令,在etc/rc.local
中添加内容
nano /etc/rc.local
添加的内容如下(在exit 0之前)。
# Don't run multiple instances - start just one screen, named "shairplay":
[[ $(screen -list | grep shairplay) == '' ]] &&
screen -dmS shairplay sh
# Keep shairplay perpetually running. When it crashes, we can just SIGKILL it, and it comes back:
[[ $(ps aux | grep -v grep | grep pts | grep '/usr/bin/shairplay') == '' ]] &&
screen -S shairplay -p 0 -X stuff "while true; do /usr/bin/shairplay --apname=Airamaplay --ao_devicename=default; sleep 2s; done
"
之后通过CTRL+O
保存更改, CTRL+X
退出编辑器。
之后通过重启树莓派,就直接可以在苹果设备中选择AirPlay服务了。
如果音响输出有噪声,可以尝试树莓派Audio的pwm模式。
执行如下命令
sudo nano /boot/config.txt
在最后增加如下配置参数
dtparam=audio=on
audio_pwm_mode=2
之后通过CTRL+O
保存更改, CTRL+X
退出编辑器。
感谢以下文章提供的帮助:
* VNC远程登录树莓派的图形界面
* 树莓派连接无线网设置wifi方法
* 跟着上手树莓派(三)—— 让你的有线音箱从此无拘无束
本文也发在我的个人微博(http://www.hhyqhh.top/)中,欢迎访问!