1. 程式人生 > >物聯網-wemos D1 Mini (esp8266)實驗二 --- 蜂鳴器版失物尋找 附完整原始碼和註釋

物聯網-wemos D1 Mini (esp8266)實驗二 --- 蜂鳴器版失物尋找 附完整原始碼和註釋

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

//HTML主頁mainPage
static const char mainPage[] PROGMEM = u8R"(
  <!DOCTYPE html>
  <html>
  <head>
      <title>ESP8266</title>
      <meta name='viewport' content='width=device-width, initial-scale=1.0'>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <a href='call?buzzer=ON'>呼叫蜂鳴器</a> 
    <br><br>
    <a href='call?buzzer=OFF'>關閉蜂鳴器</a> 
    <p>蜂鳴器失物找尋測試</p>
  </body>
  </html>
)";
//錯誤路徑HTML
static const char errorPage[] PROGMEM= u8R"(
路徑錯誤
)";
//設定路徑HTML  
static const char settingPage[] PROGMEM= u8R"(
請設定
)";


String buzzerState = u8"OFF";//蜂鳴器狀態 
ESP8266WebServer _esp8266WebServer(80);//定義esp82666WebServer例項

void handleRoot() {//網頁根目錄處理函式
  _esp8266WebServer.send(200, "text/html", mainPage);//"text/html":以html的格式輸出
}

void handleNotFound() {//網路路徑不存在處理函式
  _esp8266WebServer.send(404, "text/plain", errorPage);//"text/plain":原樣無格式輸出
}

void handleSetting() {//網頁設定處理函式
  _esp8266WebServer.send(200, "text/plain", settingPage);
}

void buzzerStateHandel() {
  if (_esp8266WebServer.hasArg(u8"buzzer")) {
    buzzerState = _esp8266WebServer.arg(u8"buzzer");
    if (buzzerState == u8"ON") {
      pinMode(D1, OUTPUT);
      digitalWrite(D1, HIGH);
    } else if (buzzerState == u8"OFF") {
      pinMode(D1, OUTPUT);
      digitalWrite(D1, LOW);
    }
    _esp8266WebServer.send(200, u8"text/plain", String(u8"OK"));
  }
}


// setup() 啟動時執行一次
void setup() {

  //伺服器設定
  while (!WiFi.softAP(u8"MYBUZZER", u8"", 1,false));//ap賬號(MYBUZZER)、密碼(無)設定。
  _esp8266WebServer.on("/call", buzzerStateHandel);//含有buzzer這個變數的處理函式
  _esp8266WebServer.on("/", handleRoot);
  _esp8266WebServer.onNotFound(handleNotFound);
  _esp8266WebServer.on("/setting", handleSetting);
  _esp8266WebServer.begin();

  //蜂鳴器設定為off狀態
  pinMode(D1, OUTPUT);
  digitalWrite(D1, LOW);

}

// loop() 迴圈執行
void loop() {
  _esp8266WebServer.handleClient();

}