专业带感 业余高手自制带LCD显示的网络收音机

来源:bbs.hifidiy.net 发布者:tomjobim 版权:原创

Mightyohm.com Jeff设计的网络收音机有非常详尽的说明,但是是以Asus WL-520GU作为基础,不知道移植到DB120后是否成功。本着折腾的心态,开始尝试。电台需要用电脑连接到路由器,选台使用2个按钮来控制,液晶屏显示...

首先得感谢矿坛的gaochongjun1老大。那个自制硬件网络收音机的帖子真的非常好,直接刷完机稍微修改一下配置就能用了。网上免费的电台太多了,让我这个古典和爵士乐爱好者发现了一片新的天地!

但是总有些遗憾,因为还缺少一个重要的部分——LCD显示。所以我在网上查找,想看看老外有没有类似的设计。很遗憾的是播放MP3的资料比较多,网络收音机资料非常少,只找到了2个有参考价值:Mightyohm.com和piie.net。

Mightyohm.com Jeff设计的网络收音机有非常详尽的说明,但是是以Asus WL-520GU作为基础,不知道移植到DB120后是否成功。本着折腾的心态,开始尝试。

因为我是搞自动控制的,对openwrt可以说是门外汉。经过近1个多月业余时间慢慢摸索,终于成功了。基本是安装老外的思路来的。现在就把它分享出来,独乐乐不如众乐乐。

电台需要用电脑连接到路由器,添加以后就可以直接使用了。选台使用2个按钮来控制,按一下会加或减,长按会快进或快退。液晶屏上左侧显示当前正在播放的电台名称等信息,右侧为设定的电台号。液晶屏下半屏显示当前播放的曲目信息。这些信息都来自于网络电台。

网络收音机

如果以前没搞过openwrt,可能看下面的步骤会比较晕:

1、刷固件。就直接使用矿坛gaochongjun1帖子里的固件,里面声卡的驱动都有了。再次感谢gaochongjun1。

2、参考自制硬件网络收音机的帖子,先使用mplayer的功能,看看一切是否正常。

只需对网络部分进行配置,应该就可以用了。特别要注意,在network/diagnostic下有ping的功能,一定要ping得通。我开始ping不通时,试mplayer的功能却是正常的。一定要ping得通,否则下面的步骤就无法进行。

3、安装mpd和mpc

root@OpenWrt:~# opkg update

root@OpenWrt:~# opkg install mpdmpc

为mpd配置目录

root@OpenWrt:~# cd ~

root@OpenWrt:~# mkdir .mpd

root@OpenWrt:~# mkdir music

root@OpenWrt:~# mkdir .mpd/playlists

在/etc/mpd.conf中,修改以下配置

# An example of an ALSA output:

#

audio_output {

        type                "alsa"

        name                "USB AUDIO"

##        device                "hw:0,0"        # optional

##        format                "44100:16:2"        # optional

##        mixer_type      "hardware"        # optional

##        mixer_device        "default"        # optional

##        mixer_control        "PCM"                # optional

##        mixer_index        "0"                # optional

}

mixer_type "software"

name内需填入实际的USB声卡名称,可以通过运行alsamixer命令来查看。

mixer_type "software"是单独添加的一行(在alsa大括号外面),否则音量控制不起作用。

现在已经可以用SSH操作来听电台了。

执行以下命令,运行mpd和mpc

root@OpenWrt:~# mpd

root@OpenWrt:~# mpc

添加一个电台:

root@OpenWrt:~# mpc add http://192.184.9.79:8006

开始播放:

root@OpenWrt:~# mpc play

应该能听到CINEMIX的广播了,同时会有状态显示。

网络收音机

4、安装stty,用于TTL串口通讯:

root@OpenWrt:~# opkg install coreutils-stty

以下命令用于修改串口的通讯波特率,在后面的脚本文件里会用到。

root@OpenWrt:~# stty 9600 < /dev/ttyS0

通讯速度不要太高,否则AVR容易收到乱码。也可能是我试验时用的是飞线,容易受干扰。

5、脚本文件

用于接收单片机发来的命令,并将电台信息发送回单片机。我就是直接使用老外的,修改了部分以适应我的要求。

网络电台地址在interface.sh里添加。播放时按照顺序,从1开始。如Mpcplay  2即播放第2个电台。具体看脚本吧,还是很简单的。将interface.sh和display.sh拷贝到路由器的 oot下面。

修改运行权限:

root@OpenWrt:~# chmodugo+x interface.sh

root@OpenWrt:~# chmodugo+x display.sh

可以用以下命令运行:

root@OpenWrt:~# mpd

root@OpenWrt:~# ./interface.sh

如果有TTL刷机线,可以连到路由器,波特率设置成9600。利用串口调试助手发送命令可以调节电台和音量。根据现在的脚本文件,命令格式为tun:xxvol:yyy,xx是电台地址(1-20),yyy是音量(0-100),最后需要跟一个控制符’ ’

6、AVR单片机程序

程序总体思路同老外的,但是我按照我的思路和习惯修改了很多。老外用winavr编程,使用M168,我使用iccavr和M8。选台使用2个按钮来控制,按一下会加或减,长按会快进或快退。音量使用电位器控制,这个功能对耳机直插声卡比较有用。最好不要用这一音量调节功能,因为声卡DAC的有效分辨率会降低,信噪比会恶化。将ADC0脚通过一个几千欧的电阻接5V即可使音量永远100%,或者修改interface.sh脚本文件直接给个固定的音量值。

使用的是外部晶振,3.68M,图上未画出。看门狗要关掉。BOD要使能,因为电台会被记忆到EEPROM。程序里的注释不是很详细,但应该能看得懂。以后我准备用旋转编码器控制选台,同时使用大的液晶屏(12864)

网络收音机

7、其他修改

修改 /etc/inittab,将2行屏蔽掉:

::sysinit:/etc/init.d/rcS S boot

::shutdown:/etc/init.d/rcS K stop

#tts/0::askfirst:/bin/ash --login

#ttyS0::askfirst:/bin/ash --login

tty1::askfirst:/bin/ash –login

修改/etc/sysctl.conf添加以下2行:

# Disables the magic SysRq key

kernel.sysrq = 0

使用以下命令使路由器启动后Mpd自动启动

root@OpenWrt:~# ln -s /etc/init.d/mpd /etc/rc.d/S93mpd

在luci System/startup里面(/etc/rc.local里面),添加3行:

amixer set PCM 100%

sleep 5

Root/interface.sh

这里的PCM要根据实际情况修改,可以通过运行alsamixer命令来查看。使用100%是因为音量由mpc控制,这里就放最大值。大功告成!

关注【HIFI音响】公众平台

    ID:HIFI中国音响网 ID:hifidiy_2016