資料介紹
描述
在這篇文章中,我們將討論如何使用我們的手機通過使用 ESP8266 NodeMCU Web 服務器來控制我們的電子元件。我們通過手機瀏覽器連接到我們的網絡服務器并控制我們喜歡的任何組件。在這篇文章中,我們使用 LED 和無源蜂鳴器,但這可以擴展到通過繼電器控制高壓電器。
鏈接到我的頁面ESP8266 NodeMCU Web Server:控制手機中的組件
請觀看以下視頻,了解我們將在這篇文章中做什么的演示。
什么是 ESP8266 NodeMCU Web 服務器?
在深入探討如何通過手機控制組件之前,讓我們先討論一下什么是 Web 服務器。
來自維基百科,“網絡服務器是服務器軟件,或專用于運行該軟件的硬件,可以滿足萬維網上的客戶請求。
在我們的案例中,我們使用 NodeMCU ESP8266 的功能充當我們的 Web 服務器并托管我們的網站。我們在瀏覽器中輸入 Web 服務器的地址時發出“請求”,我們收到了 html 標記形式的“響應”。下圖是我們的瀏覽器發送到我們的 Web 服務器的 HTTP GET 請求的示例。
NodeMCU ESP8266 Web 服務器接收到這個請求并回復一個 HTML 響應。它還處理我們組件的接口,因此它檢查來自 Web 瀏覽器的請求并采取相應的行動。
ESP8266 芯片及其最新的 ESP32 芯片都是關于 wifi 和連接性的。這使其非常適合我們的物聯網 (IOT) 項目。
接線圖
NodeMCU ESP8266 組件 D1 無源蜂鳴器信號引腳 D7 LED 陽極 GND 面包板 GND 導軌
注意:在 LED 上添加一個 220 歐姆的限流電阻,并確保將蜂鳴器和引導至面包板導軌的接地。
代碼
該項目的代碼在我的github帳戶中,如下所示。
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
/********** PLEASE CHANGE THIS *************************/
const char* ssid = "" ;
const char* password = "" ;
ESP8266WebServer server(80);
uint8_t LEDPin = D7;
bool LEDStatus = LOW;
uint8_t buzzerPin = D1;
bool buzzerStatus = LOW;
void setup() {
Serial.begin(115200);
pinMode(LEDPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.begin(ssid, password);
//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: "); Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/toggleLED", updateLED);
server.on("/toggleBuzzer", updateBuzzerSound);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
void handleRoot() {
server.send(200, "text/html", prepareHTML());
}
void updateLED() {
Serial.println("Updating LED Status....");
LEDStatus = !LEDStatus;
digitalWrite(LEDPin, LEDStatus);
server.send(200, "text/html", prepareHTML());
}
void updateBuzzerSound() {
Serial.println("Updating Buzzer Status....");
buzzerStatus = !buzzerStatus;
if (buzzerStatus)
tone(buzzerPin, 1200);
else
noTone(buzzerPin);
server.send(200, "text/html", prepareHTML());
}
void handleNotFound() {
server.send(404, "text/plain", "Not found");
}
String prepareHTML() {
String html = ""
""
""
"UTF-8\">"
"viewport\" content="width=device-width, initial-scale=1\">"
"NodeMCU ESP8266 Web Server "
""
""
""
"
""
""
""
"container\">"
"hero\">"
"NodeMCU ESP8266 Web Server
"
"flex-container\">"
" flex-child magenta\">"
"component-label\">LED"
" "
" flex-child green\">"
"grid-child green\">"
"display: inline\">"
"onoffswitch\">";
if (LEDStatus)
html = html + "checkbox\" name="onoffswitch\" class="onoffswitch-checkbox\" id="ledSwitch\" tabindex="0\" checked onclick="window.location.href='toggleLED'\">";
else
html = html + "checkbox\" name="onoffswitch\" class="onoffswitch-checkbox\" id="ledSwitch\" tabindex="0\" onclick="window.location.href='toggleLED'\">";
html = html +
"
"onoffswitch-inner\">"
"onoffswitch-switch\">"
""
""
""
""
" "
""
"flex-container\">"
" flex-child magenta\">"
"component-label\">Buzzer"
" "
" flex-child green\">"
"grid-child green\">"
"display: inline\">"
"onoffswitch\">";
if (buzzerStatus)
html = html + "checkbox\" name="onoffswitch\" class="onoffswitch-checkbox\" id="buzzerSwitch\" tabindex="0\" checked onclick="window.location.href='toggleBuzzer'\">";
else
html = html + "checkbox\" name="onoffswitch\" class="onoffswitch-checkbox\" id="buzzerSwitch\" tabindex="0\" onclick="window.location.href='toggleBuzzer'\">";
html = html +
"
"onoffswitch-inner\">"
"onoffswitch-switch\">"
""
""
""
""
" "
""
""
""
""
"";
return html;
}
讓我們逐行討論代碼。
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
/********** PLEASE CHANGE THIS *************************/
const char* ssid = "" ;
const char* password = "" ;
包括必要的頭文件。我們正在使用ESP8266 Core for Arduino對我們的 NodeMCU 進行編程。如果您不知道這是如何完成的,請查看我關于如何安裝此插件的步驟的另一篇文章。請更改 ssid 和密碼以匹配您的 wifi 設置。
ESP8266WebServer server(80);
uint8_t LEDPin = D7;
bool LEDStatus = LOW;
uint8_t buzzerPin = D1;
bool buzzerStatus = LOW;
我們在這里制作了一個 ESP8266 NodeMCU Web 服務器,因此我們定義了一個可以同時處理一個客戶端的服務器。有關更多詳細信息,請參閱ESP8266 Arduino Core github 項目上的以下鏈接。我們定義了 LED 引腳和蜂鳴器引腳,并將兩個組件的初始狀態設置為低電平。
void setup() {
Serial.begin(115200);
pinMode(LEDPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.println("Connecting to ");
Serial.println(ssid);
//connect to your local wi-fi network
WiFi.begin(ssid, password);
//check wi-fi is connected to wi-fi network
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected..!");
Serial.print("Got IP: "); Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/toggleLED", updateLED);
server.on("/toggleBuzzer", updateBuzzerSound);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
我們首先將引腳設置為輸出,然后連接到我們的 Wifi。之后,我們為我們的 Web 服務器設置 url 目標。我們定義了三個 url 鏈接,我們將使用它們來訪問我們的 web 服務器。對于每個鏈接,我們設置了一個函數,一旦請求該 url,就會調用該函數。
-
http://
/ -> 顯示我們的根頁面 -
http://
/toggleLED -> 切換我們的 LED 值 -
http://
/toggleBuzzer -> 打開和關閉蜂鳴器。
void loop() {
server.handleClient();
}
服務器等待來自我們手機的任何 GET 請求。它只接受一個同時的客戶。稍后我們將創建一篇文章,使其更具動態性并處理更多請求。
void handleRoot() {
server.send(200, "text/html", prepareHTML());
}
void updateLED() {
Serial.println("Updating LED Status....");
LEDStatus = !LEDStatus;
digitalWrite(LEDPin, LEDStatus);
server.send(200, "text/html", prepareHTML());
}
void updateBuzzerSound() {
Serial.println("Updating Buzzer Status....");
buzzerStatus = !buzzerStatus;
if (buzzerStatus)
tone(buzzerPin, 1200);
else
noTone(buzzerPin);
server.send(200, "text/html", prepareHTML());
}
void handleNotFound() {
server.send(404, "text/plain", "Not found");
}
當調用我們 Web 服務器中的特定 url 時調用的函數。每個函數都會調用prepareHTML()方法,該方法會返回一個 HTML 標記。
handleRoot函數創建初始 html,并在客戶端調用我們的默認 Web 服務器 IP 地址和端口時顯示。
當我們滑動LED 切換按鈕時會調用updateLED 。它將 LED 的輸出設置為 HIGH 或 LOW
updateBuzzerSound在我們滑動Buzzer 切換按鈕時被調用。它調用tone和noTone函數來控制無源蜂鳴器。
當訪問的 url 不等于我們的根頁面、toggleLED 或 toggleBuzzer 時會調用 handleNotFound,并且只會在我們的瀏覽器中返回一條文本消息。
String prepareHTML() {
String html = "html>"
"<html>"
"<head>"
"<meta charset=\"UTF-8">"
"<meta name=\"viewport" content=\"width=device-width, initial-scale=1\">"
"<title>NodeMCU ESP8266 Web Servertitle>"
.
.
.
函數prepareHTML()是有趣的部分,因為這是我們創建 html 頁面并使用級聯樣式表 (css) 和 Javascript 來創建用戶界面的地方。如果您想查看原始代碼,請單擊此鏈接。我使用mincss框架為我們的頁面設置樣式,以便它在我們的手機中看起來不錯。為了創建滑動切換按鈕,我使用了https://proto.io/freebies/onoff/ ,這是一種使用純 CSS 的 html 用戶界面。所有權利都屬于他們,因為他們想出了這么好的工具和 html UI。沒有侵犯版權,因為我在谷歌上搜索過!
這個函數中有趣的部分就在這行中。
if (LEDStatus)
html = html + ""checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="ledSwitch" tabindex="0" checked onclick="window.location.href='toggleLED'">";
else
html = html + ""checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="ledSwitch" tabindex="0" onclick="window.location.href='toggleLED'">";
if (buzzerStatus)
html = html + ""checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="buzzerSwitch" tabindex="0" checked onclick="window.location.href='toggleBuzzer'">";
else
html = html + ""checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="buzzerSwitch" tabindex="0" onclick="window.location.href='toggleBuzzer'">";
注意“ checked ”屬性。如果存在此屬性,則表示切換滑塊按鈕為ON ,否則為OFF 。
我們添加了一個“onclick ”屬性并使用 javascript 向我們預定義的toggleLED和toggleBuzzer url 端點發出 GET 請求。
而已!
快樂探索!
如果你喜歡我的帖子,那么請考慮分享這個。謝謝!
- 使用ESP8266(NodeMCU)控制遠程電源插座
- 使用ESP8266 NodeMCU編程ESP12F 8次下載
- 基于ESP8266的Web服務器 1次下載
- NodeMCU ESP8266啟用AJAX的Web服務器
- 簡單的NodeMCU WiFi控制汽車(ESP8266)
- 調用Lua新建的WEB服務器 操作Nodemcu esp8266 控制繼電器實現物聯網
- esp8266(nodeMCU)+web控制點陣屏上下左右移動
- esp8266 nodeMCU arduino開發環境
- NodeMCU ESP8266開發入門
- ESP8266-NodeMCU項目(二):ESP8266-NodeMCU+bl
- ESP8266(NodeMCU)建立最簡單的網頁
- Esp8266(NodeMCU)連接阿里云服務器
- ESP8266-NodeMCU
- ESP8266 Nodemcu學習心得②
- 如何建立一個帶Arduino IDE的ESP8266 Web服務器 2次下載
- 使用CW32單片機通過ESP8266連接OneNET物聯網平臺 1176次閱讀
- ESP8266紅外信號收發實驗 1678次閱讀
- ESP8266硬件 4143次閱讀
- 基于ESP32的簡易web服務器設計 3300次閱讀
- ESP8266/ESP32自動下載原理 4249次閱讀
- 如何使用ESP8266制作可配置的Web服務器 1.2w次閱讀
- 如何利用ESP8266制作一個簡單的四軸飛行器 4532次閱讀
- 如何利用ESP8266和Neopixel Ring實現時鐘的彩色顯示 2557次閱讀
- 如何利用ESP8266實現智能手表的設計 2999次閱讀
- STM32系列設計,ESP8266聯網授時時鐘 7825次閱讀
- esp8266中文資料匯總(esp8266引腳圖_與單片機連接_串口wifi實例) 22.4w次閱讀
- ESP8266 Wi-Fi到底傳多遠_esp8266 wifi信號強度測距 5.1w次閱讀
- 遠程控制通訊--基于Arduino + ESP8266控制LED燈 3.9w次閱讀
- esp8266 at指令集詳解 14.1w次閱讀
- esp8266串口wifi實例 1.8w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多