我用18元开了个空调……(一)

news/2024/11/8 5:56:01/

从零开始的智能家居

专家称「今年高温综合强度或为 1961 年来最强」,哪些因素导致的?未来还要热多久? - 知乎 https://www.zhihu.com/question/548225236
季风区迟迟不见台风来到,伏旱灼烧着这片土地,空调成为了必需品。谁不想当每次踏进家门的时候,迎来的是清爽的凉风,而不是已经在灼热的家中发酵一天的浑浊空气?

材料清单

开发板(Arduino或ESP系列),红外发射管、红外接收管,云服务器,导线。

红外遥控原理

家用的红外遥控通常是使用3.8kHz的电磁波,把一定的数据编码成电磁波的有无,然后发射出去。比如以下数组[200,100,300]表示,先持续200us发出红外波,然后持续100us无红外波,再持续300us发出红外波。电器上的红外接收器接收到了外界的红外信号然后解码,执行命令。

红外遥控库irremote

红外发射接收的细节不用我们自己去实现,因为已经有封装好的库可用了,那就是irremote。irSender的sendRaw函数能方便的发送红外数据,irReceiver的start函数能方便地接收红外数据。先来看看空调遥控器发送了什么数据:
打开示例的ReceiveDemo,同时也会打开PinDefinitionsAndMore.h,这个h文件里有这么一张表格:

/** Pin mapping table for different platforms** Platform     IR input    IR output   Tone      Core/Pin schema* --------------------------------------------------------------* DEFAULT/AVR  2           3           4* ATtinyX5     0|PB0       4|PB4       3|PB3* ATtiny167    3|PA3       2|PA2       7|PA7     ATTinyCore* ATtiny167    9|PA3       8|PA2       5|PA7     Digispark pro* ATtiny3217  18|PA1      19|PA2      20|PA3     MegaTinyCore* ATtiny1604   2           3|PA5       %* SAMD21       3           4           5* ESP8266      14|D5       12|D6       %* ESP32        15          4           27* BluePill     PA6         PA7         PA3* APOLLO3      11          12          5* RP2040       3|GPIO15    4|GPIO16    5|GPIO17*/

从中找到与手头的板子相对应的IR input接口,比如用ESP8266开发板,接口就是14|D5,于是,把D5连接到红外接收模块的输出端,红外接收模块另外两端按照元件上的标志分别连VCC和GND即可,然后直接编译运行ReceiveDemo。
程序正在运行,拿起空调遥控板,对着红外接收头按一下,发现串口监视器输出了数据,这就是红外的RawData,来看看是怎样的。

[9030,4470, 680,1670, 630,570, 630,570, 630,1670, 630,620, 580,620, 630,570, 630,570, 630,1670, 630,1670, 630,570, 630,1720, 580,620, 630,570, 630,570, 630,570, 630,570, 630,570, 630,570, 630,620, 580,620, 580,1720, 580,620, 580,620, 580,620, 630,570, 630,570, 630,620, 580,1720, 580,620, 580,1720, 580,620, 580,620, 630,1670, 630,620, 580,20020, 630,570, 630,620, 580,620, 580,620, 580,620, 580,620, 630,570, 630,570, 630,620, 580,620, 630,570, 630,570, 630,570, 630,1670, 630,570, 630,570, 680,570, 630,570, 630,570, 630,570, 630,570, 680,520, 680,520, 680,520, 680,570, 630,570, 630,570, 630,570, 680,520, 680,520, 680,520, 680,520, 730,39920, 9030,4420, 730,1620, 680,520, 680,520, 680,1620, 680,570, 680,520, 680,520, 680,520, 680,1620, 680,1620, 680,520, 730,1570, 680,520, 680,520, 680,570, 680,520, 680,520, 680,520, 680,520, 680,520, 680,520, 680,1620, 680,570, 680,520, 680,520, 680,520, 680,520, 680,520, 680,1620, 680,1670, 630,1670, 680,520, 680,520, 680,1620, 680,520, 680,19970, 630,570, 680,520, 680,520, 680,570, 630,570, 630,570, 630,570, 630,570, 630,570, 680,520, 680,520, 680,570, 630,570, 630,570, 630,570, 630,570, 630,570, 680,520, 680,570, 630,570, 630,570, 630,570, 630,570, 630,620, 580,620, 630,570, 630,570, 630,570, 630,570, 630,1670, 630,1720, 580,1720, 580]

这就是一个例子,具体的细节我们不用管,接下来尝试一下红外发射。打开irremote示例里面的SendRawDemo。在此之前,需要根据上面那张表确定红外发射管的链接位置,比如ESP8266开发板应该用12|D6口连接发射管的正极。在loop里面,有这么几行代码:

    const uint16_t rawData[] = { 9000, 4500/*Start bit*/, 560, 560, 560, 560, 560, 1690, 560,560/*0010 0x4 of 16 bit address LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000*/, 560, 1690, 560, 1690, 560,560, 560, 1690/*1101 0xB*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111*/, 560, 560, 560, 560, 560, 560, 560,1690/*0001 0x08 of command LSB first*/, 560, 560, 560, 560, 560, 560, 560, 560/*0000 0x00*/, 560, 1690, 560, 1690, 560,1690, 560, 560/*1110 Inverted 8 of command*/, 560, 1690, 560, 1690, 560, 1690, 560, 1690/*1111 inverted 0 of command*/,560 /*stop bit*/}; // Using exact NEC timingIrSender.sendRaw(rawData, sizeof(rawData) / sizeof(rawData[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array.

这就是发送红外数据的关键部分了。接下来,把rawData数组内容替换成之前接收到的数组,直接编译运行,在运行的时候记得把红外发射管对准空调,就能听到空调的响应了。

命令码与状态码

如果到这里一切顺利的话,一个空调遥控器就做好了,但是,你会发现不管发射几次,空调的各个参数一动不动。因为,空调的红外信号是状态码,不是命令码。它们之间的区别是这样的:
命令码:温度上升1度
状态码:温度设为25度
所以,状态码再怎么重复也没用。你需要把真实遥控器的信号一个个录下来,【25度,制冷,强风】是一个状态,【25度,制冷,无风】又是另外一个状态,只有都录下来了,才能完完全全地控制空调。

红外码库

一个个录下来当然是能成功的,但是,想要方便地控制,应当使用红外码库。如果在搜索引擎输入”红外码库“,会得到非常少的结果,目前开源、免费的红外码库只有IRext https://cc.irext.net/index.html#intro 。码库扮演了一个怎样的角色?它能把命令/状态转化为上文提到的RawData,从而单片机直接能够使用,不需要我们自己一个个记录遥控命令分别对应着一个什么样的数组。
参照它的文档 https://cc.irext.net/doc/ ,很容易就能在云服务器部署IRext服务。

wget https://irext-lib-release.oss-cn-hangzhou.aliyuncs.com/pc-docker-image/1.2.7/irext-private_1.2.7.tar.gzwget https://irext-lib-release.oss-cn-hangzhou.aliyuncs.com/pc-docker-image/1.2.7/irext-private-data-20220303.tar.gztar -xf irext-private-data-20220303.tar.gzsudo mv data /sudo docker load < irext-private_1.2.7.tar.gzsudo docker run -itd \
--name irext-private \
-v /data:/data \
-p 8080:8301 \
-p 8081:8081 \
irext-private:1.2.7 /data/start_irext.sh

然后,访问云服务器的8080端口,如果出现IRext的登录界面即为成功。
接下来,根据文档的Web API章节,按照提示注册好账户和Web API应用,就会获得一个AppKey和AppSecret,再依照文档一步步往下。
最终,可以通过向/irext-server/operation/decode发送POST请求,得到上面说的RawData数组。

云服务器中继

到这儿,已经能有在家远程控制空调的思路了:手机通过WiFi给单片机发命令,单片机拿到命令,通过网络询问IRext服务,然后就能拿到RawData,发送出去了。但是,如果在家外面呢?手机无法直接连上单片机,因此还需要云服务器作为中继,以云服务器为核心,手机和单片机都与它交流,它收到手机的命令进行解码,然后发送给单片机即可,接下来,就是前后端的事了。

未完待续……


http://www.ppmy.cn/news/339596.html

相关文章

2 c++编程-核心

重新系统学习c语言&#xff0c;并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助&#xff0c;一起加油哦&#xff01; 本章是继上篇 c编程-基础 之后的 c 编程-核心。 生命就像一朵花&#xff0c;要拼尽全力绽放&#xff01;死磕自个儿&#xff0c;身…

泰山OFFICE:一个数据透视表,就把你吓得不敢做,哪来的勇气做WEB OFFICE

关于有人找泰山OFFICE做数据透视表的事情&#xff1a; 六石编程学&#xff1a;问题要面对&#xff0c;办法要技巧&#xff0c;做不好的功能要想办法_柳鲲鹏的博客-CSDN博客 关于此事&#xff0c;吾还有一个问题想问问泰山OFFICE的几个大头目&#xff1a;一个数据透视表&#x…

office plus

Office Plus 简体中文增强版是 最新推出的Office学习软件。与旧版Office软件相比&#xff0c;增加了更多的新功能&#xff0c;软件库方法更加强大。下面详细介绍一下软Office Pro Plus 中文增强版增加了哪些新功能。 百度网盘 下载 Office Pro Plus 中文增强版的特色&#xff…

cad手机看图 android,CAD手机看图

CAD看图王(CAD手机看图专业版)集快速看图、DWG画图、CAD批注、制图于一身的CAD看图软件&#xff0c;全球累计免费用户超过5000万。支持AutoCAD、浩辰CAD、天正建筑、酷家乐等国内外CAD图纸格式&#xff0c;图纸原生显示CAD图纸不失真。专业的fonts字体解析告别文字乱码&#xf…

web程序设计实验html,web程序设计实验手册

web程序设计实验手册 (11页) 本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01; 15.9 积分 实验一实验一 HTML 语言的熟悉与应用语言的熟悉与应用【实验目的】 通过学习和应用 HTML 的基本元素&#xff…

office移动端_【安卓+ios】力荐、装机必备,某PC软件在手机端也如此出色!

戳上方蓝字关注我们&#xff0c;星标/置顶本公众号&#xff1b; 精彩不错过&#xff0c;生活更美好&#xff01; 每晚20&#xff1a;00准时带给你最有趣的黑科技&#xff1b; 每期所分享的资源获取请查看文章末尾提示&#xff01; Office是一款非常出名的办公软件&#xff0c;想…

如何html5将文字插入图片,如何在文字中加入图片?

在文字中插入图片的设计效果非常奇特&#xff0c;具有很强的艺术效果&#xff0c;一般情况下都是通过ps来实现的。PS虽然功能强大&#xff0c;但使用起来非常复杂&#xff0c;那些让人眼花缭乱的菜单命令可不是我们这些电脑小白能够玩得转的。 下面就给大家介绍两种简单易行的方…

android平板用office,现在可以在 Android 平板上使用你所喜爱的 Office 应用程序了...

从传统的台式机、笔记本电脑到手机、平板等轻便的移动设备,移动互联网正在逐渐改变我们的使用习惯,更多便捷的移动应用已经深入到我们日常生活的方方面面。不论是在公车上、地铁里,或是餐厅的饭桌上,处处都可以看到人们低头使用手机或者平板阅读编辑文档、娱乐游戏,或是记…