0%

树莓派制作空调遥控器1:使用红外发射管制作空调遥控器

使用红外接收管记录下遥控器的信号,再用红外发射管把信号发射出去,就完成了遥控的“克隆”。

树莓派已经闲置一段时间了,这几天心血来潮,擦去上面的灰尘,准备捣鼓一个空调遥控器。本文中空调遥控器的实现大部分参考《树莓派学习手记——制作一个空调遥控器(红外接收、发射的实现)》,因此内容会有重复,同时在此基础上增加了在网页中控制空调和天猫精灵控制空调。

空调遥控器系列教程

一、树莓派制作空调遥控器1:使用红外发射管制作空调遥控器
二、树莓派制作空调遥控器2:在网页中调用树莓派控制空调
三、树莓派制作空调遥控器3: 天猫精灵控制空调

实验准备

  1. 树莓派3B
  2. 红外接收管 HS0038B
  3. 红外发射管 TSAL6200
  4. 空调遥控器
  5. 云服务器一台,用于网页控制和接入天猫精灵。

实验原理

实验原理比较简单,使用红外接收管记录下空调遥控器发出的红外信号,再用发射管把信号发射出去。

硬件接线

红外接收管HS0038B 引脚图如下所示,引脚从左至右分别接到GPIO18、负极和正极。
HS0038B

红外发射管TSAL6200接线比较简单,二极管长脚是正极,接到GPIO17,短脚接到负极。
TSAL6200

安装与配置

首先更新系统(这一步很重要,请不要跳过):

更新系统
1
sudo apt-get update

更新完后,请确认系统内核版本在4.19.X后:

1
2
pi@raspberrypi:~ $ uname -r
4.19.46-v7+

安装LIRC:

sudo apt install lirc

修改配置文件名称:

1
2
3
cd /etc/lirc 
sudo cp lircd.conf.dist lircd.conf
sudo cp lirc_options.conf.dist lirc_options.conf

接下来修改启动配置文件/boot/config.txt

sudo vi /boot/config.txt

找到 lirc-rpi module部分, 修改为:

#Uncomment this to enable the lirc-rpi module
dtoverlay=gpio-ir,gpio_pin=18
dtoverlay=gpio-ir-tx,gpio_pin=17

以上两行分别指定红外接收管为GPIO18,红外发射管为GPIO17

修改LIRC配置:

sudo vi /etc/lirc/lirc_options.conf

修改之前:

driver = devinput
device = auto

修改之后:

driver = default
device = /dev/lirc0

修改完后重启树莓派。

判断连线是否正常

重启树莓派之后,正常情况下/dev目录下会多出两个lirc设备文件:lirc0lirc1,分别对应发射管和接收管:

pi@raspberrypi:~ $ ls /dev|grep lirc
lirc0
lirc1

测试红外发射管是否正常

使用命令行点亮红外发射管:

gpio write 0 1

命令运行后,GPIO17会被置为高电平,红外发射管会被点亮,不过肉眼看不到,打开手机相机可以看到红外发射管处于发光状态,说明发射管已经正常工作。接下来关掉发射管:

gpio write 0 0

测试红外接收管是否正常

进入红外接收模式:

mode2 -d /dev/lirc1

然后用遥控器对准红外接收管,随便按下一个键,正常情况下会输出:

Using driver default on device /dev/lirc1
Trying device: /dev/lirc1
Using device: /dev/lirc1
space 16777215
pulse 8958
space 4483
pulse 649
space 1610
pulse 653
space 1663
......

上面的pulsespace后面的分别代表红外管接收到的脉冲时间和间隔时间,即红外灯亮和灭的时间。输出的数值可能不同,能看到类似的输出,说明红外接收管已经正常工作。

记录遥控器的红外发射信号

进入红外接收模式:

mode2 -m -d /dev/lirc1

然后按下遥控器上的“开”按钮,得到以下输出:

Using driver default on device /dev/lirc1
Trying device: /dev/lirc1
Using device: /dev/lirc1
 16777215

 8960     4454      656     1634      660      535
  653      544      654     1634      660     1629
  654     1635      690     1599      655      543
  655      541      656     1632      663      535
  653     1636      689      508      680      517
  681      515      683      514      685      512
  686      511      687      512      686      508
  690     1599      695     1596      689     1599
  684     1605      690      507      680      517
  682      515      683      514      685     1604
  690      507      681     1608      686      511
  687      510      689     1600      683      514
  685    19868    

  760      435      690      507      691      506
  683      514      684     1605      689      507
  681      516      682      515      683      514
  768      429      686      511      688      509
  689      509      680     1609      685      511
  687      510      688      509      689      508
  681      516      682      515      684      513
  685      512      687      510      687      509
  689      508      764      434      682      515
  683      523      676      512      686      511
  687      510      689      508      690

上述输出,删除第一个很大的数字16777215及前面的内容,然后复制,就得到了“开空调”的红外信号。

注意:如果你看到的结果不一样,比如出现了xxxxx-pluse xxxx-space,请把xxxx-plusexxxx-space删掉(下图画线部分需删掉),并修改成与上面一样的格式:

接下来,创建配置文件:

sudo vi /etc/lirc/lircd.conf.d/aircon.lircd.conf

填入以下内容:

begin remote

    name  aircon
    flags RAW_CODES
    eps            30
    aeps          100

    gap          19991

    begin raw_codes
        name on
        8960     4454      656     1634      660      535
        653      544      654     1634      660     1629
        654     1635      690     1599      655      543
        655      541      656     1632      663      535
        653     1636      689      508      680      517
        681      515      683      514      685      512
        686      511      687      512      686      508
        690     1599      695     1596      689     1599
        684     1605      690      507      680      517
        682      515      683      514      685     1604
        690      507      681     1608      686      511
        687      510      689     1600      683      514
        685    19868    

        760      435      690      507      691      506
        683      514      684     1605      689      507
        681      516      682      515      683      514
        768      429      686      511      688      509
        689      509      680     1609      685      511
        687      510      688      509      689      508
        681      516      682      515      684      513
        685      512      687      510      687      509
        689      508      764      434      682      515
        683      523      676      512      686      511
        687      510      689      508      690

  end raw_codes

end remote

保存配置文件后,需要重启LIRC服务才能生效:

sudo systemctl restart lircd

测试开空调指令是否生效:

irsend SEND_ONCE aircon on

上述命令中,aircon是遥控器名称,对应配置文件中的name airconon是遥控器的指令,对应配置文件中begin raw_codes后面的name on。指令执行后,如果没有任何输出,说明指令正确执行了,正确情况下空调应该“嘀”的一声,然后打开了。如果空调没有反应,可以打开手机摄像头,对准红外发射管,再次执行开空调指令,并观察红外发射管是否闪动。如果能观察到闪动,说明信号已经发射出去,可以考虑将红外发射管移近空调(测试时4米可以控制,偶尔失灵)。
如果执行指令后,提示找不到遥控器:

unknown remote: "aircon"
Error running command: Input/output error

说明配置文件格式不对,可以参考我的配置文件

录制其它按钮

如果你已经成功地使用命令行打开空调,接下来就可以用同样地方法录制更多红外信号。接下来录制“关空调”地命令,跟上面一样,开启红外信号接收模式:

mode2 -m -d /dev/lirc1

然后在遥控器显示空调已经开启的情况下,按下遥控器上的电源键。然后复制得到的红外信号数据。编辑配置文件 /etc/lirc/lircd.conf.d/aircon.lircd.conf,在end raw_codes之前输入:

name  off
    【在这粘贴刚刚复制的关空调信号】

保存后依然需要重启LICR服务才能生效:

sudo systemctl restart lircd

重启后执行关空调指令:

 irsend SEND_ONCE aircon off

下一步

使用命令行控制空调不是最终目的,毕竟这样操作太复杂了,开启空调还得先打开电脑,那得多累?
比较方便控制空调的方式:

  1. 在网页中控制空调(支持手机/电脑访问)
  2. 使用天猫精灵口令打开空调