物聯網-wemos D1 Mini (esp8266)實驗四 -- 實驗二中的丟失尋找器改進為手機控制水泵
阿新 • • 發佈:2018-12-24
材料:
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(); }