风筝
发表于: 2019-8-14 16:23:12 | 显示全部楼层

在本篇文章中,您将学习到如何使用ESP32设置一个Web服务器,以及使用HTML和CSS创建Web页面。通过本文,你将学习到:

●    了解Web服务器的基础知识

●    使用ESP32创建Web服务器

webserver-cover.jpg


什么是Web服务器?

Web服务器是发送和接收信息,处理信息并存储信息的地方。 Web服务器还可以在网页上显示这些信息。


服务器通过称为超文本传输​​协议(HTTP)的协议与用户通信。


当请求发送到此服务器时(例如,在浏览器中搜索其地址),服务器返回代码作为响应(例如,代码200,表示连接已正确建立,或代码404,表示地址不正确)。您可以在此处找到这些代码的完整列表。

ESP32-WebServer-request.jpg


所需的材料

●    ESP32模块

●    Arduino IDE


在站模式下(STA)设置ESP32

在这种情况下,ESP32模块作为客户端连接到Wi-Fi路由器,可以通过路由器访问Internet。

ESP32-WebServer-mode1.jpg


代码

要在STA模式下启动ESP32,只需在开发板上上传以下代码即可。

  1. /*
  2.   ESP32 Web Server - STA Mode
  3.   modified on 25 MAy 2019
  4.   by Mohammadreza Akbari @ Electropeak
  5.   https://electropeak.com/learn
  6. */

  7. #include <WiFi.h>
  8. #include <WebServer.h>

  9. // SSID & Password
  10. const char* ssid = "*****";  // Enter your SSID here
  11. const char* password = "*****";  //Enter your Password here

  12. WebServer server(80);  // Object of WebServer(HTTP port, 80 is defult)

  13. void setup() {
  14.   Serial.begin(115200);
  15.   Serial.println("Try Connecting to ");
  16.   Serial.println(ssid);

  17.   // Connect to your wi-fi modem
  18.   WiFi.begin(ssid, password);

  19.   // Check wi-fi is connected to wi-fi network
  20.   while (WiFi.status() != WL_CONNECTED) {
  21.   delay(1000);
  22.   Serial.print(".");
  23.   }
  24.   Serial.println("");
  25.   Serial.println("WiFi connected successfully");
  26.   Serial.print("Got IP: ");
  27.   Serial.println(WiFi.localIP());  //Show ESP32 IP on serial

  28.   server.on("/", handle_root);

  29.   server.begin();
  30.   Serial.println("HTTP server started");
  31.   delay(100);
  32. }

  33. void loop() {
  34.   server.handleClient();
  35. }

  36. // HTML & CSS contents which display on web server
  37. String HTML = "<!DOCTYPE html>\
  38. <html>\
  39. <body>\
  40. <h1>My First Web Server with ESP32 - Station Mode</h1>\
  41. </body>\
  42. </html>";

  43. // Handle root url (/)
  44. void handle_root() {
  45.   server.send(200, "text/html", HTML);
  46. }
复制代码

上传代码后,打开串口监视器窗口。如果您输入了正确的SSID和密码,几秒钟后,ESP32将连接到路由器并返回IP地址。

ESP32-WebServer-STAmode.png

在浏览器中输入该IP,您可以看到刚刚创建的网页。

注意:您的PC(您的浏览器)应该连接到与ESP32相同的路由器。

ESP32-WebServer-STAmode2.jpg


代码解释

  1. #include <WiFi.h>
  2. #include <WebServer.h>
复制代码

在代码的起始处添加了两个必需的库。 WiFi.h库用于设置wifi部分,WebServer.h库用于构建网页。

  1. const char* ssid = "****";   
  2. const char* password = "****";
复制代码

在这两行代码中输入路由器的SSID和密码。

  1. WebServer server(80);
复制代码

此命令从webserver类定义一个名为server的对象。使用此对象,您可以在端口80上创建网页。


setup()函数部分,首先启动串行通信。

  1. WiFi.begin(ssid, password);
复制代码

使用WiFi.begin命令,ESP32尝试使用SSID和代码中定义的密码连接到您的wifi路由器。

  1. while (WiFi.status() != WL_CONNECTED) {
  2.   delay(1000);
  3.   Serial.print(".");
  4.   }
  5.   Serial.println("");
  6.   Serial.println("WiFi connected successfully");
复制代码

上面的代码在串口监视器上打印字符“.”,直到ESP32连接到Wi-Fi路由器。正确建立连接后,串行监视器上会显示“WiFi connected successfully”。

  1. Serial.print("Got IP: ");
  2. Serial.println(WiFi.localIP());
复制代码

然后ESP32的IP地址将打印在串口监视器上。


要管理HTTP请求并指定在搜索URL地址时要运行的代码部分,请使用on方法。

  1. server.on("/", handle_root);
复制代码

在上面的代码中,当在浏览器中搜索主地址(放置在IP之后)时,调用handle_root函数。

最后,使用server. begin命令,您的Web服务器开始工作。


loop()函数部分中,只调用handleClient方法,这样您的代码始终监听Web服务器以管理服务器上发生的事件。

  1. String HTML = "<!DOCTYPE html>\
  2. <html>\
  3. <body>\
  4. <h1>My First Web Server with ESP32 - Station Mode </h1>\
  5. </body>\
  6. </html>";
复制代码

HTML字符串包含应在网页上显示的代码。

小提示:要在几行中编写一条指令,只需在每行的末尾添加一个反斜杠(\)。

  1. void handle_root() {

  2.   server.send(200, "text/html", HTML);

  3. }
复制代码

只要在浏览器中搜索主路径(IP地址),就会调用handle_root-unction。在此函数中,使用send方法。

send命令发送代码号200(表示页面正确打开)以及我们编写的HTML代码,以在网页上显示它。


在接入点模式(AP)中设置ESP32

在这种情况下,ESP32充当路由器并使用所需的名称和密码创建本地wifi网络。由于可以连接到此连接点的设备数量有限,因此它也称为软访问点。

ESP32-WebServer-mode2.jpg


代码

在电路板上上传以下代码,以便在AP模式下设置ESP32。

  1. /*
  2.   ESP32 Web Server - AP Mode
  3.   modified on 25 MAy 2019
  4.   by Mohammadreza Akbari @ Electropeak
  5.   https://electropeak.com/learn
  6. */

  7. #include <WiFi.h>
  8. #include <WebServer.h>

  9. // SSID & Password
  10. const char* ssid = "Electripeak";  // Enter your SSID here
  11. const char* password = "123456789";  //Enter your Password here

  12. // IP Address details
  13. IPAddress local_ip(192, 168, 1, 1);
  14. IPAddress gateway(192, 168, 1, 1);
  15. IPAddress subnet(255, 255, 255, 0);

  16. WebServer server(80);  // Object of WebServer(HTTP port, 80 is defult)


  17. void setup() {
  18.   Serial.begin(115200);

  19.   // Create SoftAP
  20.   WiFi.softAP(ssid, password);
  21.   WiFi.softAPConfig(local_ip, gateway, subnet);


  22.   Serial.print("Connect to My access point: ");
  23.   Serial.println(ssid);

  24.   server.on("/", handle_root);

  25.   server.begin();
  26.   Serial.println("HTTP server started");
  27.   delay(100);
  28. }

  29. void loop() {
  30.   server.handleClient();
  31. }

  32. // HTML & CSS contents which display on web server
  33. String HTML = "<!DOCTYPE html>\
  34. <html>\
  35. <body>\
  36. <h1>My First Web Server with ESP32 - AP Mode </h1>\
  37. </body>\
  38. </html>";

  39. // Handle root url (/)
  40. void handle_root() {
  41.   server.send(200, "text/html", HTML);
  42. }
复制代码

上传代码后,连接到您所建立的连接点。

ESP32-WebServer-APmode1.png

现在在浏览器中输入192.168.1.1 IP。

ESP32-WebServer-APmode2.jpg


代码解释

  1. const char* ssid = "Electropeak";  
  2. const char* password = "123456789";
复制代码

在该段代码中,您可以输入任意SSID和密码,以便ESP32创建该名称的Wi-Fi连接点。

  1. IPAddress local_ip(192, 168, 1, 1);

  2. IPAddress gateway(192, 168, 1, 1);

  3. IPAddress subnet(255, 255, 255, 0);
复制代码

然后,您需要输入您的IP来创建网络。 (您可以使用代码中定义的相同IP。)

  1. WiFi.softAP(ssid, password);

  2. WiFi.softAPConfig(local_ip, gateway, subnet);
复制代码

上述命令创建Wi-Fi连接点。


其余代码与STA模式相同。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 56 | 回复: 109



手机版|

GMT+8, 2024-12-21 21:00 , Processed in 0.039249 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表