前面講WebServer的時候都是通過ip連過去的,如果想像一般上網那樣輸入域名www.google.com、www.taobao.com...等訪問的話就需要用到mDNS Server了。
備註: DNSServer與mDNSServer是不同的
使用DNSServer必須使設備處於AP模式下,在非AP模式下想實現同樣功能的話要用mDNS。
mDNS可以在非AP模式下使用但也有侷限,區網中其它設備也必須開啓mDNS服務互相間才能通過網址訪問。
下面的範例功能很簡單,燒完後輸入監控視窗中的IP或是自訂義的網址都可以連到我們ESP32的mdns server
程式碼:
#include <ESPmDNS.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "XXXXXXXXX";//輸入你的熱點
const char* password = "XXXXXXXXX";//輸入你的熱點密碼
AsyncWebServer server(80);
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
if(!MDNS.begin("helloesp32")) {//這裡的名稱就是之後輸入瀏覽器會跳到你的網頁的名稱
Serial.println("Error starting mDNS");
return;
}
Serial.println(WiFi.localIP());//成功後顯示ESP32的IP
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "Hello World test");
});
server.on("/esp", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "Hello esp test");
});
server.begin();
}
void loop(){}
將程式燒到ESP32後,打開監控視窗,會看到下圖的訊息,如果沒有請按板子上的reset
接下來我們輸入該IP及IP+/esp 可以得到如下的結果
接著試著用我們定義的名稱來連線
都能正常顯示代表實驗成功
另外針對程式碼中的這個區塊進行說明
"/"的意思為首頁的路由,而/esp的意思為helloesp32/esp的路由,可以想像成是每個頁面都有一個接收口,
你要把資料丟到哪,就要往那個地方的接收口丟
而下面這一行簡單來說就是要對client端提出的請求所要做的動作
request->send(200, "text/plain", "Hello World test");
他所要帶入的資料型態如下
request->send( 狀態碼 , 內容類型 , 內容 );
狀態碼 :
所謂的狀態碼好比說404或是200(代表成功)這些我們常聽到的都是HTTP的狀態碼,用來告訴我們當下狀態
詳細的說明可以參考: https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
內容類型:
內容類型常見的有兩種分別為 "text/plain" 及 "text/html"
"text/plain" 比較直白的說法就是直接回傳純文字(也就是範例所看到的),而 "text/html"的意思為回應HTML網頁給客戶端
內容:
內容的部分顧名思義就是要給Client的東西,以 "text/plain"的情況來說基本上都是丟字串過去,所以如果你要傳遞的東西不是String就必須強制轉移成字串
"text/html"也很直白就是丟一個讓瀏覽器解析的編碼
留言列表