经过满长的爬坑,终于成功用lirc控制空调,最终是为HomeAssistant服务的。


准备

用到的硬件就下面这些。

  1. 树莓派Zero W (RASPBIAN STRETCH)
  2. 红外接收模块(HX1838)
  3. 红外发射模块
  4. 若干杜邦线

顺便把马老板家红外模块链接放上,买电子元件什么的也是要看运气。
http://dwz.cn/hEALZbR1
http://dwz.cn/kZu5T03F

安装Lirc sudo apt install lirc,这里用的是STRETCH版的系统,lirc版本应该是0.94c+,旧版不太一样,本文仅针对新版。

修改启动配置sudo vim /boot/config.txt,修改#dtoverlay=lirc-rpi这行为

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

重启系统,lirc模块就被加载了

接线

安装gpiozero库,使用pinout查看树莓派管脚。

sudo apt install python3-gpiozero
pinout

将接收模块的数据口接到GPIO18(注意不是管脚号),将VCC接到5V,GND接地。
这个模块上没有标记,最好问一下客服,我买的两家的相同的模块,客服告诉我的都不一样。。。

发送模块数据口接GPIO17,VCC接5V,GND接地。

录制和发射

本来写了很多,发现这篇文章讲的很详细,简单说一下。

接收器是为了读取红外码,之后就不需要了,将红外码和键对应,生成Lirc配置文件,Lirc使用这个配置文件来发送相同的红外码,进而控制空调。
这里需要注意的是空调的红外码和其他设备不太一样,电视机这种'0'这个数字就对应一个代表'0'的码;而空调'27度',对应的其实是当前的所有设置,包括风向、风速、制冷、温度这些,相当于给一个关闭的空调发送'27度',就同时打开了空调,设置好了所有这些对应参数。因为它的特殊性,不能用lirc自带的工具录制,需要手动将复制到配置文件里面。

第一次发射的时候,空调没有反应,拖着排插按到空调上才成功,后面发现对准的话一两米也没有问题,最后固定在书架上对着空调的接收口。

发射的操作很简单,就是一条命令,通过其他程序调用,就产生了很多应用方案了,下一篇会说明如何整合到HomeAssistant。

参考

https://segmentfault.com/a/1190000014135418
http://jeffssss.github.io/%E6%A0%91%E8%8E%93%E6%B4%BE/2017/07/23/re-use-siri-turn-on-air-condition.html