使用树莓派(Raspberry Pi)实现智能家居(2/4)

  继上一篇文章使用树莓派(Raspberry Pi)实现智能家居(1/4)介绍了树莓派的一些基本参数和用途之后,下面让挨踢小茶带大家看看如何使用树莓派实现智能家居吧。

  首先想象一下,您心目中的智能家居是怎样的?能够用APP控制台灯,电视,空调,门窗……?甚至用语音来进行控制?其实参考世面上已经在销售的产品以及在Kickstarter和Indiegogo上正在众筹的产品,你可能会有一些新的看法和思路。但是在挨踢小茶心目中,智能家居需要做的不仅仅是一款能用APP控制的智能插座,或者能代替各种遥控器的遥控终端,而是一个像Google Next一样,能像您的一个私人管家,可以自动、无时无刻、让您无法察觉的为您服务。比如说,在我每天固定8点钟起床的时候,可以自动为我打开窗帘,煮好咖啡……在我每天固定7点钟下班回家的时候,可以为我提前打开空调,打开电视机和我喜欢的电视节目。当然每个人的心中都有不一样的诉求,这个就因人而异了。

  好废话不多说了,下面来介绍一下技术实现方法。实现目标是利用APP和语音来控制红外开关。

  首先了解一下需要用到的GPIO接口。

树莓派的GPIO口

  不同版本的GPIO引脚定义略有不同,具体可以查看下面这张表格。

Raspberry-Pi-GPIO-pinouts

需要用到的部件:

  • 树莓派一个
  • 红外接收模块
  • 红外发射模块
  • 杜邦线若干
  • 红外插座
  • 红外遥控器
  • 面包板(选用)

  大部分部件都可以在某宝上购得……

安装必须的软件

  升级树莓派版本

sudo apt-get update && sudo apt-get dist-upgrade

sudo apt-get upgrade

  安装LIRC – Linux Infrared Remote Control,LIRC是开源的用来控制树莓派接收和发射红外信号的软件

sudo apt-get install lirc

  编辑你的 /etc/modules文件,加入以下代码

lirc_dev
lirc_rpi gpio_in_pin=23 gpio_out_pin=22

  修改/etc/lirc/hardware.conf文件,如下(黑色字体部分为需要修改的地方)

LIRCD_ARGS=”–uinput

# 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
LOAD_MODULES=true

# Run “lircd –driver=help” for a list of supported drivers.
DRIVER=”default”

# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE=”/dev/lirc0
MODULES=”lirc_rpi

# Default configuration files for your hardware if any
LIRCD_CONF=””
LIRCMD_CONF=””

安装红外接收器

  根据下图所示的引脚对应关系将红外接收模块接到树莓派上(不同版本的接线方式不一样,具体请查看第一张图中的GPIO引脚定义做相应的更改)。在这个地方,挨踢小茶因为购买了劣质的杜邦线,导致红外接收模块一致无法正常工作,这个问题排错了2个星期才最终得到解决……

raspberry-pi-version1-modelb-gpio-pinout

  另外请注意红外接收器的电压数,大部分是3V的。插的时候理论上可以支持热插拔,但保险起见建议将树莓派关机断电之后进行操作。

  对于大部分红外接收器来说,接法是

vcc 连 pin1 (3.3v)
gnd 连 pin6(ground)
data连 pin12(gpio18)

调试红外接收器

  开机后,加载lirc模块

sudo modprobe lirc_rpi

  然后结束lrcd进程

sudo kill $(pidof lircd)

  启动测试

sudo mode2 -d /dev/lirc0

  红外接收器已经打开,处于监听状态。这个时候,利用任何红外发射器(可以是电视遥控器或其他遥控器)对红外接收模块按任意按钮,就可以在树莓派终端上看到类似如下的代码,看到这个代码便证明红外接收模块是正常工作的。如果没有看到,请检查你的接线、电压、以及通过lsusb查看是否加载了相应模块。

pulse 1681
space 4816
pulse 1695
space 4784
pulse 1333
space 3638

配置红外发射器

  首先清除接收器指令

sudo kill $(pidof lircd)

  列出接收器常用的指令,挑选其中自己需要的指令,记住便可

sudo irrecord –list-namespace

  一般常用的指令可能是这些

KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
KEY_ESC
KEY_ENTER
KEY_SPACE
再次清除接收器指令
sudo kill $(pidof lircd)
打开红外接收器
irrecord -d /dev/lirc0 ~/lircd.conf

  按照指示,请先按enter二次,再按住你的遥控器任意键,直到屏幕上的……………….跑完。
跑完后,你刚刚按住的那个键,请一直重覆按,直到屏幕上的……………….跑完。

  接下来就是设定了,请先输入
  KEY_UP
  然后按遥控器上按你要设定为 上 的那个键,然后再按ENTER
再输入
  KEY_DOWN
  然后按遥控器上按你要设定为 下 的那个键,然后再按ENTER

  重覆上述动作,一直到你设定完成,最后按enter离开。
  以上步骤完成了红外信号录入的动作,之后你将可以在/home/pi/lircd.conf文件中看到你刚才录入的红外信号。

配置红外发射器

  首先关闭树莓派将红外发射器接到对应的GPIO口上,对于大部分红外接收器来说,接法是

vcc 连pin2(5v)
gnd连pin6(ground)
data连pin11(gpio17)

更改LIRC配置文件,将xxx替代为你自定义的名字。

sudo cp ~/lircd.conf /etc/lirc/xxx.conf

编辑/etc/lirc/xxx.conf文件,将name ***/lircd.conf 更改为 name xxx,这里的xxx需要与上面的一致

  进行测试,将xxx替代为前面定义的文字,并且执行定义好的按钮KEY_UP, KEY_DOWN等

sudo irsend SEND_ONCE xxx KEY_UP
sudo irsend SEND_ONCE xxx KEY_DOWN
sudo irsend SEND_ONCE xxx KEY_LEFT
sudo irsend SEND_ONCE xxx KEY_RIGHT
sudo irsend SEND_ONCE xxx KEY_ENTER

  现在可以使用家庭电视遥控器或其他红外遥控器的按钮录入树莓派,然后最后用irsend命令来测试这个红外信号是否成功发射!

  至此,已经可以用树莓派的CLI对家里的一些设备做一些简单的控制啦!不过前提是,这个家庭设备需要和插座之间再接一个红外插座,通过控制这个红外插座的开合,来对家庭设备做间接的控制。

  如果使用APP或者语音来控制呢?可以参考后面的两篇文章使用树莓派(Raspberry Pi)实现智能家居(3/4),使用树莓派(Raspberry Pi)实现智能家居(4/4)。



 
 » 除非注明,本博客文章均为挨踢小茶原创,转载请以链接形式标明本文地址
该日志由 挨踢小茶 于2015年11月13日发表在 智能家居 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 使用树莓派(Raspberry Pi)实现智能家居(2/4) | 挨踢茶馆
关键字: , ,

使用树莓派(Raspberry Pi)实现智能家居(2/4):目前有19 条留言

  1. 4楼
    小白:

    楼主,想问一下我执行到sudo mode2 -d /dev/lirc0时,然后过了很久才会出现
    space 24
    pulse 55
    space 72
    pulse 57
    space 21
    pulse 56
    space 23
    pulse 55
    而且我都没有按遥控器他都出来了,这是什么原因呢

    2017-03-08 下午 4:57 [回复]
    • 之前也遇到过,尽量将红外接收器放在少干扰的地方,并且尝试调整方向。

      2017-03-08 下午 5:06 [回复]
      • 小白:

        旁边没有红外发射器,没有按都会出现这种内容,楼主可以用QQ联系你吗?

        2017-03-08 下午 5:09 [回复]
        • 有的时候一些其他的设备也会发出类似红外频谱的,所以最好先尝试换一个地方,调整方向,让他不会自动出现这些代码。
          还有就是我之前出现这个情况是因为使用了面包板,而面包板的接触不好,你可以尝试换线缆,并且采取直接连接的形式。

          2017-03-09 下午 3:54 [回复]
  2. 地板
    哥特人:

    service irsend 显示:
    inactive
    not found(no such file or directory)
    这个怎么解决?怎么开启?
    现在执行sudo irsend SEND_ONCE xxx KEY_UP 显示错误:
    irsend: could not connect to socket
    irsend: connect refused

    那个,博主能加下我么?

    2017-03-03 下午 7:18 [回复]
  3. 板凳
    小白:

    楼主,请问一下接红外线这里,modules文件lirc_rpi gpio_in_pin=23 gpio_out_pin=22这里的23、22对应的是哪些引脚啊,还有我对照这你的来做,为什么加载lirc模块sudo modprobe lirc_rpi时无法发现lirc_rpi这个设备呢,而且我红外接收头也已经接上去了。 😯

    2017-03-03 下午 5:07 [回复]
  4. 沙发
    哥特人:

    sudo irsend SEND_ONCE xxx KEY_UP
    到这一步了始终无法成功,
    显示
    irsend: could not connect to socket
    irsend: no such file or directory
    楼主知道这是为什么?

    2017-02-19 下午 10:17 [回复]
    • 检查一下,irsend服务有没有正常开启

      2017-02-28 下午 5:26 [回复]
      • 小白:

        我也遇到过这样子的问题,请问一下irsend服务怎么开启啊,怎么检测他有没有正常开启??

        2017-03-11 下午 12:23 [回复]
        • 手上没有测试机器,可以这样开启。
          sudo /etc/init.d/lirc start

          2017-03-11 下午 10:07 [回复]
          • 小白:

            楼主,我是利用实验室的电视机遥控器进行红外录入的,主要想利用树莓派终端的指令进行控制实验室的电视机,然后按照你的教程其他一切都顺利,就是到了最后一步sudo irsend SEND_ONCE xxx KEY_UP时始终无法成功,而且我也已经改了名字了,都是提示irsend: could not connect to socket
            irsend: No such file or directory这样的错误,也使用了sudo /etc/init.d/lirc start开启了irsend服务,网上查了很多方法还是不行,楼主请多多指教一下

            2017-03-15 上午 11:17 [回复]
            • 哥特人:

              我总算知道为什么了,第一,这里的引脚gpio写错了,是18和17,改过来,第二,这里有一点没讲,就是初始化错误,lirc是不会去自动找到设备的,boot/config有要改的,自己百度,很多,lirc.conf和lircmd.conf配置要加入include”自己的信号文件路径”这句话,最后出来运行这两句:killall lircd
              lircd -d /dev/lirc0

              2017-03-15 下午 10:25 [回复]
              • 谢谢你的提醒。
                你们用的是哪个版本?不同版本的引脚定义不太一样的,这个我可能要声明在文章里。

                2017-03-16 下午 5:43 [回复]
                • 哥特人:

                  pi3 B 型号,用的是2017-1-11raspbain。
                  顺便说一下,后面第三章的HTTP那里也是页面无法运行成功,显示错误:the site can not be touched,这个还没搞清楚是为什么?

                  2017-03-16 下午 6:31 [回复]
                  • 小白:

                    哥特人,求回复一下 🙂

                    2017-03-20 下午 2:46 [回复]
              • 小白:

                18跟17是上面lirc默认的两个引脚,加上去也可以。如果引脚写错的话执行sudo mode2 -d /dev/lirc0 是没有space pulse之类的输出的,请问一下boot/config是要改什么呢,还有lirc.conf和lircmd.conf配置文件include自己的信号文件是修改/etc/lirc/的还是原本没有复制之前的,可以具体点吗,谢谢

                2017-03-18 下午 5:00 [回复]
              • 小白:

                我可以加QQ邮箱联系一下你吗,哥特人

                2017-03-22 下午 8:00 [回复]

发表评论



快捷键:Ctrl+Enter

无觅相关文章插件,快速提升流量