iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
自我挑戰組

Maker making IoT !!系列 第 21

[Day20] Esp32用AP mode + AHT10 - (程式碼講解)

1.前言

首先,祝各位中秋佳節愉快~(明天又要繼續上班上課了),不知道各位小夥伴連假期間是否在某些方面有些進步了呢?!(當然是知識的進步啦!!)扯遠了。回歸正題,昨天的程式碼中運用到許多新花樣,然而這些技術如要學都算是更高階級的技術了,如AHT10所用到的I²C介面,I²C的應用就篇較後面學習的了,因為關係到晶片的運作原理,所以今天先講較為簡單的函式庫,如後面有機會在跟各位談I²C。

2.ESPAsyncWebServer

ESPAsyncWebServer是款支援Esp32與Esp8266的一套函式庫,Esp8266是款比Esp32更小的晶片,且Esp8266是Esp32得前身,所以Esp8266也有WiFi等功能,那如果仔細觀看程式碼會發現此次程式碼變很不同,那是因為此函式庫的特別之處,客戶端請求分析不是由loop處理

如安裝ESPAsyncWebServer,就還要安裝AsyncTCP,因為ESPAsyncWebServer是建立在AsyncTCP上去跑的。

2-1.基本ESPAsyncWebServer的指令

  1. 導入函數庫
  2. 設定服務的通訊埠
  3. 利用on()方法抓取數值
  4. 監聽服務begin()

3.程式碼解說

剛剛有說基本的指令對,所以這邊稍微講一下

導入函式庫

#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的部分,希望大家對此函式庫有多一分的了解,也希望這次得講解你們聽得清楚,那就明天在會囉~


上一篇
[Day19] Esp32用AP mode + AHT10
下一篇
[Day21] Esp32用STA mode + AHT10
系列文
Maker making IoT !!30

尚未有邦友留言

立即登入留言