首先,祝各位中秋佳節愉快~(明天又要繼續上班上課了),不知道各位小夥伴連假期間是否在某些方面有些進步了呢?!(當然是知識的進步啦!!)扯遠了。回歸正題,昨天的程式碼中運用到許多新花樣,然而這些技術如要學都算是更高階級的技術了,如AHT10所用到的I²C介面,I²C的應用就篇較後面學習的了,因為關係到晶片的運作原理,所以今天先講較為簡單的函式庫,如後面有機會在跟各位談I²C。
ESPAsyncWebServer是款支援Esp32與Esp8266的一套函式庫,Esp8266是款比Esp32更小的晶片,且Esp8266是Esp32得前身,所以Esp8266也有WiFi等功能,那如果仔細觀看程式碼會發現此次程式碼變很不同,那是因為此函式庫的特別之處,客戶端請求分析不是由loop處理。
如安裝ESPAsyncWebServer,就還要安裝AsyncTCP,因為ESPAsyncWebServer是建立在AsyncTCP上去跑的。
剛剛有說基本的指令對,所以這邊稍微講一下
導入函式庫
#include <ESPAsyncWebServer.h>
設定服務的通訊埠
AsyncWebServer server(80);
80這個通訊埠屬於http,也是網頁預設會預先進入的通訊埠
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", index_html, processor);
});
server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(t).c_str());
});
server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/plain", String(h).c_str());
});
這邊算是設定,也就是server.on("目錄位置",接收方式,接收型態),所以第111、114、117行是設定這三個頁面(預設會先進/,除非在IP方打上/temperature,才會進入不同頁面)。
request->send_P(HTTP狀態碼,類型,資料)。
那這三行主要就是後面資料的部分,資料會找到上面的86行,進行判斷,如果var的值是如何就回傳該數值,舉例進入if(var == "TEMPERATURE"),那就會回傳t的數值(下方loop()裡面有在抓取t的數值),但t會從int轉成String(因為t變數前面有加String,所以會強制轉型)
String processor(const String& var){
//Serial.println(var);
if(var == "TEMPERATURE"){
return String(t);
}
else if(var == "HUMIDITY"){
return String(h);
}
return String();
}
好了,連假最後一天內容也就不要那麼多了,也讓腦袋放鬆一下!!那下次會講解loop是如何一直讀取數值的,所以可以好好期待一下後天那篇文章,那明天會講解STA + AHT10的部分,希望大家對此函式庫有多一分的了解,也希望這次得講解你們聽得清楚,那就明天在會囉~