APP下载

ESP32 Arduino教程:通过软接入点(soft AP)实现HTTP服务器

消息来源:baojiabao.com 作者: 发布时间:2024-05-20

报价宝综合消息ESP32 Arduino教程:通过软接入点(soft AP)实现HTTP服务器

在本ESP32(http://www.dfrobot.com.cn/goods-1359.html)教程中,我们将检查如何设定一个异步HTTP web服务器,该装置作为软访问点执行。

本ESP32教程的测试是使用整合在FireBeetle ESP32开发板中的DFRobot的ESP-WROOM-32装置进行的。

引言

在这一篇ESP32教程中,我们将介绍在装置作为软接入点执行时如何设定异步HTTP网络服务器。

这样,为使客户端能够连线到HTTP服务器,我们就不需要连线路由器,而只需连到ESP32上面的Wi-Fi网络即可。

在工作于软接入点模式的ESP32上设定HTTP服务器是非常有用的,因为在实际的应用场景中,IoT装置可能部署在Wi-Fi网络中,而在程式码编译时是无从知晓Wi-Fi网络认证资讯的。

因此,我们就需要以一定的方式对这些认证资讯进行设定,以使ESP32能够连线到Wi-Fi网络。

尽管可以通过序列通讯实现连线Wi-Fi网络的目的,但是在有些商业应用中却并不现实,因为往往需要终端使用者对装置进行初始配置以开始执行。

因此,一种解决办法就是在首次连线时,让ESP32作为软接入点执行,并启动一个HTTP服务器作为配置HTML页面,以便使用者输入Wi-Fi网络名称和密码,从而使得装置能够连线到因特网执行。

IoT温控器就是一个很好的例子,它会对环境温度进行测量,并将结果传送到网上。在这种情况下,每个使用者都需要在家里对该产品进行配置,因此上面提到的初始配置方法就是一种理想的解决方案。

当然,这种界面型别的设计是非常复杂的,因此在这篇入门级的例子中,我们只会让服务器简单地返回一条“hello world”讯息。

尽管如此,在运行于软接入点模式的ESP32开发板上,仍然可以对前几篇帖子里介绍的HTTP服务器示例进行测试,而且它们已经包含了关于处理HTML和JavaScript的教程。更多详细资讯请参见“相关帖子”一节。

如果你还没有配置设定异步HTTP网络服务器所需要的ESP32 Arduino库,那么请参考[此处](http://techtutorialsx.com/2017/12/01/esp32-arduino-asynchronous-http-webserver/)了解如何进行配置。

本ESP32教程的测试是在ESP32 FireBeetle板中整合的DFRobot ESP-WROOM-32装置上进行的。

如果你更喜欢视讯教程,可以看这个:

https://blog.csdn.net/qq_29338243/article/details/92795468

程式码

在编写程式码方面,本例将以之前有关Arduino环境的两篇教程为基础。第一篇主要介绍了如何设定软接入点:(参见:[ESP32 IDF教程:设定软AP](http://mc.dfrobot.com.cn/thread-280843-1-1.html)),另一篇则介绍了如何在ESP32上配置HTTP网络服务器(请参见:[ESP32 Arduino教程:异步HTTP网络服务器](http://mc.dfrobot.com.cn/thread-280829-1-1.html))。

有一点需要特别注意,HTTP服务器的配置方式跟之前教程中将ESP连线到路由器Wi-Fi网络时是完全一样的。

所以,在实现方面,我们用于配置服务器的界面并不需要知道所使用的是何种Wi-Fi网络。

在编码方面,首先当然是包含相关的标头档案。要设定软接入点,我们需要包含Wi-Fi.h和 ESPAsyncWebServer.h库。

#include "WiFi.h"

#include "ESPAsyncWebServer.h"

为了使其他装置能够连线到软接入点,我们需要指定其SSID(网络名称)和密码。这些认证资讯都将被宣告为全域性变数。

const char *ssid = "MyESP32AP";

const char *password = "testpassword";

在全域性宣告最后,我们需要AsyncWebServer 类的一个例项,它提供了配置网络服务器所需的高阶API。

在之前的教程中讲过,这个类的建构函式需要一个引数,那就是服务器监听HTTP请求的埠。跟往常一样,我们使用预设的HTTP埠(80)。

AsyncWebServer server(80);

在设定函式中,首先需要开启一个序列连线,因为我们需要将ESP32的IP输出给客户端,以使其能够正常连线。

Serial.begin(115200);

要启动软接入点,我们只需要呼叫Wi-Fi外部变数的softAP方法即可(这是我们将ESP32连线到Wi-Fi网络时所使用的同一个变数)。

该方法需要两个输入引数,第一个引数是我们要设定的Wi-Fi网络名称,第二个是网络密码。不需要强制设定密码,而且为了实现开放接入点,最好不要设定密码。

WiFi.softAP(ssid, password);

如前所述,我们需要知道ESP32的IP,以使客户端能够连线到网络并发送请求。我们可以呼叫同一个Wi-Fi变数上的softAP方法来获取IP。

Serial.print("IP address: ");

Serial.println(WiFi.softAPIP());

这样Wi-Fi网络部分就设定好了,接下来需要对服务器进行设定。只需要将一个路径系结到相关的处理函式即可,这样当HTTP请求传送到这个路径时,相应的处理函式就会被执行。

我们使用的是“/hello”路径,并让服务器监听该路径上的HTTP GET请求。

路径处理函式仅返回一个HTTP OK程式码(200)和一条“Hello World”讯息。

相关的配置程式码如下所示。如果需要关于配置程式码中所有引数和函式的详细说明,请参见这篇帖子:[ESP32 Arduino教程:异步HTTP网络服务器](http://mc.dfrobot.com.cn/thread-280829-1-1.html)。

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

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

});

为了启动服务器,我们需要呼叫服务器物件上的begin方法,这样它就会监听并处理接收到的请求。

到此为止,设定函式就完成了,服务器开始异步执行,Arduino循环暂时可以为空。最终的源代码如下所示。

#include "WiFi.h"

#include "ESPAsyncWebServer.h"

const char *ssid = "MyESP32AP";

const char *password = "testpassword";

AsyncWebServer server(80);

void setup(){

Serial.begin(115200);

WiFi.softAP(ssid, password);

Serial.println();

Serial.print("IP address: ");

Serial.println(WiFi.softAPIP());

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

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

});

server.begin();

}

void loop(){}

测试程式码

只需将编译好的程式码上传到你的ESP装置上,并开启Arduino IDE串列埠监测器,即可对程式码进行测试。软接入点设定好后,ESP32的IP就会在监测器上显示出来,如图1所示。把这个IP地址复制下来。

图1-ESP32的IP。

此时,你的电脑应该能够检测到Wi-Fi网络。在可用的Wi-Fi网络中找到它,并使用程式码中定义的密码连线到这个Wi-Fi网络。图2所示是windows 8电脑检测到的网络。

图2 - Windows 8电脑检测到ESP32上的Wi-Fi网络。

最后,在连线到Wi-Fi网络之后,开启你的网络浏览器,并在位址列输入以下内容,将 #yourEspIp# 改为你从串列埠监测器上覆制的数值。

http://#yourEspIp#/hello

输出结果如图3所示,其中显示了服务器所返回的“Hello world”讯息。

图3 - ESP32服务器向客户端返回讯息。

精华教程:

[ESP32 MicroPython教程:uPyCraft IDE入门](https://blog.csdn.net/qq_29338243/article/details/87931931)

[ESP32 MicroPython教程:解析JSON](https://blog.csdn.net/qq_29338243/article/details/83823436)

[ESP32 MicroPython教程:MicroPython支援](https://blog.csdn.net/qq_29338243/article/details/83617832)

[ESP32 MicroPython教程:连线Wi-Fi网络](https://blog.csdn.net/qq_29338243/article/details/84138874)

[ESP32 / ESP8266 MicroPython教程:自动连线WiFi](https://blog.csdn.net/qq_29338243/article/details/84836082)

[ESP32 / ESP8266 MicroPython教程:从档案系统执行指令码](https://blog.csdn.net/qq_29338243/article/details/85004189)

[ESP32 / ESP8266 MicroPython教程:HTTP GET请求](https://blog.csdn.net/qq_29338243/article/details/84775363)

[ESP32 Arduino教程:用于构建ESP32编译环境的Arduino IDE软件](https://blog.csdn.net/qq_29338243/article/details/83586756)

[ESP32 Arduino教程:FreeRTOS伫列效能测试](https://blog.csdn.net/qq_29338243/article/details/88665983)

[ESP32 RFID教程:打印MFRC522固件版本](https://blog.csdn.net/qq_29338243/article/details/89631227)

[ESP32 Picoweb教程:获取请求的HTTP方法](https://blog.csdn.net/qq_29338243/article/details/88694253)

……

还有更多教程: [ESP32教程](http://mc.dfrobot.com.cn/thread-271930-1-1.html) 合集

英文版 :[ESP32 tutorial](https://www.dfrobot.com/blog-964.html)合集

2019-11-28 16:56:00

相关文章