0 有用
0 下载

通过互联网控制ESP8266

文件列表(压缩包大小 2.54K)

免费

概述

需要的元件

  • Arduino UNO(作为USB到串行的转换器)
  • ESP8266(ESP-01)WiFi模块
  • 滑动开关(SPDT开关)
  • 按钮
  • 1KΩ电阻(1/4W)
  • 2.2KΩ电阻(1/4W)
  • 330电阻(1/4W)
  • LED
  • 连接线
  • 迷你面包板

原理及流程

在上一个项目中,我向你展示了**使用ESP8266和ARDUINOWIFI控制LED**的原理。在这个项目中,我将向你展示如何通过Internet控制ESP8266,即从世界各地通过Internet控制ESP8266。

总览

尽管ESP8266 WiFi模块的主要目的是将Internet连接引入我们的小型DIY项目,但我相信到目前为止,我们还没有完全利用ESP8266 WiFi模块的功能,即真正的IoT(物联网)项目。

我想通过实际通过互联网控制ESP8266,使ESP8266项目更进一步。在此过程中,我们将学习如何通过控制通过Internet连接到ESP8266 WiFi模块的GPIO引脚之一的LED(仅用于演示工作原理)来通过Internet控制ESP8266,即连接ESP8266到另一个网络。

这与WiFi控制LED项目有何不同?

实际上,该项目与早期项目之间存在两个差异。第一个区别是ESP8266 WiFi模块的控制方式。在上一个项目中,我通过WiFi网络(即从与ESP8266连接到同一网络的计算机或电话)控制ESP8266。

进入此项目的目的是通过互联网(即,具有互联网连接功能的世界上任何地方的计算机或电话)控制ESP8266。

第二个区别是ESP8266 WiFi模块的配置方式。如果你还记得,我特别提到必须使用AT Commands固件来刷新ESP8266 WiFi模块,我们将通过上载到Arduino的程序来控制ESP8266。

但是,在这个项目中,我将代码直接上传到ESP8266 WiFi模块的ROM中(现有的程序或固件将被删除)。

现在我们已经看到了区别,让我们继续进行项目的电路图和电路设计。

电路图

以下电路用于通过互联网控制ESP8266。首先让我们看一下这些组件,然后再详细解释该电路的设计。

How-to-Control-ESP8266-Over-Internet-Circuit-Diagram

下图显示了电路图中使用的ESP8266 WiFi模块的引脚。有关实际的引脚图,请参考ESP8266和ARDUINO项目入门

ESP8266-Arduino-Image-4

注意:

  • Arduino UNO用作USB到串行转换器。因此,我从Arduino UNO板上移除了ATmega328p微控制器。如果你有专用的USB到串行转换器(USB-to-TTL),则不需要Arduino。
  • 另外,在另一个项目ESP8266 WiFi模块的DIY PCB,我制作了一个简单的ESP8266 Breakout Board 。它包含与ESP8266 WiFi模块相关的所有重要组件。我将在该项目中使用同一块板。

电路设计

将ESP8266的VCC和GND连接到Arduino的3.3V和GND。CH_PD引脚也连接到3.3V电源。复位引脚和GND之间连接了一个按钮。

ESP8266 WiFi模块的TX引脚连接到Arduino的TX引脚,ESP8266的RX引脚通过两个电阻(1KΩ和2.2KΩ)组成的分压器连接到Arduino的RX引脚。

一个LED连接到ESP8266的GPIO2引脚。最后,GPIO0引脚连接到SPDT开关的极点(滑动开关的中心端子)。开关的一个掷端连接到GND,另一个掷端保持开路,但可用于GPIO连接。

代码

以下程序必须上载至ESP8266 WiFi Module。它将建立WiFi连接并创建一个简单的HTML页面,可使用ESP8266的IP地址进行访问。

#include <ESP8266WiFi.h>

const char* ssid = "SSID";//type your ssid
const char* password = "PASSWORD";//type your password

int ledPin = 2; // GPIO2 of ESP8266
WiFiServer ESPserver(255);//Service Port

void setup() 
{
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);
/*
 The following four line of the 
 code will assign a Static IP Address to 
 the ESP Module. If you do not want this, 
 comment out the following four lines.  
 */
IPAddress ip(192,168,1,254);   
IPAddress gateway(192,168,1,1);   
IPAddress subnet(255,255,255,0);   
WiFi.config(ip, gateway, subnet);

delay(5000);

while (WiFi.status() != WL_CONNECTED) 
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

// Start the server
ESPserver.begin();
Serial.println("Server started");

// Print the IP address
Serial.print("Enter this URL to control ESP8266: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println(":255"); //"/255" is the Server Port. 
}

void loop() 
{
// Check if a client has connected
WiFiClient client = ESPserver.available();
if (!client) 
{
return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available())
{
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// Match the request

int value = LOW;
if (request.indexOf("/LED=ON") != -1) 
{
Serial.println("LED is ON");
digitalWrite(ledPin, HIGH);
value = HIGH;
} 
if (request.indexOf("/LED=OFF") != -1)
{
Serial.println("LED is OFF");
digitalWrite(ledPin, LOW);
value = LOW;
}

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); //  IMPORTANT
client.println("<!DOCTYPE HTML>");
client.println("<html>");

client.print("Status of the LED: ");

if(value == HIGH) 
{
client.print("ON");  
} 
else 
{
client.print("OFF");
}
client.println("<br><br>");
client.println("Click <a href=\"/LED=ON\">here</a> to turn ON the LED<br>");
client.println("Click <a href=\"/LED=OFF\">here</a> to turn OFF the LED<br>");
client.println("</html>");

delay(1);
Serial.println("Client disconnected");
Serial.println("");
}

注意:

  • 在将代码上传到ESP8266之前,请确保在Arduino开发板部分中选择了“通用ESP8266模块”。
  • 有关如何将程序上传到ESP8266的更多信息,请参阅《 ESP8266和Arduino项目入门》。
  • 在代码中输入你的WiFi网络的详细信息。
  • 我为ESP8266 WiFi模块分配了一个静态IP地址,代码为“ 192.168.1.254”。确认没有其他设备使用该IP地址后,我选择了该地址。分配静态IP地址时,请确保相同。
  • 除静态IP地址外,还必须提供其他信息,例如默认网关和子网掩码。你可以通过在Windows的命令提示符下键入“ ipconfig”来找到它。

加工

为了上传代码,将GPIO0引脚滑至编程模式(将GPIO0连接至GND),然后按RESET开关。在Arduino IDE中选择正确的板卡和端口后,上传代码。

上载代码后,将开关滑动到普通模式,然后按一下RESET按钮。打开串行监视器。在那里你可以看到WiFi连接的详细信息。

How-to-Control-ESP8266-Over-Internet-Serial-Monitor

你还可以查看ESP8266 WiFi模块的IP地址。由于我分配了静态IP地址,因此我将得到相同的地址。如果你选择不分配静态IP地址,请使用路由器分配的地址。

在代码中,我在端口255上创建了服务器。因此,服务器的URL将为http://192.168.1.254:255。

在连接到同一WiFi网络的计算机或电话中打开网络浏览器,然后输入上述URL。将打开一个简单的HTML页面,其中包含少量文本和链接。下图是打开URL的手机的屏幕截图。

如何通过Internet Sceenshot控制ESP8266

你可以单击特定链接以在本地(即WiFi网络内)控制LED。

如何通过互联网控制ESP8266?

现在,通过互联网控制ESP8266 WiFi模块的技巧部分。有两种方法可以实现此目的。一种方法是使用端口转发,我将在本项目中使用该端口,另一种方法是使用专用的远程服务器,如ThingSpeak或aREST。

由于我已经为ESP8266 WiFi模块设置了一个静态IP地址,下一步是继续进行端口转发。

从任何浏览器打开路由器页面,然后使用路由器登录详细信息登录。转到路由器的“端口转发”页面(取决于路由器,在我的情况下是I WAN设置)。

启用端口转发并提供必要的详细信息,例如本地服务器IP地址(ESP8266的静态IP地址),端口号等,并保存设置。

How-to-Control-ESP8266-Over-Internet-Router

现在,转到具有高级安全设置的Windows防火墙并添加新的入站规则。选择“端口”的规则类型并指定端口号。

打开任何网络浏览器,然后搜索“我的IP地址是什么”。它生成路由器的WAN IP地址。记下来。

现在,从另一台计算机(未与ESP8266连接到同一WiFi网络的任何计算机)中,键入你刚刚记下的IP地址以及端口号。例如,如果你的IP地址为183.92.192.58,端口号为255,则在任何Web浏览器中键入“ 183.92.192.58:255”。现在,你将获得HTML页面来控制LED。

重要的提示:

  • 不建议使用端口转发,因为它可以将计算机开放到外界,并且容易受到病毒或恶意软件的攻击。
  • 另外,许多ISP(Internet服务提供商)都不允许端口转发。
  • 另一种选择是使用专用的安全服务器,如ThingSpeak或aREST。
  • 在下一个项目中,我将向你展示如何使用其中一项服务从互联网控制ESP8266。

最后

所有需要的文件在下载区均可找到。

via:https://www.electronicshub.org/control-esp8266-over-internet/

理工酷提示:

如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈

评论(0)

0/250