0%

树莓派安装LiRC配合红外接收(HX1838B)记录遥控发射内容

废话

最近想制作一个家庭智能遥控系统,控制空调等设备,因此就像用家里积灰的树莓派做个空调智能控制器,初步的思路很简单,就是先判定时间,如果是到了下午六点,温度还在30度以上,发起指令,控制空调启动设置温度为27℃,也可以通过APP远程进行启动和关闭

步骤

1.HX 1838B(红外接收模块)连线示意图如下:

HW-483(发送红外模块)连线示意图如下:

2.安装LiRC

1
2
$ sudo apt-get update
$ sudo apt-get install lirc

添加下面这几行到/etc/modules中

1
2
lirc_dev
lirc_rpi gpio_in_pin=18 gpio_out_pin=17

添加下面这几行到文件/etc/lirc/hardware.conf中,如果这个文件不存在,可以直接创建

1
2
3
4
5
LIRCD_ARGS="--uinput --listen"
LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

添加下面的代码到/boot/config.txt文件中

1
dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17

修改这个文件/etc/lirc/lirc_options.conf中的driver和device对应的值

1
2
driver    = default
device = /dev/lirc0

关闭服务然后进行启动,使上面的配置文件生效

1
2
$ sudo /etc/init.d/lircd stop
$ sudo /etc/init.d/lircd start

检查lirc的启动状态

1
$ sudo /etc/init.d/lircd status

在测试之前重启系统

1
$ reboot

检测lirc状态是否正常

1
2
3
4
5
6
$ sudo /etc/init.d/lircd stop
$ mode2 -d /dev/lirc0
<摁遥控上的遥控键,看是否打印一些带有pulse和space的字符>
pulse 560
space 1706
pulse 535

3. 录制普通的遥控器

1
2
$ sudo /etc/init.d/lircd stop
$ sudo irrecord -d /dev/lirc0 ~/lircd.conf

根据提示进行操作,其中需要输入到遥控器的名称,其中得注意,如果摁键的时间最好在1S多点,保证出现两个点以上,不超过10个,然后把所有的键都摁一边

备份系统自带的 lircd.conf,然后把生成的配置文件拷贝到/etc/lirc/l下

1
2
3
$ sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd_original.conf
$ sudo cp ~/lircd.conf /etc/lirc/lircd.conf
$ sudo /etc/init.d/lircd start

使用下面的命令测试按键是否生效

1
2
$ irsend SEND_ONCE <遥控器的名字> KEY_POWER
$ irsend SEND_ONCE <device-name> KEY_VOLUMEUP

4.录制空调遥控器

空调遥控器这种带逻辑控制的比较麻烦.每次发射的都是含有温度、模式、制冷制热等一连串的指令,按照之前irrecord指令生成conf文件,行不通,只能使用raw的原始码,记录也是通过mode2 命令实现
①首先制作模板,得到的模板见下面,如果不行可以直接拷贝下面的代码

1
2
sudo /etc/init.d/lircd 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
# -m --mode 使用行列显示模式,不显示pulse、space
mode2 -m -d /dev/lirc0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
begin remote

name air
flags RAW_CODES
eps 30
aeps 100

gap 19987

begin raw_codes

name KEY_CLOSE
8990 4486 677 1630 680 527
651 555 679 527 680 527
676 530 679 527 682 523
682 1629 684 523 681 523
682 1629 679 525 688 519
655 551 680 533 673 526
682 526 682 522 654 554
653 561 672 1627 681 528
678 528 683 525 678 528
678 525 691 527 670 1628
681 525 682 1626 682 526
682 523 692 1615 683 522
682 19958

687 522 683 549 660 519
684 520 687 522 680 524
686 549 652 527 687 522
690 514 683 522 686 520
684 525 679 527 685 521
681 525 681 528 682 522
684 527 681 521 711 495
688 518 670 540 682 522
683 523 683 549 659 524
682 522 681 552 658 523
685 1621 683 525 682 39966

9028 4451 689 1620 686 547
658 553 657 544 657 549
665 542 662 545 658 548
658 1624 685 547 663 544
657 1625 683 548 657 550
662 543 657 550 661 545
670 537 659 547 660 546
658 549 634 1651 682 548
657 549 632 575 657 549
629 577 661 545 643 1638
657 1652 662 1647 654 577
630 579 628 1650 665 578
632 19975

651 581 631 576 626 581
627 578 659 547 631 577
631 575 627 1662 673 553
627 580 628 577 630 576
627 579 634 573 631 574
655 551 630 577 657 550
655 553 628 578 631 575
628 578 654 552 627 580
654 552 632 575 653 554
626 580 629 577 630 576
627 1654 657 1652 653


name KEY_OPEN
8984 4493 648 1659 648 559
648 557 649 1656 676 534
648 557 649 558 648 561
646 1662 649 557 647 561
644 1660 655 552 649 558
648 558 648 559 648 558
648 560 646 558 649 560
647 556 650 1658 651 557
648 560 646 558 648 559
648 557 650 558 646 1660
649 558 648 1658 650 559
648 558 648 1659 649 564
645 19988

648 556 651 558 647 562
646 558 648 557 650 559
649 556 649 557 649 557
651 558 646 557 650 558
649 556 650 557 656 553
647 557 649 557 651 556
650 559 647 560 646 556
650 569 638 557 649 560
646 558 649 558 648 562
646 556 650 557 648 561
646 1660 648 1659 650 40004

8989 4491 648 1659 650 559
646 560 647 1661 648 559
647 558 649 556 651 558
647 1659 651 557 648 558
650 1659 649 558 649 558
648 556 650 557 648 557
652 558 646 559 648 559
647 560 655 1652 646 559
651 553 651 557 649 559
648 555 650 559 649 1657
650 1658 650 1658 649 557
651 557 648 1658 650 558
648 19992

648 559 649 559 647 558
648 559 648 558 647 560
648 558 648 1658 650 557
649 557 648 559 648 558
647 557 651 558 647 558
648 559 647 567 640 558
648 560 647 558 648 559
648 558 649 558 648 559
648 558 648 557 648 558
650 560 646 558 648 557
649 1660 648 558 650

end raw_codes

end remote

③最后,把配置文件复制到指定目录 /etc/lirc/lircd.conf/ 并重启lircd服务:

1
2
sudo cp aircon.lircd.conf /etc/lirc/lircd.conf.d/
sudo service lircd restart

5. 发射信号

1
2
# 发射命令:irsend SEND_ONCE 遥控器名称 按钮名称
irsend SEND_ONCE aircon KEY_OPEN

如果前面的步骤一切正常,但在发射信号时报错“transmission failed”。请检查生成的遥控器配置文件,查看flags项,若是flags RAW_CODES|CONST_LENGTH,请尝试将其修改成flags RAW_CODES并重启lircd服务。再测试能否发射信号。

github上的一个文章
树莓派给家用电器加上智能(红外篇)
树莓派学习手记——制作一个空调遥控器(红外接收、发射的实现)题