常用的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代码。