0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用ESP8266制作可配置的Web服務(wù)器

科技觀察員 ? 來(lái)源:allaboutcircuits ? 作者:穆罕默德·阿明·卡 ? 2022-05-10 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在這個(gè)項(xiàng)目中,我們首先研究如何在 Arduino IDE 中安裝 ESP8266 插件,然后使用 ESP8266 制作可配置的 Web 服務(wù)器。

ESP8266 之所以受歡迎,很大程度上是因?yàn)樗哂谐錾男詢r(jià)比。它還可以通過(guò) Wi-Fi 將互聯(lián)網(wǎng)連接到微處理器。

它的主要缺點(diǎn)是功耗。ESP8266 不是一款非常節(jié)能的芯片,因?yàn)樗脑O(shè)計(jì)符合大多數(shù)家庭和企業(yè)都可以使用的 IEEE 802.1 協(xié)議(我們稱之為 Wi-Fi)。該協(xié)議議程保證了創(chuàng)建無(wú)線本地網(wǎng)絡(luò)的良好速度和穩(wěn)健性。更高的速度會(huì)導(dǎo)致更高的功耗,這使得 ESP8266 對(duì)于低功耗設(shè)計(jì)效率低下。

但是,ESP8266 在功耗不重要的情況下非常有用,例如不斷供電且不需要電池的設(shè)備。ESP8266 可以連接到任何 Wi-Fi 網(wǎng)絡(luò),并通過(guò) TCP 和 UDP 等各種協(xié)議發(fā)送或接收數(shù)據(jù)。此外,它還可以構(gòu)建 Wi-Fi 熱點(diǎn)并管理其他設(shè)備。

電路設(shè)計(jì)注意事項(xiàng)

ESP8266 可能需要 250mA 的電流來(lái)傳輸數(shù)據(jù)。因此,如果我們想要有足夠的余量,我們可能需要至少 500mA 的電流來(lái)為 ESP8266 供電。使用從計(jì)算機(jī)獲取電源USB 電纜為 ESP8266 供電可能會(huì)導(dǎo)致不穩(wěn)定。

在這個(gè)項(xiàng)目中,我們使用保證 1A 電流的 5V 電源和 LM1086-3.3V 作為穩(wěn)壓器為 ESP8266 供電。在圖 1 中,顯示了在引導(dǎo)加載程序和使用模式下使用 ESP8266 的引腳配置。

ada.jpg

?

圖 1.在引導(dǎo)加載程序和使用模式下使用 ESP8266。

Arduino 附加組件

安裝 ESP8266 插件在互聯(lián)網(wǎng)上的許多文章中都有描述,但為了清楚起見,我們將在這里簡(jiǎn)要介紹安裝。要安裝 ESP8266 插件,我們需要更新 Arduino IDE 中的板管理器??梢詮?File-》Preferences-》Additional Boards Manager URLs 添加一個(gè)額外的 Board Manager URL。在 URL 部分,應(yīng)輸入以下 URL,如圖 2 所示。

ESP-add.jpg

圖 2.其他董事會(huì)經(jīng)理 URL

通過(guò)更新 URL,可以通過(guò)導(dǎo)航到 Tools-》Boards-》Boards Manager 來(lái)訪問(wèn) ESP8266 插件。ESP8266 板可用,應(yīng)安裝。安裝后,在板部分,ESP8266 模塊將可用??梢赃x擇不同類型的模塊,并且出于本項(xiàng)目的目的(因?yàn)槲覀儤?gòu)建了我們正在使用的電路板),我們將使用通用 ESP8266 模塊。

將草圖上傳到 ESP8266

要對(duì) ESP8266 進(jìn)行編程,我們使用 ESP8266 已經(jīng)包含的 UART 引導(dǎo)加載程序。在這個(gè)項(xiàng)目中,我制作了一個(gè)簡(jiǎn)單的 ESP8266 開發(fā)板,原理圖如圖 3 和以下部件列表:

1. ESP8266-12(E或F不分大小,唯一區(qū)別是內(nèi)存)

2. 3.3K電阻 x 2

3. 470R 功率演示LED電阻

4. 一個(gè)LED決定板子是供電還是供電不是

5. AMS1117-3.3: 電壓調(diào)節(jié)器

6. 10uF-25v 電解電容

7. 22uF-25v 電解電容

8. 100nF 電容

9. 一個(gè)用于串行通信的 3 針連接器

10. 一個(gè)用于進(jìn)入引導(dǎo)加載程序的 2 針連接器

為了進(jìn)入啟動(dòng)模式,GPIO0 應(yīng)接地以啟動(dòng) ESP8266。然后通過(guò)在 Arduino IDE 中設(shè)置適當(dāng)?shù)?COM 端口,可以通過(guò)點(diǎn)擊上傳按鈕上傳草圖。編程完成后,GPIO0 應(yīng)該懸空,因?yàn)?ESP8266 應(yīng)該以正常模式啟動(dòng)并運(yùn)行程序。

main_schematic1.jpg

圖 3. ESP8266-12E 開發(fā)板原理圖

連接到接入點(diǎn)

ESP8266 具有內(nèi)置 EEPROM,可用于存儲(chǔ)數(shù)據(jù)等應(yīng)用,以構(gòu)建安全登錄頁(yè)面。使用 EEPROM 很像其他 Arduino 板,但有一些細(xì)微差別。

一方面,您需要在開始讀取或?qū)懭胫罢{(diào)用 EEPROM.begin(size)。大小是您要使用的字節(jié)數(shù),介于 4 到 4096 字節(jié)之間。請(qǐng)注意,EEPROM.write() 不會(huì)立即寫入閃存。每當(dāng)您希望將更改保存到閃存時(shí),都必須調(diào)用 EEPROM.commit()。

在這個(gè)項(xiàng)目中,我們想要制作一個(gè)可配置的 Web 服務(wù)器,它可以放置在每個(gè)網(wǎng)絡(luò)中(即,在沒有 SSID 和接入點(diǎn)連接密碼的新網(wǎng)絡(luò)中)以與之前的設(shè)置進(jìn)行連接。當(dāng)連接失敗時(shí),ESP8266 將進(jìn)入接入點(diǎn)模式并等待接收配置設(shè)置(SSID 和密碼)。

一開始,我們獲取 512 字節(jié)的 EEPROM 并檢查用戶名或密碼是否可用。我們還可以為我們的設(shè)備選擇一個(gè)特定的 IP 地址并手動(dòng)設(shè)置,需要存儲(chǔ)在 EEPROM 中。當(dāng)我們需要?jiǎng)?chuàng)建設(shè)備數(shù)據(jù)庫(kù)以了解其位置和定義時(shí),手動(dòng)設(shè)置設(shè)備 IP 很有用。

在下面的完整代碼片段中,我們從 EEPROM 中保留 512 個(gè)字節(jié),然后在收集信息后,我們嘗試連接到接入點(diǎn)。在完整的代碼中,如果 EEPROM 為空,代碼將繞過(guò)連接階段。

EEPROM.begin(512);
IPAddress ipad(192, 168, 1, eip.toInt());
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WiFi.begin(esid.c_str(), epass.c_str());
WiFi.config(ipad, gateway, subnet);

上面的代碼嘗試使用存儲(chǔ)在 EEPROM 中的特定 IP 地址連接到網(wǎng)絡(luò)。使用特定 IP 地址時(shí)要記住的一件事是,我們需要知道網(wǎng)關(guān) IP 地址以及網(wǎng)絡(luò)子網(wǎng)掩碼。另一方面,上述項(xiàng)目對(duì)于需要 DHCP 服務(wù)器的自動(dòng) IP 尋址不是必需的。

可以使用 WiFi.status() 函數(shù)檢查 Wi-Fi 狀態(tài)。根據(jù) Arduino 網(wǎng)站,此函數(shù)返回以下內(nèi)容:

WL_CONNECTED:連接到 Wi-Fi 網(wǎng)絡(luò)時(shí)分配

WL_NO_SHIELD:在沒有 Wi-Fi 屏蔽時(shí)分配

WL_IDLE_STATUS:在調(diào)用 WiFi.begin() 時(shí)分配的臨時(shí)狀態(tài),并保持活動(dòng)狀態(tài),直到嘗試次數(shù)到期(導(dǎo)致 WL_CONNECT_FAILED)或建立連接(導(dǎo)致 WL_CONNECTED)

WL_NO_SSID_AVAIL:當(dāng)沒有可用的 SSID 時(shí)分配

WL_SCAN_COMPLETED:掃描網(wǎng)絡(luò)完成時(shí)分配

WL_CONNECT_FAILED:在所有嘗試連接失敗時(shí)分配

WL_CONNECTION_LOST:連接丟失時(shí)分配

WL_DISCONNECTED:從網(wǎng)絡(luò)斷開時(shí)分配

通過(guò)使用 WiFi.status() 函數(shù),我們可以檢查連接狀態(tài),如果不存在,ESP8266 應(yīng)該轉(zhuǎn)向接入點(diǎn)。

可以使用 WiFi.mode(WIFI_AP) 進(jìn)行接入點(diǎn)配置,這需要用戶名和密碼??梢允褂?WiFi.softAP 函數(shù)設(shè)置用戶名和密碼。描述每一個(gè) Wi-Fi 功能會(huì)使這篇文章變得非常長(zhǎng),并且超出了本項(xiàng)目的范圍。但是,熱心的人可以在GitHub和Arduino 網(wǎng)站上找到有關(guān) ESP6288 的 Wi-Fi 功能和其他庫(kù)的非常全面的文檔。

在這個(gè)項(xiàng)目中,我們希望將我們的設(shè)備連接到現(xiàn)有網(wǎng)絡(luò)。首先,當(dāng)我們的設(shè)備沒有連接網(wǎng)絡(luò)的SSID和密碼時(shí),它會(huì)進(jìn)入接入點(diǎn)模式,然后我們可以對(duì)其進(jìn)行配置。配置完成后,設(shè)備可以連接到所需的網(wǎng)絡(luò)。另一方面,有人可能只想在接入點(diǎn)模式下使用 ESP8266。在這種情況下,我們需要在要傳輸數(shù)據(jù)時(shí)連接到設(shè)備。

因此,在接入點(diǎn)模式下,ESP8266 將等待一組新的配置??梢允褂梅祷卣麛?shù)的 WiFi.scanNetworks 掃描該區(qū)域中可用的無(wú)線接入點(diǎn),以確定現(xiàn)有的接入點(diǎn)。收集可用網(wǎng)絡(luò)的數(shù)量后,以下功能可以為您提供所需的所有信息:

WiFi.SSID:獲取當(dāng)前網(wǎng)絡(luò)的SSID

WiFi.RSSI:獲取與路由器連接的信號(hào)強(qiáng)度

WiFi.encryptionType:獲取當(dāng)前網(wǎng)絡(luò)的加密類型

圖 4 顯示了 WiFi.scanNetworks 的輸出。數(shù)據(jù)通過(guò) RS232 通信和名為TeraTerm的程序捕獲 。

teraterm.jpg

圖 4.掃描網(wǎng)絡(luò)

移動(dòng)DNS

使用預(yù)建庫(kù)很容易在 ESP8266 上創(chuàng)建 Web 服務(wù)器。此外,可以使用 ESP8266mDNS 庫(kù)創(chuàng)建一個(gè)簡(jiǎn)單的多播域名系統(tǒng) (mDNS),將名稱鏈接到網(wǎng)絡(luò)中的服務(wù)器 IP。mDNS 將主機(jī)名解析為缺少本地名稱服務(wù)器的小型網(wǎng)絡(luò)中的 IP 地址。它使用與單播 DNS 相同的編程接口、數(shù)據(jù)包格式和操作語(yǔ)義。

接下來(lái),“mdns.begin(‘esp8266’)”會(huì)導(dǎo)致一個(gè) mDNS 服務(wù)器被定義為 ESP8266 的名稱。如果一切正常,mdns.begin 函數(shù)返回 true,我們可以通過(guò) server.begin() 啟動(dòng)服務(wù)器。

讀取 GET 請(qǐng)求

我們可以通過(guò) mdns.update() 更新 mDNS 查詢,然后作為客戶端讀取請(qǐng)求。下面的代碼首先更新 mDNS 查詢,然后,如果數(shù)據(jù)包可用,則讀取它。

mdns.update();
WiFiClient client = server.available();
if (!client) {
return(20);
}
String req = client.readStringUntil('\r');
// Wait for data from client to become available
if(client.connected() && !client.available()){
return(20);
}

在上面的代碼中,ESP8266 檢查是否有任何客戶端可用。如果客戶端可用,它將讀取其數(shù)據(jù),直到它收到‘\r’,這意味著數(shù)據(jù)包的結(jié)束。從那時(shí)起,我們的 Web 服務(wù)器可以接收 GET 請(qǐng)求,但無(wú)法解釋它們或發(fā)送答案。

可以使用 client.print() 函數(shù)發(fā)送客戶端的答案。對(duì)于客戶端,為了將其視為網(wǎng)頁(yè)內(nèi)容(即在 Firefox 等瀏覽器中查看答案),答案應(yīng)為 HTML 格式。通過(guò)這種方式,我們可以使用我們的 ESP8266 創(chuàng)建一個(gè)圖形化的 HTML Web 服務(wù)器。

在上面的代碼中,我們讀取客戶端 GET 請(qǐng)求并將其存儲(chǔ)在“req”變量中?!畆eq’ 變量現(xiàn)在有 GET 數(shù)據(jù),我們可以簡(jiǎn)單地解釋它。根據(jù)客戶端的 GET 請(qǐng)求,我們應(yīng)該創(chuàng)建一個(gè)字符串,并使用 client.print() 函數(shù)生成客戶端答案。下面的代碼片段生成一個(gè)簡(jiǎn)單的 HTML 頁(yè)面,用于回復(fù)客戶。

s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n

ALL ABOUT CIRCUITS!"; s += "

"; s += "\r\n\r\n"; client.print(s);

在片段中,“200”命令已發(fā)送到客戶端。

結(jié)論

在這個(gè)項(xiàng)目中,我們檢查了用于創(chuàng)建簡(jiǎn)單 Web 服務(wù)器的 ESP8266 庫(kù)。然后,創(chuàng)建了一個(gè)可配置的 Web 服務(wù)器,該服務(wù)器采用 SSID 和所需無(wú)線網(wǎng)絡(luò)的密碼。最后,在連接到本地網(wǎng)絡(luò)后,GET 請(qǐng)求在設(shè)備和客戶端之間傳輸。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web服務(wù)器
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    24851
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6497

    瀏覽量

    192019
  • ESP8266
    +關(guān)注

    關(guān)注

    51

    文章

    965

    瀏覽量

    47371
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ESP8266配置為帶有AT命令的Web服務(wù)器,AT命令回復(fù)HTTP GET出現(xiàn)錯(cuò)誤怎么解決?

    我已將ESP8266配置為帶有 AT 命令的 Web 服務(wù)器。當(dāng)瀏覽連接時(shí),它會(huì)向我發(fā)送一個(gè)請(qǐng)求[i]GET /favicon.ico我想
    發(fā)表于 07-16 08:29

    使用EsP8266(NodeMCU)連接阿里云服務(wù)器

    Esp8266【NodeMCU】連接阿里云服務(wù)器創(chuàng)建阿里云產(chǎn)品添加設(shè)備Esp8266代碼MQTT_PASSWD密碼生成工具修改PubSubClient.h文件(不修改無(wú)法連接Mqtt服務(wù)器
    發(fā)表于 11-24 06:23

    ESP8266 WEB智能小后臺(tái) ,采電壓,繪曲線,向服務(wù)器傳信息

    ESP8266 WEB小后臺(tái) ,采電壓,繪曲線,向服務(wù)器傳信息一個(gè)月前,自己想設(shè)計(jì)一個(gè)不用安裝應(yīng)用程序的智能手機(jī)控制的硬件。是否有人有興趣?有興趣的可以聯(lián)系我,朝“自帶智能使用程序的智能硬件,或是有
    發(fā)表于 11-25 22:15

    ESP8266使Web服務(wù)器完全無(wú)響應(yīng)是怎么回事?

    我正在使用 ESP8266WebServer 庫(kù)和為 NodeMCU ESP8266 編譯的草圖。我知道庫(kù)創(chuàng)建的服務(wù)器需要以下代碼才能激活: void loop(void
    發(fā)表于 05-12 08:20

    使用ESP8266作為Web服務(wù)器,如何將網(wǎng)頁(yè)上傳到SPIFFS?

    我希望這是一個(gè)宣布這個(gè)的好地方...... 我一直在使用 ESP8266 作為 Web 服務(wù)器,因此必須一直將我的網(wǎng)頁(yè)上傳到 SPIFFS。 我曾經(jīng)使用 Arduino IDE 和 SPIFFS
    發(fā)表于 05-23 08:49

    ESP8266可作為Web服務(wù)器嗎?怎么實(shí)現(xiàn)?

    ESP8266可作為Web服務(wù)器嗎怎么實(shí)現(xiàn)
    發(fā)表于 10-24 08:17

    如何建立一個(gè)帶Arduino IDE的ESP8266 Web服務(wù)器

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何建立一個(gè)帶Arduino IDE的ESP8266 Web服務(wù)器
    發(fā)表于 06-02 08:00 ?2次下載
    如何建立一個(gè)帶Arduino IDE的<b class='flag-5'>ESP8266</b> <b class='flag-5'>Web</b><b class='flag-5'>服務(wù)器</b>

    Esp8266(NodeMCU)連接阿里云服務(wù)器

    Esp8266【NodeMCU】連接阿里云服務(wù)器創(chuàng)建阿里云產(chǎn)品添加設(shè)備Esp8266代碼MQTT_PASSWD密碼生成工具修改PubSubClient.h文件(不修改無(wú)法連接Mqtt服務(wù)器
    發(fā)表于 11-16 10:21 ?18次下載
    <b class='flag-5'>Esp8266</b>(NodeMCU)連接阿里云<b class='flag-5'>服務(wù)器</b>

    調(diào)用Lua新建的WEB服務(wù)器 操作Nodemcu esp8266 控制繼電器實(shí)現(xiàn)物聯(lián)網(wǎng)

    調(diào)用Lua新建的WEB服務(wù)器 操作Nodemcu esp8266 控制繼電器實(shí)現(xiàn)物聯(lián)網(wǎng)
    發(fā)表于 12-08 16:51 ?13次下載
    調(diào)用Lua新建的<b class='flag-5'>WEB</b><b class='flag-5'>服務(wù)器</b>  操作Nodemcu <b class='flag-5'>esp8266</b> 控制繼電器實(shí)現(xiàn)物聯(lián)網(wǎng)

    esp8266作為web服務(wù)器的實(shí)現(xiàn)

    最近要在ESP8266和單片機(jī)之間實(shí)現(xiàn)網(wǎng)頁(yè)控制
    發(fā)表于 12-29 18:53 ?1次下載
    <b class='flag-5'>esp8266</b>作為<b class='flag-5'>web</b><b class='flag-5'>服務(wù)器</b>的實(shí)現(xiàn)

    最簡(jiǎn)單DIY基于ESP8266的物聯(lián)網(wǎng)智能小車②(webserver服務(wù)器網(wǎng)頁(yè)高級(jí)遙控版)

    ESP8266ESP32物聯(lián)網(wǎng)智能小車開發(fā)系列文章目錄第一篇:最簡(jiǎn)單DIY基于ESP8266的物聯(lián)網(wǎng)智能小車①(webserver服務(wù)器網(wǎng)頁(yè)簡(jiǎn)單遙控版)第二篇:最簡(jiǎn)單DIY基于
    發(fā)表于 12-29 18:58 ?0次下載
    最簡(jiǎn)單DIY基于<b class='flag-5'>ESP8266</b>的物聯(lián)網(wǎng)智能小車②(webserver<b class='flag-5'>服務(wù)器</b>網(wǎng)頁(yè)高級(jí)遙控版)

    通過(guò)使用ESP8266 NodeMCU Web服務(wù)器來(lái)控制的電子元件

    電子發(fā)燒友網(wǎng)站提供《通過(guò)使用ESP8266 NodeMCU Web服務(wù)器來(lái)控制的電子元件.zip》資料免費(fèi)下載
    發(fā)表于 10-24 11:04 ?1次下載
    通過(guò)使用<b class='flag-5'>ESP8266</b> NodeMCU <b class='flag-5'>Web</b><b class='flag-5'>服務(wù)器</b>來(lái)控制的電子元件

    NodeMCU ESP8266啟用AJAX的Web服務(wù)器

    電子發(fā)燒友網(wǎng)站提供《NodeMCU ESP8266啟用AJAX的Web服務(wù)器.zip》資料免費(fèi)下載
    發(fā)表于 11-22 09:37 ?1次下載
    NodeMCU <b class='flag-5'>ESP8266</b>啟用AJAX的<b class='flag-5'>Web</b><b class='flag-5'>服務(wù)器</b>

    基于ESP8266Web服務(wù)器

    項(xiàng)目將告訴你如何在不使用 Arduino 的情況下使用 ESP8266 構(gòu)建 Web 服務(wù)器
    發(fā)表于 12-07 11:02 ?1次下載

    基于ESP8266實(shí)現(xiàn)串口服務(wù)器

    ESP8266工作在TCP服務(wù)器模式時(shí),可以借助IOTGATEWAY很輕松地將傳統(tǒng)設(shè)備接入物聯(lián)網(wǎng),實(shí)現(xiàn)多設(shè)備實(shí)時(shí)監(jiān)控
    的頭像 發(fā)表于 05-17 15:55 ?3990次閱讀
    基于<b class='flag-5'>ESP8266</b>實(shí)現(xiàn)串口<b class='flag-5'>服務(wù)器</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品