ideas

许多家电是红外控制的,与外界的交互通过一个红外遥控器,我们能否通过编程使其变成智能家居呢,好比我们想做这样一件事:夏天傍晚下班前,检查室内温度,如果室温高于30摄氏度,则打开空调

要做到上边这件事,我们未必需要购买最新的带app控制的智能空调,利用旧式空调也可以。空调由红外遥控器控制,如果我们能控制红外的收发,模拟发射这些控制信号,我们就可以hack这些旧家电,使其可编程,变成智能家电

目标

  • 红外线控制
  • 微信控制
  • 自然语言控制(chatbot)
  • blockly编程控制
  • 与其他传感器组合(温湿度)

硬件环境

  • 树莓派(我的当前环境是树莓派3,其他版本也可以)
  • 红外接收器/红外发射器(我用的是这款红外线扩展板,能同时支持红外收发)

LIRC

LIRC是我们需要的软件.

LIRC 是 Linux Infrared remote control的缩写,是linux系统下开源的软件包。从名字中可知,这个软件让你的Linux系统能够控制红外线信号。

LIRC有个具有图形用户界面的前端,叫做KDELirc

在使用LIRC之前建议了解一下红外协议,这样有助于你理解交互过程和debug

安装

sudo apt-get install lirc

配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#sudo vim /boot/config.txt #在文件结尾添加
dtoverlay=lirc-rpi
gpio_in_pin=18
gpio_out_pin=17

#sudo vim /etc/lirc/hardware.conf  #编辑LRIC的配置文件
LIRCD_ARGS="--uinput --listen"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

# 重启生效
sudo /etc/init.d/lirc restart

# irrecord --list-namespace

录制电风扇

1
2
3
4
5
6
7
8
# 开始录制
irrecord -d /dev/lirc0 ~/lircd.conf #按照提示操作即可,录制完后会让你输入按键名

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

#查看录制好可以使用的按键名
irsend LIST /home/pi/lircd.conf ""
irsend SEND_ONCE /home/pi/lircd.conf KEY_POWER

录制空调红外

空调遥控器这种带逻辑控制的比较麻烦.每次发射的都是含有温度、模式、制冷制热等一连串的指令,按照之前irrecord指令生成conf文件,行不通

只能使用raw的原始码,记录也是通过mode2 命令实现

先制作模板:

1
2
sudo /etc/init.d/lirc restart
irrecord  -f -d /dev/lirc0 ~/lircd.conf #制作模板

得到

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
begin remote

  name  /home/pi/lircd.conf
  flags RAW_CODES
  eps            30
  aeps          100

  gap          19886

      begin raw_codes

          name KEY_OPEN
               90     102     331

      end raw_codes

end remote

接下来开始录制

1
2
3
4
5
6
7
8
9
mode2  -d /dev/lirc0 > /tmp/temp.code  # space 10969878 
cat /tmp/temp.code | sed -n '2,$p' | grep -o  -E "[0-9]+" | xargs echo  # 移除第一行,之后把所有数字取出
# 把上述指令写入 ~/lircd.conf 的 KEY_OPEN里
# 值得注意的是 ~/lircd.conf文件里的空格十分重要

sudo cp ~/lircd.conf /etc/lirc/lircd.conf
sudo /etc/init.d/lirc restart
# irsend LIST /home/pi/lircd.conf "" #列出指令
irsend SEND_ONCE /home/pi/lircd.conf KEY_OPEN

这是我最后的~/lircd.conf内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
begin remote

  name  /home/pi/lircd.conf
  flags RAW_CODES
  eps            30
  aeps          100

  gap          19886

      begin raw_codes

          name KEY_CLOSE
               9075 4411 731 453 751 1580 730 476 729 477 731 1576 729 478 729 1579 729 460 747 477 729 477 729 476 730 1578 729 477 730 476 731 477 733 472 730 476 731 475 730 477 728 480 728 477 729 1578 731 477 727 477 731 475 730 478 728 477 730 476 730 1578 754 430 753 1577 735 471 730 477 752 1553 756 453 753 19884 756 1551 758 451 754 450 756 451 756 451 754 449 756 451 757 429 777 449 758 449 758 449 756 451 755 450 756 1550 757 428 779 451 755 451 755 450 757 450 755 450 757 428 779 449 757 448 760 447 758 449 757 449 756 451 756 450 756 449 756 1551 757 1550 757 451 756
          name KEY_OPEN
               9112 4390 724 459 747 1584 725 459 746 1582 727 1582 726 481 724 1583 726 482 729 478 745 459 726 481 745 1564 724 480 725 481 746 459 725 488 741 438 770 457 748 457 749 459 747 459 748 1559 748 436 773 455 750 457 748 459 748 457 750 458 747 1559 749 459 746 1558 750 457 749 458 748 1558 751 455 749 19889 748 1559 750 457 748 458 749 458 750 457 747 458 748 458 749 435 771 458 749 457 748 459 745 461 745 460 747 1561 726 481 729 455 769 458 725 482 725 481 724 483 724 481 726 482 745 460 725 482 725 482 722 482 726 482 725 481 724 480 724 1583 725 1582 727 1583 726


      end raw_codes

end remote

我把开关机命名为KEY_OPEN/KEY_CLOSE(可以完全自定义)

之后开关机的指令分别为:

1
2
3
4
#开机
irsend SEND_ONCE /home/pi/lircd.conf KEY_OPEN
#关机
irsend SEND_ONCE /home/pi/lircd.conf KEY_CLOSE

测试有效!搞定

之后结合温度传感器或者微信之类的其他功能模块就可以完成丰富的智能控制了

配置文件中,KEY的名字有限制,BLOCKLY_KEY会报错 KEY_BLOCKLY就行

参考