万博网页版登陆页派论坛

红外遥控篇 打造增强型Raspberry Pi

树老大 发表于 2013-3-27 16:32:38 | 显示全部楼层 |阅读模式

需要的硬件:

  • 一个红外接收管,型号可以是TSOP1238/TSOP2238等可以3.3V电压下工作的38KHz红外接收管。
  • 一个红外遥控器,可以是电视机、机顶盒等的遥控器。但别拿空调遥控器这种自带状态逻辑的遥控器来折磨自己。
  • 连接红外接收管:

    不同的红外接收管连线可能不太一样,需要参考相应的Datasheet。以TSOP 1238为例的话,当红外线接收窗朝向自己时,从左到右三个引脚分别为:

    1. GND,接地,RPi PIN 6
    2. VS,电源,接3.3V电源,RPi PIN 17
    3. OUT,数据输出,接GPIO 24,RPi PIN 18

    由于Raspberry Pi的GPIO只能接收3.3V的输入,所以红外接收管的电源务必要接3.3V的供电。我自己用的红外接收管的型号是TSOP 1838(引脚顺序是OUT, GND, VS),按lirc_rpi项目页面的说法,这个管子应该在5V供电下才能正常工作,不过我还是只接了3.3V,发现也能用。

    系统软件安装:

    lirc_rpi项目为Linux内核提供了支持GPIO口的红外接收管的驱动,在最新的Raspbian系统中应该已经包含。如果你的系统中没有这个模块,也许需要自己重新编译内核。具体可以参考lirc_rpi项目主页。

    然后需要安装用户态的服务进程:

    sudo apt-get install lirc

    加载lirc_rpi内核模块:

    sudo modprobe lirc_rpi gpio_in_pin=24 gpio_out_pin=23

    注意,在加载lirc_rpi时必须指定输入端口是GPIO 24,跟实际接线一致。输出端口设为GPIO 23,是因为我不需要这个输出端口,而目前我们GPIO 23口是空着的。

    测试红外接收是否正常:

    sudo mode2 -d /dev/lirc0

    如果按遥控器上的键,屏幕上能显示出一串pluse和space值的话,多半就是正常了。

    配置下/etc/lirc/hardware.conf:

    ...
    LIRCD_ARGS="--uinput"
    ...
    DRIVER="default"
    ...
    DEVICE="/dev/lirc0"

    让lirc学习一下你遥控器上的按键,在我的例子中,请至少学习5个按键,分别做为上(up)、下(down)、左(left)、右(right)、选择(sel):

    sudo /etc/init.d/lirc stop
    #学习按键
    irrecord -n -d /dev/lirc0 ~/lircd.conf
    #把学习后生成的配置文件作为lircd的配置文件
    sudo mv ~/lircd.conf /etc/lirc/lircd.conf
    sudo /etc/init.d./lirc start

    配置完后,可以用irw命令测试遥控器是否工作正常。

    配置~/.lircrc.conf文件,把按键与需要触发的行为进行关联:

    begin    prog = lcdmenu     button = up    config = upendbegin    prog = lcdmenu    button = right    config = rightendbegin    prog = lcdmenu    button = left    config = leftendbegin    prog = lcdmenu    button = down    config = downendbegin    prog = lcdmenu    button = sel    config = selend

    为Raspberry Pi添加液晶屏控制菜单,我参考了Github上的RaspberryPiLcdMenu,这个项目实现了使用一个带五个小按钮的液晶屏套件作为硬件基础来显示与操作一个菜单的系统,我没有这个套件,而且我是用红外遥控器而不是小按钮来操作,所以需要重写跟按钮有关的代码,通过lirc提供的接口去获取遥控器的按键信息,很容易,可以参考我已经实现好的代码,在Buttons.py中:

    git clone https://github.com/lifanxi/rpimenu.git

    RaspberryPiLcdMenu项目提供了一个很灵活的菜单配置系统可以很方便的添加新的菜单项,我给它添加了遥控fmd播放豆瓣FM的菜单功能项(参考lcdmenu.xml)。

    一切就绪,启动lcdmenu.py程序:

    sudo python lcdmenu.py

    如果你的配置没有问题,这时就可以在液晶屏上看到定制后的菜单,并可以用遥控器来遥控操作了,按上下键选项不同的菜单项,向右键进入子菜单,向左退回上一级菜单,选择键用于根据屏幕提示确定某些特定的操作。

    130316a.jpg

    添加了Douban.fm的菜单


    130316b.jpg

    豆瓣FM播放中,可以滚动显示曲名和播放进度


    一切调试完成后,您还可以把加载lirc_rpi模块和启动lcdmenu.py的命令加到Raspberry Pi的启动脚本中,这样系统一启动就可以让液晶显示和菜单自动生效,菜单操作中已经预设了关机、重启、设置IP地址等功能,这对于headless使用Raspberry Pi的同学来说,是一件非常方便的事情。

    失忆 发表于 2013-3-29 22:32:32 | 显示全部楼层
    但别拿空调遥控器这种自带状态逻辑的遥控器来折磨自己。
    楼主,这个怎么说呢?我想用红外来试下,没有电视和机顶盒,只能拿控制来试了
    zhc520 发表于 2013-12-25 11:50:06 | 显示全部楼层
    这个不错哦,有空试试.
    kpnew9 发表于 2014-2-2 21:19:32 | 显示全部楼层
    红外还是有用的啊,回头试试
    touchstone 发表于 2014-12-31 17:15:27 | 显示全部楼层
    我第二天再进行操作的时候,就不起作用了,mode2 -d /dev/lirc0就读不出数据了。不知道为啥
    touchstone 发表于 2014-12-31 17:16:25 | 显示全部楼层
    失忆 发表于 2013-3-29 22:32
    但别拿空调遥控器这种自带状态逻辑的遥控器来折磨自己。
    楼主,这个怎么说呢?我想用红外来试下,没有电视 ...

    我第二天再进行操作的时候,就不起作用了,mode2 -d /dev/lirc0就读不出数据了。不知道为啥
    touchstone 发表于 2014-12-31 17:31:16 | 显示全部楼层
    我是这样的情况,第一次是按照李凡希的教程走的gpio_in_pin=23,等我第二天再用的时候,mode2 -d /dev/lirc0后按下遥控器就没有输出。
    后来我改成GPIO18后,按下遥控器就有输出了,不知道为什么,博主可以告知吗?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版 | Archiver | 万博网页版登陆页派论坛 ( 粤ICP备15075382号-1 )