听风听雨过七夕,愁草瘗花铭。对影双人中酒,交加晓梦啼莺。
前言
7月份入职之后,一直在闲暇之余鼓捣树莓派。在制作联网空调遥控器的时候遇到了很多挫折。
比如在录制的红外波谱中有莫名的不符合协议的极长时间空白。
比如即使看上去正常的波普也不能被空调接收。
写这篇文章是迫于无奈。实在是因为按网上的教程录制的空调遥控操作无法使用,而且仔细查看录制的数据发现与网上发布的差距较大。
空调遥控器与电视机遥控器最大的区别就在于:其传输的红外信息都为复合信息集合,不像电视机遥控音量+就是音量+,换台就是换台。
我的空调为Panasonsic中央变频空调,从遥控显示屏可以看出,其大概有以下几种信息:
- 希望达到的温度
- 空调模式(制冷,制热,自动,干燥)
- 吹风模式:上中下 左右 扫风 自动
- 风速
- 定时开, 定时关
首先要明确一点,红外传输是一种单向协议,即遥控器只能向被控对象发送指令,但是并不会收到类似tcp协议一样的ack回执。
为什么要在遥控空调时传输复合参数集合呢。这就考虑到空调与电视的使用方式不同。想象这样一个场景:你抱着西瓜躺在离电视3米的地方,按电视遥控器调低音量但是电视不响应,就只能把遥控器对准电视,往前伸手狂按,直到音量达到理想效果后继续躺尸。
但是如果你抱着西瓜躺在离空调5米的地方,觉得不够爽,想要空调大力制冷。这时使用类似电视机调低音量(减小10分贝
)的类似指令发送方式,你是不能明确手上的遥控器发送的无数降低1 °C
的指令有多少成功发给了空调的接收器的。如此这般就很容易造成空调遥控器上的显示与实际制冷效果不同步(并很难重新同步)。耿直的工程师就决定一次发送能够描述空调全部需求状态的指令集。这样任意一次信号的成功送达都可以保证事务的一致性。(是一致性我没说错对吧。。。)
正文
接下来是紧张刺激的操作环节。凸^-^凸
一.数据收集
一些 值得记录的地方。
- 据说有示波器会更好(但是我没有)
- 首先要确保正确安装了LIRC包。
- 如果有时间看一下 man mode2。在lirc社区找到的一些规较为范的remote control config 里大部分使用了 16进制记录方法,个人认为在肉眼读数时比单纯记录remote 的高低电平10进制读法更方便观察。
- 网上大多数教程推荐在使用mode2 工具录制时, 关闭lircd服务。
sudo systemctl stop lircd.service
是在Arch 上正确关闭lirc服务的方法。录制完成后sudo systemctl restart lircd.service
重新启动即可。(经常查看日志即服务运行状态 会帮你解决很多坑。) - 在做录制解析时最好先去了解一下红外传输协议。
本来还想继续往下写的。 Arch arm 版 linux 4.9 内核升级后 i2c io无法使用。红外模块罢工。正在懊恼中。(于2017.08.27)
toDOtoDO….
续集。 2019-03-22
深圳开始变热了。 我不得不解决每天回家热成狗的问题了。 空调不能停!!!!!!!!!
更重要的是, 我找到了能够稳定开启 I2c module 的办法。
安装一些必要的东西:
|
|
安装 PIGPIO 支持
|
|
安装raspi-config
|
|
然后使用 Raspi-config 开启I2C
|
|
七夕快乐。