描述我家有台大金空调,目前没有与任何电子设备链接,它仅由红外线遥控器控制,我现在用ESP8266微控制器使其由wifi控制来模拟红外遥控器命令,可以将新控制器放置在空调的射程范围内,并且在IOS或者安卓手机上通过小程序来通话。
细节
与往常一样,该问题不是新问题,也不是新解决方案。但是我将描述它以帮助某人这样做。
通过这个项目,我为大金空调制造了一个wifi红外遥控器。
在这些架构中,您可以看到所有涉及的部分。
一些更多的细节:
普通空调由红外遥控器控制(图片左上方:“ 经典遥控器 ”);
一个封闭在一个小盒子里的ESP8266项目(图片右上角:“ 新的ESP8266 wifi遥控器 ”),可以与您的空调进行红外通信。
在ESP8266项目中,我添加了一个温度和湿度传感器来监控室内条件;
通过路由器,ESP8266盒子可以连接到互联网并与智能手机中的应用程序通话;
经典遥控器和新型ESP8266控制器都与空调单向通信,它接收命令并发出蜂鸣声,但不会与遥控器回声。
知道路由器的IP地址后,我可以通过互联网与您的ESP8266通讯;
为了从Internet与您的家庭wifi网络中的设备进行通信,我需要在路由器配置中为ESP8266分配一个端口;
基于ESP8266的WIFI控制器的构造
这是wifi控制器的架构。我使用了Wemos D1 mini,因为它体积小且价格便宜,它基于流行的ESP8266芯片,并且可以与Arduino IDE完美配合。
因此,本文中的术语ESP8266和Wemos可互换。
像往常一样,首先我将其构建在面包板上,当一切正常后,我开始焊接。
引脚D4用于从DHT11传感器读取温度和湿度。
引脚D0用于将信号发送到红外灯。它连接到NPN BC547晶体管的基极,该晶体管用作电流放大器。红外线LED会与脉冲与空调通话,因此我们可以使用它来驱动WeMos引脚可以提供的更多电流。一对电阻器用于减少流到晶体管基极的电流(1 Kohm)并限制led电流(100 ohm)*。
* =应该写关于这两个电阻的值的几行(需要帮助)。
(我项目中的DHT11传感器与模式中的传感器不同,我使用的是一个已经包含10k上拉电阻的模块,因此可以删除3.3V和DHT11信号引脚之间的1kohm电阻) **
** =我应该更好地理解这一点(需要帮助)
网络规则和互联网通话
在Wemos中代码的Setup()部分中,将启动一个连接到本地家庭网络的wifi客户端,路由器将为Wemos提供一个本地IP地址。在 Setup()中, 还启动了一个网络服务器,该服务器可以应答本地网络中的http呼叫。
这是一张了解IP如何工作的图。每个路由器都创建一个专用网络。
所有本地地址都具有相同的结构,并且仅针对最后一个数字进行更改:192.168.1.x(根据您的路由器,您可能具有不同的结构,例如10.0.0.x等)。
Wemos中的代码定义了Wemos可以回答以下3个命令:
服务器。on(“ / onoff”,switchAcOnOff); 服务器。on(“ / sensor”,sensorData); 服务器。on(“ / temp”,temperatureSet);
所以,如果。我可以通过http url调用向ESP8266发送命令。
但是在本地网络之外,ESP8266和其他所有设备均不可见。
路由器将所有本地网络隐藏在外部,可以通过图中的公用IP地址 121.3.12.133进行访问。
要将命令从我的家庭网络外部发送到ESP8266,我需要配置路由器,这是我的本地网络的入口点。根据您所拥有的路由器,您可能可以通过在浏览器的URL中键入其地址来访问路由器的配置面板。路由器的IP地址是第一个,在我的情况下是192.168.0.1。
在配置面板中,我必须将来自Internet的流量转发到路由器,再到ESP8266设备。为了配置路由器,我使用了“ 端口转发 ”。
每次进行呼叫时,都会通过“端口”发生。例如,网站使用Internet端口80进行呼叫。
要通过路由器将我们的项目流量与正常的网络流量分开,最好从端口80移开,因为它受路由器和防火墙的管制。因此,我决定使用端口8080。要使用其他端口(例如8080),在每个http调用的IP地址后面附加“:8080”就足够了。因此,打开AC的电话为:192.168.1.3 : 8080/onoff 。
“端口转发”配置使我可以将来自Internet的流量转发到我的ESP8266设备的8080端口(由其本地IP地址指定)从端口8080路由到我的路由器。
最后还有另一种配置,这很有用。由于路由器每次启动时都会为路由器分配IP地址,因此如果我拔下ESP8266并将其重新连接到电源,则路由器可能会收到与路由器不同的IP地址,因此将不使用端口转发配置。出于这个原因,我已经配置了路由器为ESP8266设备始终提供相同的IP,在路由器面板中,此配置被称为“静态租约”,因此我指定了具有Mac Address的设备(这是一个字符串,如下所示: a0:10:a6:16:b8:15)必须始终接收IP 192.168.1.3(这是我的本地网络的静态IP)。
在loop()内,我会不断检查连接,每3分钟我会打电话给Google,只是告诉路由器该设备处于在线状态并且可以正常工作,因为我注意到我的路由器如果一段时间没有任何反应,它将考虑我的ESP8266已断开连接,并且没有消息通过端口8080转发。
红外通讯
为了与使用红外线通信的设备进行对话,我首先尝试解码来自遥控器的消息,要完成此任务,您首先必须构建一个红外线接收器并使用它来读取遥控器发送的命令控制。
这些命令只是按字节序列读取,您可以将其存储并通过红外线LED进行传输。
但是,在执行此操作时,我发现Daikin在命令中隐藏了一些信息,因为每次相同的消息均以不同的字节序列发送,因此我搜索了Internet,发现该库中的Arduino可以与Daikin AC对话。我已经尝试过并且它可以工作,所以我使用了这个库。
组成命令的字节以脉冲序列传输,这就是为什么简单的led可以传输带有字节的信息的原因,它们是二进制编码的。
DHT11传感器
我添加了一个温度和湿度传感器,首先要读取房间的温度,如果您必须远程决定打开AC,这是必需的。其次,由于没有来自AC的任何反馈,因此温度传感器可以帮助您了解房间是否正在变冷并且wi-fi遥控器工作正常。
DHT11传感器不是很好,也不是很准确(±1°C),DHT22是更好的传感器,可以让您更精确地读取温度(带小数点)。
安全
处理Internet需要一些预防措施。当您打开wifi网络以通过应用访问网络中的设备时,最好采取一些预防措施。
我已经决定该应用程序和wifi遥控器使用secret关键字来验证命令,因此,如果有人找到了您设备的IP及其端口,则他们必须找到正确的url和secret关键字。
还需要更多吗?有什么建议么?
OTA更新
OTA是Over The Air的首字母缩写,由于Arduino IDE中提供了一个库,空中更新是ESP8266微处理器提供的一项非常不错的功能。使用此库,您可以更新wifi遥控器的代码,而无需使用电缆将其连接到计算机,但是您可以通过wifi网络上载新代码。
您的PC必须与设备位于同一网络中。
#包括 《ArduinoOTA.h》
只需包含库并使用示例中提供的代码即可。安装程序中的代码块可让您处理通过wifi网络从Arduino IDE发出的调用,循环中的一行保持连接处于活动状态以允许OTA。
该应用程序
我仅使用HTML,CSS和Javascript制作了该应用程序,并使用了 Adobe PhoneGap(该软件可免费用于1个应用程序),创建了APK,并将其安装在Android设备上。
该应用程序显示一个用于设置温度的简单用户界面,以及两个用于开/关开关的按钮。从wifi遥控器读取的还有温度和湿度两个值。
每次我按下按钮时,都会通过特定端口将命令发送到设备的IP,路由器将命令发送到ESP,ESP将命令执行到AC。
这是应用程序:
3D打印盒
ESP8266遥控器包装在一个盒子中,只能容纳Veroboard及其组件。有一个孔让红外灯发送命令,还有一个孔让湿度/温度传感器测量外部空气
数量 组件名称
1个 × 基于ESP8266的WeMos D1 R2或迷你微控制器
1个 × 红外线LED Led用作向空气污染源传输的源
1个 × 晶体管BC547用作放大器以驱动更多电流到LED
1个 × DHT11温湿度传感器用于读取房间的温度和湿度
2 × 1k欧姆电阻
1个 × 100欧姆电阻
1个 × 交流/直流5v电源
1个 × 3D打印盒
1个 × android自定义应用
评论
查看更多