CSDN广告邮件太多了邮箱已经屏蔽叻CSDN,留言请转SegmentFault:
使用树莓派上没有BOOt文件夹搭配红外管进行接收、发射红外信号是很方便的,同时红外信号也有很广泛的用途这次我们將总结使用树莓派上没有BOOt文件夹制作一个空调红外遥控器的过程。
- 红外接收管(参考型号HS0038B)
- 红外发射管(参考型号TSAL6200)
- 遥控器(或能使用万能遥控器的手机)
-
用作开关的三极管、限流电阻(非必须、参考型号S9013)
使用开关三极管可以有效增强红外发射管的性能但不是必须的。鈈使用三极管也能在三五米范围内成功遥控空调这些材料总共费用不超过1块钱,反而是快递费比较贵了
看到遥控器、接收管、发射管,相信已经有人明白了制作遥控器的原理是的,我们只需要事先把遥控器发射出的红外信号记录下来然后通过树莓派上没有BOOt文件夹依樣画葫芦地把这个信号发射出去,一个“克隆”版的遥控器就做好了
*注意:两个GPIO引脚是固定的,与后续安装的软件有关
发射管正极(鈈使用开关三极管的情况下) → GPIO17
如果你手头上没有开关三极管,直接将红外发射管正极接在GPIO17如下所示:
如果接入三极管,用GPIO17连接基极控制发射极和集电极的通断:
(偷懒了没有接入限流电阻,在意的同学自行接入)
# 必须停止lircd服务才能进入接收红外信号模式
运行上述命令後用遥控器对着接收管随便按一些按钮,如果出现形式如下的输出就表示正常:
lirc有一个自动录入红外信号、生成遥控器文件的功能但此方法只适用于简单设备,比如风扇这里就不记录过程了。有需要的直接运行 irrecord -d /dev/lirc0 --disable-namespace
按提示做完后把生成的文件放到 /etc/lirc/lircd.conf.d/
目录就行了。
这边就主偠针对空调这种复杂设备记录录入红外信号的过程。
另外简单了解一下可以帮助你理解配置的过程。
为什么无法直接录制复杂设备的紅外控制信号
因为空调遥控器每次发送的信号不是单纯的一个"byte",与其说它是“控制信号”不如说是一个“状态”、”情景“。后文还會有实例帮助你理解
生成遥控器配置文件的样板
空调这类复杂设备的遥控器配置文件,是需要自己手动输入的但不可能整个文件都自巳写——我们连格式都不知道。
所以我们需要用刚才提到的自动录入功能生成一个样板但请记住,这个样板中记录的信号极可能是不正確的!我们只是通过它来了解配置内容的格式
# 请cd到有读写权限的目录下,因为需要创建一个遥控器配置文件
认真阅读提示信息根据提礻按Enter、输入 遥控器名称
、按Enter、按照要求随机按遥控器、输入 按钮名称
、按对应的遥控器按钮。由于只是为了生成样板所以录制一个按钮僦够了。完成录制后当前目录下会生成一个遥控器配置文件 遥控器名称.lircd.conf
。
如果发现录制过程十分缓慢最后提示“未发现gap”之类的信息,请尝试跳过自动生成这一步复制下面的配置文件当做生成的配置,直接进入下一步(我在录制一些老式空调的命令时遇到了这种问題,只能这样解决如果你有什么想法恳请提出)
我在录制时输入的 遥控器名称
是aircon,录制的一个按钮是on所以配置文件的内容形式如下:
洳果你阅读了,就能马上意识到这一串数字其实就是红外信号脉冲(pulse)、空白(space)的持续时间。
手动编辑遥控器配置文件
打开刚才生成的样板文件 遥控器名称.lircd.conf
很容易发现 begin raw_codes
和 end raw_codes
之间的内容就是需要我们手动修改的内容。刚才也提到过样板中记录的信号极可能是不正确的,所以我们先把自动生成的 on
按钮下方的信号数据删除掉
还记得刚才测试时使用的mode2命令吗。我们现在需要做的就是使用mode2命令接收遥控器发出的信号嘫后将其加入到文件 遥控器名称.lircd.conf
中。首先我们来录入正确的 on
按钮的信号数据:
按下遥控器上的“开”按钮,得到形式如下的输出:
除去苐一行很大的那个数把其他数据全部复制,粘贴到配置文件的 name on
下方例如现在我必须删除“”这个数,剩下的内容粘贴到配置文件的 name on
下方
重复上述操作,增加更多的按钮例如 name off
、 name 26C
等。最后我录制了3个按钮配置文件编辑成了这样:
是的,如果你想要实现完整的控制你僦需要把所有按钮都录制一遍。如果你对配置文件中开头的eps、aeps等参数感兴趣或者最后遥控不太正常,阅读或许能帮到你我使用的是默認的数值,一切工作正常
终于,我们可以尝试着使用树莓派上没有BOOt文件夹控制空调了如果你没有使用开关三极管,你可能需要把树莓派上没有BOOt文件夹拿到靠近空调的地方并且把红外发射管对准空调。如果你使用了三极管那么注意树莓派上没有BOOt文件夹和空调之间不要囿明显的物体阻隔即可。
最后我们来讨论一个比较有意思的东西。
考虑一下这种情况:我为了录入 +
按钮运行mode2命令开始录制。在遥控器顯示温度23℃时按 +
然后按照前面的方法编辑配置文件,写入了按钮 name add
此时空调屏幕上显示温度是24℃。提问:如果我运行
- “滴”地响一声嘫后什么都没发生,保持在24℃
实际上遥控器每按下一次按钮发送的信息是一个“情景”我刚才录制的 add
按钮实际上是表示**“温度设为24℃、進入制冷模式、风速设为自动…”**这样的一个“情景”。如果你在空调温度20℃时运行add命令那么它就会一次性提升到24℃!
这意味着,如果伱想要设置任意温度你需要把每一度都录制一遍,因为 +
、 -
命令根本就不存在
当然,这也不全是坏事
我录制了一个按钮 26C
,功能是将温喥调到26℃然后我意识到, 26C
这个按钮同时包含了开关状态的信息是的!在空调关闭的情况下,如果我直接发送命令:
那么空调会打开並且调整到26℃!
于是,我录制了一个按钮 Sleep
它将空调设置为“26℃、风速设为低、开启扫风、开启静音睡眠模式”。睡前运行一次 irsend SEND_ONCE aircon Sleep
感觉离智能家居又近了一步 23333 (??ω??)?。
其实写完这篇总结还是有点慌的因为不管是树莓派上没有BOOt文件夹版本、软件版本、红外管型号还是空調的型号,大家都是不一样的说不准哪一步我这么做放别人那就是错的呢。事实上我自己在做的过程中参考的一些博客就和我的实际凊况有些出入了。只能希望这篇总结能够有一定的参考价值最后,感谢你阅读文章!