1. 程式人生 > >物聯網-wemos D1 Mini (esp8266)實驗四 -- 實驗二中的丟失尋找器改進為手機控制水泵

物聯網-wemos D1 Mini (esp8266)實驗四 -- 實驗二中的丟失尋找器改進為手機控制水泵

 材料:

             D1 Mini              1只                             11.5元

             2N2222 TO-92  1只                              2.89元/包(50只/包)

             靜音潛水微型水泵 3v-5v  100-200mA  1.7元

              按壓式接線端子 1只                             8.8元/包(100只/包)

              杜邦線若干

合計: 約13.5元

接線圖

操作: 

1 連線硬體電路

2 燒寫程式碼

3 手機連線D1 Mini的WiFi (本例中WiFi名為“AA”,無密碼,你可以根據自己的喜好在下圖位置進行更改)

完整原始碼 

#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/html", errorPage);//"text/plain":原樣無格式輸出
}

void handleSetting() {//網頁設定處理函式
  _esp8266WebServer.send(200, "text/html", 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"AA", u8"", 1,false));//ap賬號(AA)、密碼(無)設定。
  _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();

}