首页 雷火电竞官网正文

51自学网,ESP32 Arduino教程:异步HTTP网络服务器-csgo雷火电竞

admin 雷火电竞官网 2019-06-19 144 0

简介

本文旨在解说如安在ESP32开发板运转的Arduino核心上装备异步HTTP Web服务器。

本ESP32教程的测验是运用集成在ESP32 FireBeetle板中的DFRobot的ESP-WROOM-32设备进行的。

例如,咱们将开发一个十分简略的“hello world”应用程序,它将向衔接到它的客户端回来一条音讯。作为客户端,咱们将运用Web浏览器。

为了设置网络服务器,咱们需求两个库。第一个是ESPAsyncWebServer,咱们将在代码中运用到它。

该库答应设置异步HTTP(和Websocket)服务器,这意味着它能够一起处理多个衔接[1]。

此外,正如咱们将在代码中看到,一旦咱们设置了服务器回调函数,咱们就无需在主循环上定时调用任何客户端处理函数,就像咱们在ESP8266 HTTP网络服务器原始完结上所做的那样。

所需的第二个库是AsyncTCP,它依赖于前一个库。因而,咱们不会在代码中直接与其交互,只需包括该库即可。

该库是ESP32开发板的异步TCP库,它是ESPAsyncWebServer库完结的根底[2]。当然,这是一个较低等级的库,而且运用起来更为杂乱。

在编撰本文时,Arduino IDE库管理器上并没有任何库,因而咱们有必要从GitHub页面下载它们,并将其放在咱们的Arduino库文件夹中。

如需下载这两个库,只需单击GitHub页面顶部的“克隆或下载(Clone or download)”按钮,如图1高亮显现部分所示。

图1 - 从GitHub下载库代码。

然后,挑选“下载ZIP”选项,将该文件下载到您的计算机。只需翻开.zip文件,并将文件夹解压缩到Arduino库文件夹即可。

一般,Arduino装置的libraries文件夹坐落C:\Users\UserName\Documents\Arduino\libraries文件夹中。

请注意,解压缩的文件夹称号结尾带一个-master。只需删除此附加的-master并保存其余部分称号即可。

随后,这些库应该能够在Arduino环境中运用。此进程适用于装置两个库。

代码

关于此示例,咱们需求参加一些库。首要,咱们需求参加WiFi.h库,该库用于将ESP32衔接到无线网络。

咱们还需求包括FS.h库,它是ESP32的文件体系库。尽管咱们没有在本教程中运用任何与文件体系相关的函数,但假如咱们不包括它,则代码将无法编译。

终究,咱们将参加两个从前装置的库,即AsyncTCP.h和ESPAsyncWebServer.h。

#include <WiFi.h>

#include <FS.h>

#include <AsyncTCP.h>

#include <ESPAsyncWebServer.h>

完结这些后,咱们将声明两个全局变量以保存WiFi网络凭证,便利咱们今后运用其履行衔接。

const char* ssid = "yourNetworkName";

const char* password = "yourNetworkPassword";

终究,咱们将声明一个AsyncWebServer类型变量,咱们将运用它设置咱们的异步ESP32 HTTP服务器。

AsyncWebServer server(80);

作为结构函数输入,咱们将传递服务器行将侦听的端口。咱们将运用端口80,这是默许的HTTP端口。

Serial.begin(115200);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("Connecting to WiFi..");

}

Serial.println(WiFi.localIP());

转到设置函数,咱们将首要翻开一个串行衔接。然后,咱们将运用从前声明的凭证将ESP32开发板衔接到WiFi网络。假如您需求关于如何将ESP32衔接到WiFi网络的具体阐明,请参阅上一篇文章。

请注意,衔接完结后,咱们将打印分配给ESP32开发板的本地IP,以便稍后咱们能够运用其向咱们的服务器宣布恳求。

现在咱们将装备服务器将侦听传入HTTP恳求的路由以及在该路由上收到恳求时将履行的函数。

咱们经过调用服务器目标的on办法对其进行指定。作为第一个输入,此办法接纳一个字符串,其间包括即将侦听的途径。咱们将其设置为侦听“/hello”路由上的恳求。

作为第二个参数,它接纳一个类型为WebRequestMethod(此处界说)的枚举,它指定在该路由上答应哪种类型的HTTP恳求。咱们将界说仅接纳HTTP GET恳求,因而咱们运用值HTTP_GET。

作为第三个参数,它接纳一个函数,签名由ArRequestHandlerFunction类型界说,如这儿所述。

因而,咱们将指定该处理函数有必要回来void,并作为参数接纳指向AsyncWebServerRequest类型目标的指针。每个传入的客户端将被封装在此类目标中,而且两者都处于活动状况,直到衔接断开[3]。

为了确保语法的紧凑性,咱们将此处理函数声明为C++ lambda函数。因而,咱们能够指定一个未命名的本地声明函数。关于包括许多路由的服务器,这比有必要针对每个路由专门声明命名函数愈加明晰和紧凑。您能够在这儿阅览更多关于lambda语法的内容:

[captures](params){body}

在咱们的示例中,咱们不会运用任何捕获,所以咱们只运用空方括号[]。关于参数,咱们需求尊重前面提及的处理函数界说的签名,该界说由ArRequestHandlerFunction类型指定。因而,咱们的lambda将接纳一个参数,该参数指向AsyncWebServerRequest类型目标的指针。

server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){

// Lambda body implementation

});

关于咱们的处理函数完结,咱们希望向客户端回来一个简略的“hello world”音讯。如前所述,每个客户端都与一个AsyncWebServerRequest目标相关联,该目标包括一个答应咱们指定要回来的HTTP呼应的send办法。

此办法接纳HTTP呼应代码作为第一个输入,在咱们的示例中将其指定为200。这是“确认”的HTTP呼应代码。

作为第二个输入,send办法接纳呼应答复的内容类型。咱们将运用值“text / plain”,因为咱们只想回来“hello world”音讯。

终究,作为第三个参数,咱们将传递实践内容,这将是咱们的“hello world”音讯。

请注意,因为咱们运用的是指向目标而非目标自身指针,因而咱们需求运用箭头操作符,调用AsyncWebServerRequest目标的send办法。

server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){

request->send(200, "text/plain", "Hello World");

});

如需完结设置函数,咱们需求在服务器目标上调用begin办法。此办法调用将发动服务器。

server.begin();

因为咱们的服务器是异步的,因而咱们无需在主循环上调用任何客户端处理函数,如前所述。因而,咱们刚刚界说的路由处理函数将在接纳来自客户端的恳求时异步调用和履行。终究代码如下所示。

#include <WiFi.h>

#include <FS.h>

#include <AsyncTCP.h>

#include <ESPAsyncWebServer.h>

const char* ssid = "yourNetworkName";

const char* password = "yourNetworkPassword";

AsyncWebServer server(80);

void setup(){

Serial.begin(115200);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("Connecting to WiFi..");

}

Serial.println(WiFi.localIP());

server.on("/hello", HTTP_GET, [](AsyncWebServerRequest *request){

request->send(200, "text/plain", "Hello World");

});

server.begin();

}

void loop(){

}

测验代码

如需测验代码,只需编译它,并运用Arduino IDE将其上传到ESP32开发板。该进程完结后,翻开串行监视器,并仿制ESP32衔接到WiFi网络后打印的IP。

然后,翻开Web浏览器,并在地址栏中键入以下内容,经过刚刚仿制的IP对{yourEspIp}进行更改。

http://{yourEspIp}/hello

您应该会得到一个类似于图2的输出,它显现了咱们在正在打印的代码上界说的“hello world”音讯。

图2 - ESP32 HTTP网络服务器hello world。

注:本文作者是Nuno Santos,他是一位和颜悦色的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。

他写了200多篇有关ESP32、ESP8266的有用的教程和项目。

检查更多ESP32/ESP8266教程和项目:

中文版教程 - ESP32教程: http://mc.dfrobot.com.cn/thread-271930-1-1.html

英文版教程 - ESP32 tutorial: https://www.dfrobot.com/blog-964.html

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间服务。
雷火电竞版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

最近发表

    csgo雷火电竞_雷火电竞平台_雷火电竞亚洲

    http://www.dramaq.net/

    |

    Powered By

    使用手机软件扫描微信二维码

    关注我们可获取更多热点资讯

    雷火电竞出品