当前位置:   article > 正文

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

espasyncwebserver

常用的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模式

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

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

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

  1. //连接WIFI
  2. void connect_wifi(){
  3. const char* wifi_ssid = "esp32";
  4. const char* wifi_password = "12345678";
  5. Serial.begin(9600);
  6. WiFi.begin(wifi_ssid, wifi_password); //连接WIFI
  7. Serial.print("Connected");
  8. //循环,直到连接成功
  9. while(WiFi.status() != WL_CONNECTED){
  10. Serial.print(".");
  11. delay(500);
  12. }
  13. Serial.println();
  14. IPAddress local_IP = WiFi.localIP();
  15. Serial.print("WIFI is connected,The local IP address is "); //连接成功提示
  16. Serial.println(local_IP);
  17. }

在setup()里调用该函数

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

AsyncWebServer server(80);

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

ESPAsyncWebServer.h文件片断:

  1. class AsyncWebServer {
  2. protected:
  3. AsyncServer _server;
  4. LinkedList<AsyncWebRewrite*> _rewrites;
  5. LinkedList<AsyncWebHandler*> _handlers;
  6. AsyncCallbackWebHandler* _catchAllHandler;
  7. public:
  8. AsyncWebServer(uint16_t port);
  9. ~AsyncWebServer();
  10. void begin();
  11. void end();

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

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

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

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

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

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

最后需要初始化服务器:

server.begin();

该方法将启动服务器。

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

  1. #include <WiFi.h>
  2. #include "ESPAsyncWebServer.h"
  3. AsyncWebServer server(80);
  4. //连接WIFI
  5. void connect_wifi(){
  6. const char* wifi_ssid = "ESP32";
  7. const char* wifi_password = "12345678";
  8. Serial.begin(9600);
  9. WiFi.begin(wifi_ssid, wifi_password); //连接WIFI
  10. Serial.print("Connected");
  11. //循环,直到连接成功
  12. while(WiFi.status() != WL_CONNECTED){
  13. Serial.print(".");
  14. delay(500);
  15. }
  16. Serial.println();
  17. IPAddress local_IP = WiFi.localIP();
  18. Serial.print("WIFI is connected,The local IP address is "); //连接成功提示
  19. Serial.println(local_IP);
  20. }
  21. void call_back(AsyncWebServerRequest *request){
  22. Serial.println("User requested");
  23. request->send(200,"text/plain","hello esp32 web server"); //响应请求
  24. }
  25. void web_server(){
  26. server.on("/",HTTP_GET,call_back); //注册回调函数
  27. server.begin(); //初始化
  28. }
  29. void setup() {
  30. connect_wifi();
  31. web_server();
  32. }
  33. void loop() {
  34. // put your main code here, to run repeatedly:
  35. }

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

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号