香蕉派+悦读fm:打造红外遥控FM播放器

最近天气冷得整个人都不好了,早上怎么都起不了床。于是想着可以在被窝里听听FM,以便催化我的清醒度。手机上的app可以听FM呀,但是还要解锁,打开app,然后选音频。太烦了,还不如遥控器直接。

某天,把自己的小音箱上老闪老闪的LED给剪了,然后就不怕把它放在卧室会影响睡眠了。另外,香蕉派自己内置了红外接收装置,而前不久买的arduino套件里面就有一个红外遥控器恰好可用。
总结下需要的硬件:

  1. banana pro 一块 (配置可上网)
  2. 小音箱一个
  3. 红外遥控器一个

安装红外IR

  1. 安装lirc(一个开源的红外控制软件):
    sudo apt-get install lirc

  2. 修改/etc/lirc/hardware.conf文件内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # /etc/lirc/hardware.conf
    #
    # Arguments which will be used when launching lircd
    LIRCD_ARGS=""

    #Don't start lircmd even if there seems to be a good config file
    #START_LIRCMD=false

    #Don't start irexec, even if a good config file seems to exist.
    #START_IREXEC=false

    #Try to load appropriate kernel modules
    # if LOAD_MODULES=false , modules must be preloaded, i.e. during boot (/etc/modules)
    LOAD_MODULES=true
    #MODULES="sun4i_ir"
    # newer kernel
    MODULES="sunxi-ir"

    # Run "lircd --driver=help" for a list of supported drivers.
    DRIVER="devinput"

    # usually /dev/lirc0 is the correct setting for systems
    DEVICE="/dev/input/event0"

    # Default configuration files for your hardware if any
    LIRCD_CONF="/etc/lirc/lircd.conf"
    LIRCMD_CONF=""
  3. 测试是否可以识别遥控器:
    sudo evttest

    如果没有装,要先安装evttest。
    运行命令后,就开始安静,若控制台有打印出什么,说明遥控器可被识别

  4. 下载记录遥控器的命令的模板:
    wget http://lirc.sourceforge.net/remotes/generic/NEC.conf

  5. 获取可用按键名:
    irrecord -l

    根据自己要记录的按键,把每个名字先想好

  6. 记录按键:
    irrecord -H devinput -d /dev/input/event0 NEC.conf

    按照提示,输入第5步所想好的按键名并按下对应的按键。

  7. 最后生成的NEC.conf.conf文件中,按键部分如下:

    1
    2
    3
    4
    5
    6
    7
    begin codes
    KEY_CHANNELDOWN 0x01004500000001 0x00000000000000
    KEY_CHANNEL 0x01004600000001 0x00000000000000
    KEY_CHANNELUP 0x01004700000001 0x00000000000000
    KEY_PREVIOUS 0x01004400000001 0x00000000000000
    KEY_NEXT 0x01004000000001 0x00000000000000
    end codes

    将最后一列的0x00000000000000删除后保存,然后将NEC.conf.conf文件拷贝到/etc/lirc/lircd.conf里。

    注意:/etc/lirc/lircd.conf的第一行不能为空

  8. 重启lirc:
    sudo /etc/init.d/lirc restart
    输出如下:

    1
    2
    3
    4
    5
    6
    root@lemaker:/etc/lirc# sudo /etc/init.d/lirc restart
    [ ok ] Stopping execution daemon: irexec:.
    [ ok ] Stopping remote control daemon(s): LIRC:.
    [ ok ] Loading LIRC modules:.
    [ ok ] Starting remote control daemon(s) : LIRC :.
    [ ok ] Starting execution daemon: irexec:.
  9. 测试验证
    irw

    按下遥控器上刚才配置的按键,若出现了内容,则表示配置成功。例如:

    1
    2
    3
    root@lemaker:/etc/lirc# irw
    0001004700000001 00 KEY_CHANNELUP xixi
    0001004000000001 00 KEY_NEXT xixi

编写红外遥控脚本

获得悦读FM的文章信息

悦读FM提供了一个脚本,可以获取文章的信息:yuedu.fm-fetcher
根据指导,可以得到位于output目录下的文章信息。

配置lircrc文件

lircrc文件可以是/etc/lirc/lircrc,或者~/.lircrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
root@lemaker:/etc/lirc# cat lircrc
begin
prog = xixi
button = KEY_CHANNELDOWN # 按键信息
config = KEY_CHANNELDOWN # 按键对应的配置
end
begin
prog = xixi
button = KEY_CHANNEL
config = KEY_CHANNEL
end
begin
prog = xixi
button = KEY_CHANNELUP
config = KEY_CHANNELUP
end
begin
prog = xixi
button = KEY_PREVIOUS
config = KEY_PREVIOUS
end
begin
prog = xixi
button = KEY_NEXT
config = KEY_NEXT
end
begin
prog = xixi
button = KEY_PLAY
config = KEY_PLAY
end

安装python-lirc

sudo apt-get install python-lirc

编写脚本

play.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#-*- coding: utf-8 -*-
import lirc
import os
import json
import random
def play():
'''
获得悦读FM音频列表
'''
items = [item for item in os.listdir("./output") if item.startswith("articles")]
item = items[random.randint(0,len(items)-1)]
articles = json.load(file(os.path.join("./output",item)))
for art in articles["list"]:
os.popen("mpg123 " + art["audio"])

if __name__ == "__main__":
sockid = lirc.init("xixi")
rc = lirc.nextcode()
print rc
if "KEY_PLAY" in rc: #"KEY_PLAY"对应遥控器上的PLAY键
play()

测试一下

  1. 运行:python play.py
  2. 按下遥控器上的PLAY键
  3. 享受FM吧~~

可以怎么用?

  1. 把获得悦读FM的文章信息的脚本加入crontab,这样就可以定时检查更新了
  2. 把脚本加入开机自启动,这样即使小派不小心重启也不怕

接下来……

  1. 新增几个channel,可以选择播放豆瓣FM,本地音乐集等等
  2. 监控按键信息,可以选择下一首
  3. 实现PAUSE功能
  4. 对接显示屏,显示正在播放的音频的名字~

参考文档

  1. 香蕉派(Banana Pi)使用红外IR之安装篇
  2. python-lirc 1.2.1
  3. The lircrc file format
请言小午吃个甜筒~~