最近天气冷得整个人都不好了,早上怎么都起不了床。于是想着可以在被窝里听听FM,以便催化我的清醒度。手机上的app可以听FM呀,但是还要解锁,打开app,然后选音频。太烦了,还不如遥控器直接。
某天,把自己的小音箱上老闪老闪的LED给剪了,然后就不怕把它放在卧室会影响睡眠了。另外,香蕉派自己内置了红外接收装置,而前不久买的arduino套件里面就有一个红外遥控器恰好可用。 总结下需要的硬件: 1. banana pro 一块 (配置可上网) 2. 小音箱一个 3. 红外遥控器一个
安装红外IR
安装lirc(一个开源的红外控制软件):
sudo apt-get install lirc
修改
/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=""测试是否可以识别遥控器:
sudo evttest
>如果没有装,要先安装evttest。 >运行命令后,就开始安静,若控制台有打印出什么,说明遥控器可被识别下载记录遥控器的命令的模板:
wget http://lirc.sourceforge.net/remotes/generic/NEC.conf
获取可用按键名:
irrecord -l
>根据自己要记录的按键,把每个名字先想好记录按键:
irrecord -H devinput -d /dev/input/event0 NEC.conf
>按照提示,输入第5步所想好的按键名并按下对应的按键。最后生成的
NEC.conf.conf
文件中,按键部分如下:将最后一列的1
2
3
4
5
6
7begin codes
KEY_CHANNELDOWN 0x01004500000001 0x00000000000000
KEY_CHANNEL 0x01004600000001 0x00000000000000
KEY_CHANNELUP 0x01004700000001 0x00000000000000
KEY_PREVIOUS 0x01004400000001 0x00000000000000
KEY_NEXT 0x01004000000001 0x00000000000000
end codes0x00000000000000
删除后保存,然后将NEC.conf.conf
文件拷贝到/etc/lirc/lircd.conf
里。 >注意:/etc/lirc/lircd.conf
的第一行不能为空重启lirc:
sudo /etc/init.d/lirc restart
输出如下:1
2
3
4
5
6root@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:.测试验证
irw
>按下遥控器上刚才配置的按键,若出现了内容,则表示配置成功。例如:# 编写红外遥控脚本 ## 获得悦读FM的文章信息 悦读FM提供了一个脚本,可以获取文章的信息:yuedu.fm-fetcher 根据指导,可以得到位于output目录下的文章信息。1
2
3root@lemaker:/etc/lirc# irw
0001004700000001 00 KEY_CHANNELUP xixi
0001004000000001 00 KEY_NEXT xixi
配置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
31root@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
endsudo 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()python play.py
2. 按下遥控器上的PLAY键 3. 享受FM吧~~
可以怎么用?
- 把获得悦读FM的文章信息的脚本加入crontab,这样就可以定时检查更新了
- 把脚本加入开机自启动,这样即使小派不小心重启也不怕
接下来……
- 新增几个channel,可以选择播放豆瓣FM,本地音乐集等等
- 监控按键信息,可以选择下一首
- 实现PAUSE功能
- 对接显示屏,显示正在播放的音频的名字~