利用lirc对松下空调遥控器指令的录制

听风听雨过七夕,愁草瘗花铭。对影双人中酒,交加晓梦啼莺。

前言

7月份入职之后,一直在闲暇之余鼓捣树莓派。在制作联网空调遥控器的时候遇到了很多挫折。

比如在录制的红外波谱中有莫名的不符合协议的极长时间空白。

比如即使看上去正常的波普也不能被空调接收。

写这篇文章是迫于无奈。实在是因为按网上的教程录制的空调遥控操作无法使用,而且仔细查看录制的数据发现与网上发布的差距较大。

空调遥控器与电视机遥控器最大的区别就在于:其传输的红外信息都为复合信息集合,不像电视机遥控音量+就是音量+,换台就是换台。

我的空调为Panasonsic中央变频空调,从遥控显示屏可以看出,其大概有以下几种信息:

  • 希望达到的温度
  • 空调模式(制冷,制热,自动,干燥)
  • 吹风模式:上中下 左右 扫风 自动
  • 风速
  • 定时开, 定时关

首先要明确一点,红外传输是一种单向协议,即遥控器只能向被控对象发送指令,但是并不会收到类似tcp协议一样的ack回执。

为什么要在遥控空调时传输复合参数集合呢。这就考虑到空调与电视的使用方式不同。想象这样一个场景:你抱着西瓜躺在离电视3米的地方,按电视遥控器调低音量但是电视不响应,就只能把遥控器对准电视,往前伸手狂按,直到音量达到理想效果后继续躺尸。

​ 但是如果你抱着西瓜躺在离空调5米的地方,觉得不够爽,想要空调大力制冷。这时使用类似电视机调低音量(减小10分贝)的类似指令发送方式,你是不能明确手上的遥控器发送的无数降低1 °C 的指令有多少成功发给了空调的接收器的。如此这般就很容易造成空调遥控器上的显示与实际制冷效果不同步(并很难重新同步)。耿直的工程师就决定一次发送能够描述空调全部需求状态的指令集。这样任意一次信号的成功送达都可以保证事务的一致性。(是一致性我没说错对吧。。。)


正文

接下来是紧张刺激的操作环节。凸^-^凸

一.数据收集

一些 值得记录的地方。

  1. 据说有示波器会更好(但是我没有)
  2. 首先要确保正确安装了LIRC包。
  3. 如果有时间看一下 man mode2。在lirc社区找到的一些规较为范的remote control config 里大部分使用了 16进制记录方法,个人认为在肉眼读数时比单纯记录remote 的高低电平10进制读法更方便观察。
  4. 网上大多数教程推荐在使用mode2 工具录制时, 关闭lircd服务。 sudo systemctl stop lircd.service是在Arch 上正确关闭lirc服务的方法。录制完成后 sudo systemctl restart lircd.service重新启动即可。(经常查看日志即服务运行状态 会帮你解决很多坑。)
  5. 在做录制解析时最好先去了解一下红外传输协议。

本来还想继续往下写的。 Arch arm 版 linux 4.9 内核升级后 i2c io无法使用。红外模块罢工。正在懊恼中。(于2017.08.27)

toDOtoDO….

续集。 2019-03-22

深圳开始变热了。 我不得不解决每天回家热成狗的问题了。 空调不能停!!!!!!!!!

更重要的是, 我找到了能够稳定开启 I2c module 的办法。

安装一些必要的东西:

1
pacman -S git python2 i2c-tools base-devel python2-distribute python2-pip

安装 PIGPIO 支持

1
sudo pip2 install RPi.GPIO

安装raspi-config

1
2
3
4
sudo pacman -S xorg-xrandr libnewt
git clone https://aur.archlinux.org/raspi-config.git
cd raspi-config
makepkg -i

然后使用 Raspi-config 开启I2C

1
sudo raspi-config

resp-config

七夕快乐。

comments powered by Disqus