赞
踩
常用的EPS32可用于WEB服务器的库有两个:
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代码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。