基于ESP32搭建物联网服务器四(最简单的WEB服务器)

  • Post author:
  • Post category:其他


常用的EPS32可用于WEB服务器的库有两个:

WebServer

ESPAsyncWebServer

默认情况下,arduino IDE安装好ESP32的环境是包含了WebServer这个库的,直接:

#include <WebServer.h>

就可以使用该库了。

而ESPAsyncWebServer这个库需要另行添加,同时该库依赖AsyncTCP库,所以,这两个库都需要另行添加,这两个库的项目地址分别为:


https://github.com/me-no-dev/ESPAsyncWebServer


https://github.com/me-no-dev/AsyncTCP

进入项目地址后,点击Clone=》Download ZIP

打开arduino IDE,菜单=》项目=》加载库=》添加.ZIP库…,重复两次,分别选择上述的两个库进行添加。

WebServer为同步外理,在同时处理多个连接的情况下,处理能力明显劣于ESPAsyncWebServer,所以该文是选择用ESPAsyncWebServer这个库来建立WEB服务器。

既然做为服务器,首先需依赖的当然是配网,用AP模式或STA模式都可以实现该功能

为了方便测试,该文是选择使用STA模式

首先要引入需要用到的库:

#include <WiFi.h>
#include "ESPAsyncWebServer.h"

首先是配网,为了方便理解,把配网操作做成一个函数:

//连接WIFI
void connect_wifi(){
  const char* wifi_ssid = "esp32";
  const char* wifi_password = "12345678";
  Serial.begin(9600);
  WiFi.begin(wifi_ssid, wifi_password);         //连接WIFI
  Serial.print("Connected");
  //循环,直到连接成功
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  IPAddress local_IP = WiFi.localIP();
  Serial.print("WIFI is connected,The local IP address is "); //连接成功提示
  Serial.println(local_IP); 
}

在setup()里调用该函数

然后就是ESPAsyncWebServer,首先是创建一个WebServer对象

AsyncWebServer server(80);

这行代码是调用了ESPAsyncWebServer.h库文件(详细在下面的ESPAsyncWebServer.h文件片断中)中的AsyncWebServer(uint16_t port),来创建一个server对象,port参数为连接端口。

ESPAsyncWebServer.h文件片断:

class AsyncWebServer {
  protected:
    AsyncServer _server;
    LinkedList<AsyncWebRewrite*> _rewrites;
    LinkedList<AsyncWebHandler*> _handlers;
    AsyncCallbackWebHandler* _catchAllHandler;

  public:
    AsyncWebServer(uint16_t port);
    ~AsyncWebServer();

    void begin();
    void end();

然后是需要注册一个响应链接”/”上的GET请求的处理回调函数

server.on("/",HTTP_GET,call_back);

这行代码是当收到根目录”/”的GET请求时,调用call_back这个回调函数来响应请求,这个函数内容为:

void call_back(AsyncWebServerRequest *request){
  request->send(200,"text/plain","hello esp32 web server");
}

这个回调函数默认需要传入一个AsyncWebServerRequest对象,该对象包含了客户端的请求

send()函数会在收到请求后,发送一个字符串(“text/plain”)内容(“hello esp32 web server”)的基本(200)响应。

最后需要初始化服务器:

server.begin();

该方法将启动服务器。

至此,一个简单的基于ESP32的WEB服务器环境就搭建完成了,完整代码:

#include <WiFi.h>
#include "ESPAsyncWebServer.h"

  AsyncWebServer server(80);

  
//连接WIFI
void connect_wifi(){
  const char* wifi_ssid = "ESP32";
  const char* wifi_password = "12345678";
  Serial.begin(9600);
  WiFi.begin(wifi_ssid, wifi_password);         //连接WIFI
  Serial.print("Connected");
  //循环,直到连接成功
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  IPAddress local_IP = WiFi.localIP();
  Serial.print("WIFI is connected,The local IP address is "); //连接成功提示
  Serial.println(local_IP); 
}

void call_back(AsyncWebServerRequest *request){
  Serial.println("User requested");
  request->send(200,"text/plain","hello esp32 web server");   //响应请求
}

void web_server(){

  server.on("/",HTTP_GET,call_back);    //注册回调函数
  server.begin();                       //初始化
}

void setup() {
  connect_wifi();
  web_server();
}

void loop() {
  // put your main code here, to run repeatedly:

}

把代码上传到ESP32后,完成WIFI的连接后,串口会输出一个本地IP地址,把该地址复制到浏览器打开,浏览器将输出”hello esp32 web server”

在后续的文章中,将会介始如何在程序里加入html代码。



版权声明:本文为m0_50114967原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。