使用红外接收管记录下遥控器的信号,再用红外发射管把信号发射出去,就完成了遥控的“克隆”。
树莓派已经闲置一段时间了,这几天心血来潮,擦去上面的灰尘,准备捣鼓一个空调遥控器。本文中空调遥控器的实现大部分参考《树莓派学习手记——制作一个空调遥控器(红外接收、发射的实现)》,因此内容会有重复,同时在此基础上增加了在网页中控制空调和天猫精灵控制空调。
空调遥控器系列教程
一、树莓派制作空调遥控器1:使用红外发射管制作空调遥控器
二、树莓派制作空调遥控器2:在网页中调用树莓派控制空调
三、树莓派制作空调遥控器3: 天猫精灵控制空调
实验准备
- 树莓派3B
- 红外接收管 HS0038B
- 红外发射管 TSAL6200
- 空调遥控器
- 云服务器一台,用于网页控制和接入天猫精灵。
实验原理
实验原理比较简单,使用红外接收管记录下空调遥控器发出的红外信号,再用发射管把信号发射出去。
硬件接线
红外接收管HS0038B 引脚图如下所示,引脚从左至右分别接到GPIO18
、负极和正极。
红外发射管TSAL6200接线比较简单,二极管长脚是正极,接到GPIO17
,短脚接到负极。
安装与配置
首先更新系统(这一步很重要,请不要跳过):
1 | sudo apt-get update |
更新完后,请确认系统内核版本在4.19.X
后:
1 | pi@raspberrypi:~ $ uname -r |
安装LIRC:
sudo apt install lirc
修改配置文件名称:
1 | cd /etc/lirc |
接下来修改启动配置文件/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设备文件:lirc0
和lirc1
,分别对应发射管和接收管:
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
......
上面的pulse
和space
后面的分别代表红外管接收到的脉冲时间和间隔时间,即红外灯亮和灭的时间。输出的数值可能不同,能看到类似的输出,说明红外接收管已经正常工作。
记录遥控器的红外发射信号
进入红外接收模式:
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-pluse
和xxxx-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 aircon
;on
是遥控器的指令,对应配置文件中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
下一步
使用命令行控制空调不是最终目的,毕竟这样操作太复杂了,开启空调还得先打开电脑,那得多累?
比较方便控制空调的方式: