前面講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

image

接下來我們輸入該IP及IP+/esp  可以得到如下的結果

image

 

image

接著試著用我們定義的名稱來連線

image

image

都能正常顯示代表實驗成功

 

另外針對程式碼中的這個區塊進行說明

image

"/"的意思為首頁的路由,而/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"也很直白就是丟一個讓瀏覽器解析的編碼

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 凶王 的頭像
    凶王

    凶王的部落

    凶王 發表在 痞客邦 留言(0) 人氣()