在本篇文章中,您將學習到如何使用ESP32設置一個Web服務器,以及使用HTML和CSS創建Web頁面。通過本文,你將學習到:
● 了解Web服務器的基礎知識
● 使用ESP32創建Web服務器
<ignore_js_op>
什么是Web服務器?
Web服務器是發送和接收信息,處理信息並存儲信息的地方。 Web服務器還可以在網頁上顯示這些信息。
服務器通過稱為超文本傳輸協議(HTTP)的協議與用戶通信。
當請求發送到此服務器時(例如,在瀏覽器中搜索其地址),服務器返回代碼作為響應(例如,代碼200,表示連接已正確建立,或代碼404,表示地址不正確)。您可以在此處找到這些代碼的完整列表。
<ignore_js_op>
所需的材料
● ESP32模塊
● Arduino IDE
在站模式下(STA)設置ESP32
在這種情況下,ESP32模塊作為客戶端連接到Wi-Fi路由器,可以通過路由器訪問Internet。
<ignore_js_op>
代碼
要在STA模式下啟動ESP32,只需在開發板上上傳以下代碼即可。
- /*
- ESP32 Web Server - STA Mode
- modified on 25 MAy 2019
- by Mohammadreza Akbari @ Electropeak
- https://electropeak.com/learn
- */
- #include <WiFi.h>
- #include <WebServer.h>
- // SSID & Password
- const char* ssid = "*****"; // Enter your SSID here
- const char* password = "*****"; //Enter your Password here
- WebServer server(80); // Object of WebServer(HTTP port, 80 is defult)
- void setup() {
- Serial.begin(115200);
- Serial.println("Try Connecting to ");
- Serial.println(ssid);
- // Connect to your wi-fi modem
- WiFi.begin(ssid, password);
- // Check wi-fi is connected to wi-fi network
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected successfully");
- Serial.print("Got IP: ");
- Serial.println(WiFi.localIP()); //Show ESP32 IP on serial
- server.on("/", handle_root);
- server.begin();
- Serial.println("HTTP server started");
- delay(100);
- }
- void loop() {
- server.handleClient();
- }
- // HTML & CSS contents which display on web server
- String HTML = "<!DOCTYPE html>\
- <html>\
- <body>\
- <h1>My First Web Server with ESP32 - Station Mode</h1>\
- </body>\
- </html>";
- // Handle root url (/)
- void handle_root() {
- server.send(200, "text/html", HTML);
- }
上傳代碼后,打開串口監視器窗口。如果您輸入了正確的SSID和密碼,幾秒鍾后,ESP32將連接到路由器並返回IP地址。
<ignore_js_op>
在瀏覽器中輸入該IP,您可以看到剛剛創建的網頁。
注意:您的PC(您的瀏覽器)應該連接到與ESP32相同的路由器。
<ignore_js_op>
代碼解釋
- #include <WiFi.h>
- #include <WebServer.h>
在代碼的起始處添加了兩個必需的庫。 WiFi.h庫用於設置wifi部分,WebServer.h庫用於構建網頁。
- const char* ssid = "****";
- const char* password = "****";
在這兩行代碼中輸入路由器的SSID和密碼。
- WebServer server(80);
此命令從webserver類定義一個名為server的對象。使用此對象,您可以在端口80上創建網頁。
在setup()函數部分,首先啟動串行通信。
- WiFi.begin(ssid, password);
使用WiFi.begin命令,ESP32嘗試使用SSID和代碼中定義的密碼連接到您的wifi路由器。
- while (WiFi.status() != WL_CONNECTED) {
- delay(1000);
- Serial.print(".");
- }
- Serial.println("");
- Serial.println("WiFi connected successfully");
上面的代碼在串口監視器上打印字符“.”,直到ESP32連接到Wi-Fi路由器。正確建立連接后,串行監視器上會顯示“WiFi connected successfully”。
- Serial.print("Got IP: ");
- Serial.println(WiFi.localIP());
然后ESP32的IP地址將打印在串口監視器上。
要管理HTTP請求並指定在搜索URL地址時要運行的代碼部分,請使用on方法。
- server.on("/", handle_root);
在上面的代碼中,當在瀏覽器中搜索主地址(放置在IP之后)時,調用handle_root函數。
最后,使用server. begin命令,您的Web服務器開始工作。
在loop()函數部分中,只調用handleClient方法,這樣您的代碼始終監聽Web服務器以管理服務器上發生的事件。
- String HTML = "<!DOCTYPE html>\
- <html>\
- <body>\
- <h1>My First Web Server with ESP32 - Station Mode </h1>\
- </body>\
- </html>";
HTML字符串包含應在網頁上顯示的代碼。
小提示:要在幾行中編寫一條指令,只需在每行的末尾添加一個反斜杠(\)。
- void handle_root() {
- server.send(200, "text/html", HTML);
- }
只要在瀏覽器中搜索主路徑(IP地址),就會調用handle_root-unction。在此函數中,使用send方法。
send命令發送代碼號200(表示頁面正確打開)以及我們編寫的HTML代碼,以在網頁上顯示它。
在接入點模式(AP)中設置ESP32
在這種情況下,ESP32充當路由器並使用所需的名稱和密碼創建本地wifi網絡。由於可以連接到此連接點的設備數量有限,因此它也稱為軟訪問點。
<ignore_js_op>
代碼
在電路板上上傳以下代碼,以便在AP模式下設置ESP32。
- /*
- ESP32 Web Server - AP Mode
- modified on 25 MAy 2019
- by Mohammadreza Akbari @ Electropeak
- https://electropeak.com/learn
- */
- #include <WiFi.h>
- #include <WebServer.h>
- // SSID & Password
- const char* ssid = "Electripeak"; // Enter your SSID here
- const char* password = "123456789"; //Enter your Password here
- // IP Address details
- IPAddress local_ip(192, 168, 1, 1);
- IPAddress gateway(192, 168, 1, 1);
- IPAddress subnet(255, 255, 255, 0);
- WebServer server(80); // Object of WebServer(HTTP port, 80 is defult)
- void setup() {
- Serial.begin(115200);
- // Create SoftAP
- WiFi.softAP(ssid, password);
- WiFi.softAPConfig(local_ip, gateway, subnet);
- Serial.print("Connect to My access point: ");
- Serial.println(ssid);
- server.on("/", handle_root);
- server.begin();
- Serial.println("HTTP server started");
- delay(100);
- }
- void loop() {
- server.handleClient();
- }
- // HTML & CSS contents which display on web server
- String HTML = "<!DOCTYPE html>\
- <html>\
- <body>\
- <h1>My First Web Server with ESP32 - AP Mode </h1>\
- </body>\
- </html>";
- // Handle root url (/)
- void handle_root() {
- server.send(200, "text/html", HTML);
- }
上傳代碼后,連接到您所建立的連接點。
<ignore_js_op>
現在在瀏覽器中輸入192.168.1.1 IP。
<ignore_js_op>
代碼解釋
- const char* ssid = "Electropeak";
- const char* password = "123456789";
在該段代碼中,您可以輸入任意SSID和密碼,以便ESP32創建該名稱的Wi-Fi連接點。
- IPAddress local_ip(192, 168, 1, 1);
- IPAddress gateway(192, 168, 1, 1);
- IPAddress subnet(255, 255, 255, 0);
然后,您需要輸入您的IP來創建網絡。 (您可以使用代碼中定義的相同IP。)
- WiFi.softAP(ssid, password);
- WiFi.softAPConfig(local_ip, gateway, subnet);
上述命令創建Wi-Fi連接點。
其余代碼與STA模式相同。