0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用ESP8266制作可配置的Web服务器

科技观察员 来源:allaboutcircuits 作者:穆罕默德·阿明·卡 2022-05-10 15:18 次阅读

在这个项目中,我们首先研究如何在 Arduino IDE 中安装 ESP8266 插件,然后使用 ESP8266 制作可配置的 Web 服务器。

ESP8266 之所以受欢迎,很大程度上是因为它具有出色的性价比。它还可以通过 Wi-Fi 将互联网连接到微处理器

它的主要缺点是功耗。ESP8266 不是一款非常节能的芯片,因为它的设计符合大多数家庭和企业都可以使用的 IEEE 802.1 协议(我们称之为 Wi-Fi)。该协议议程保证了创建无线本地网络的良好速度和稳健性。更高的速度会导致更高的功耗,这使得 ESP8266 对于低功耗设计效率低下。

但是,ESP8266 在功耗不重要的情况下非常有用,例如不断供电且不需要电池的设备。ESP8266 可以连接到任何 Wi-Fi 网络,并通过 TCP 和 UDP 等各种协议发送或接收数据。此外,它还可以构建 Wi-Fi 热点并管理其他设备。

电路设计注意事项

ESP8266 可能需要 250mA 的电流来传输数据。因此,如果我们想要有足够的余量,我们可能需要至少 500mA 的电流来为 ESP8266 供电。使用从计算机获取电源USB 电缆为 ESP8266 供电可能会导致不稳定。

在这个项目中,我们使用保证 1A 电流的 5V 电源和 LM1086-3.3V 作为稳压器为 ESP8266 供电。在图 1 中,显示了在引导加载程序和使用模式下使用 ESP8266 的引脚配置。

ada.jpg

图 1.在引导加载程序和使用模式下使用 ESP8266。

Arduino 附加组件

安装 ESP8266 插件在互联网上的许多文章中都有描述,但为了清楚起见,我们将在这里简要介绍安装。要安装 ESP8266 插件,我们需要更新 Arduino IDE 中的板管理器。可以从 File-》Preferences-》Additional Boards Manager URLs 添加一个额外的 Board Manager URL。在 URL 部分,应输入以下 URL,如图 2 所示。

ESP-add.jpg

图 2.其他董事会经理 URL

通过更新 URL,可以通过导航到 Tools-》Boards-》Boards Manager 来访问 ESP8266 插件。ESP8266 板可用,应安装。安装后,在板部分,ESP8266 模块将可用。可以选择不同类型的模块,并且出于本项目的目的(因为我们构建了我们正在使用的电路板),我们将使用通用 ESP8266 模块。

将草图上传到 ESP8266

要对 ESP8266 进行编程,我们使用 ESP8266 已经包含的 UART 引导加载程序。在这个项目中,我制作了一个简单的 ESP8266 开发板,原理图如图 3 和以下部件列表:

1. ESP8266-12(E或F不分大小,唯一区别是内存)

2. 3.3K电阻 x 2

3. 470R 功率演示LED电阻

4. 一个LED决定板子是供电还是供电不是

5. AMS1117-3.3: 电压调节器

6. 10uF-25v 电解电容

7. 22uF-25v 电解电容

8. 100nF 电容

9. 一个用于串行通信的 3 针连接器

10. 一个用于进入引导加载程序的 2 针连接器

为了进入启动模式,GPIO0 应接地以启动 ESP8266。然后通过在 Arduino IDE 中设置适当的 COM 端口,可以通过点击上传按钮上传草图。编程完成后,GPIO0 应该悬空,因为 ESP8266 应该以正常模式启动并运行程序。

main_schematic1.jpg

图 3. ESP8266-12E 开发板原理图

连接到接入点

ESP8266 具有内置 EEPROM,可用于存储数据等应用,以构建安全登录页面。使用 EEPROM 很像其他 Arduino 板,但有一些细微差别。

一方面,您需要在开始读取或写入之前调用 EEPROM.begin(size)。大小是您要使用的字节数,介于 4 到 4096 字节之间。请注意,EEPROM.write() 不会立即写入闪存。每当您希望将更改保存到闪存时,都必须调用 EEPROM.commit()。

在这个项目中,我们想要制作一个可配置的 Web 服务器,它可以放置在每个网络中(即,在没有 SSID 和接入点连接密码的新网络中)以与之前的设置进行连接。当连接失败时,ESP8266 将进入接入点模式并等待接收配置设置(SSID 和密码)。

一开始,我们获取 512 字节的 EEPROM 并检查用户名或密码是否可用。我们还可以为我们的设备选择一个特定的 IP 地址并手动设置,需要存储在 EEPROM 中。当我们需要创建设备数据库以了解其位置和定义时,手动设置设备 IP 很有用。

在下面的完整代码片段中,我们从 EEPROM 中保留 512 个字节,然后在收集信息后,我们尝试连接到接入点。在完整的代码中,如果 EEPROM 为空,代码将绕过连接阶段。

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);

上面的代码尝试使用存储在 EEPROM 中的特定 IP 地址连接到网络。使用特定 IP 地址时要记住的一件事是,我们需要知道网关 IP 地址以及网络子网掩码。另一方面,上述项目对于需要 DHCP 服务器的自动 IP 寻址不是必需的。

可以使用 WiFi.status() 函数检查 Wi-Fi 状态。根据 Arduino 网站,此函数返回以下内容:

WL_CONNECTED:连接到 Wi-Fi 网络时分配

WL_NO_SHIELD:在没有 Wi-Fi 屏蔽时分配

WL_IDLE_STATUS:在调用 WiFi.begin() 时分配的临时状态,并保持活动状态,直到尝试次数到期(导致 WL_CONNECT_FAILED)或建立连接(导致 WL_CONNECTED)

WL_NO_SSID_AVAIL:当没有可用的 SSID 时分配

WL_SCAN_COMPLETED:扫描网络完成时分配

WL_CONNECT_FAILED:在所有尝试连接失败时分配

WL_CONNECTION_LOST:连接丢失时分配

WL_DISCONNECTED:从网络断开时分配

通过使用 WiFi.status() 函数,我们可以检查连接状态,如果不存在,ESP8266 应该转向接入点。

可以使用 WiFi.mode(WIFI_AP) 进行接入点配置,这需要用户名和密码。可以使用 WiFi.softAP 函数设置用户名和密码。描述每一个 Wi-Fi 功能会使这篇文章变得非常长,并且超出了本项目的范围。但是,热心的人可以在GitHub和Arduino 网站上找到有关 ESP6288 的 Wi-Fi 功能和其他库的非常全面的文档。

在这个项目中,我们希望将我们的设备连接到现有网络。首先,当我们的设备没有连接网络的SSID和密码时,它会进入接入点模式,然后我们可以对其进行配置。配置完成后,设备可以连接到所需的网络。另一方面,有人可能只想在接入点模式下使用 ESP8266。在这种情况下,我们需要在要传输数据时连接到设备。

因此,在接入点模式下,ESP8266 将等待一组新的配置。可以使用返回整数的 WiFi.scanNetworks 扫描该区域中可用的无线接入点,以确定现有的接入点。收集可用网络的数量后,以下功能可以为您提供所需的所有信息:

WiFi.SSID:获取当前网络的SSID

WiFi.RSSI:获取与路由器连接的信号强度

WiFi.encryptionType:获取当前网络的加密类型

图 4 显示了 WiFi.scanNetworks 的输出。数据通过 RS232 通信和名为TeraTerm的程序捕获 。

teraterm.jpg

图 4.扫描网络

移动DNS

使用预建库很容易在 ESP8266 上创建 Web 服务器。此外,可以使用 ESP8266mDNS 库创建一个简单的多播域名系统 (mDNS),将名称链接到网络中的服务器 IP。mDNS 将主机名解析为缺少本地名称服务器的小型网络中的 IP 地址。它使用与单播 DNS 相同的编程接口、数据包格式和操作语义。

接下来,“mdns.begin(‘esp8266’)”会导致一个 mDNS 服务器被定义为 ESP8266 的名称。如果一切正常,mdns.begin 函数返回 true,我们可以通过 server.begin() 启动服务器。

读取 GET 请求

我们可以通过 mdns.update() 更新 mDNS 查询,然后作为客户端读取请求。下面的代码首先更新 mDNS 查询,然后,如果数据包可用,则读取它。

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 检查是否有任何客户端可用。如果客户端可用,它将读取其数据,直到它收到‘\r’,这意味着数据包的结束。从那时起,我们的 Web 服务器可以接收 GET 请求,但无法解释它们或发送答案。

可以使用 client.print() 函数发送客户端的答案。对于客户端,为了将其视为网页内容(即在 Firefox 等浏览器中查看答案),答案应为 HTML 格式。通过这种方式,我们可以使用我们的 ESP8266 创建一个图形化的 HTML Web 服务器。

在上面的代码中,我们读取客户端 GET 请求并将其存储在“req”变量中。‘req’ 变量现在有 GET 数据,我们可以简单地解释它。根据客户端的 GET 请求,我们应该创建一个字符串,并使用 client.print() 函数生成客户端答案。下面的代码片段生成一个简单的 HTML 页面,用于回复客户。

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”命令已发送到客户端。

结论

在这个项目中,我们检查了用于创建简单 Web 服务器的 ESP8266 库。然后,创建了一个可配置的 Web 服务器,该服务器采用 SSID 和所需无线网络的密码。最后,在连接到本地网络后,GET 请求在设备和客户端之间传输。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web服务器
    +关注

    关注

    0

    文章

    137

    浏览量

    24227
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184826
  • ESP8266
    +关注

    关注

    50

    文章

    947

    浏览量

    43927
收藏 人收藏

    评论

    相关推荐

    esp8266作为服务器

    `我用一块es8266模块做服务器;另一块esp8266作为终端,当使用这条指令AT+CIPSEND=<id>,<length>应该写入终端
    发表于 01-09 21:10

    ATK-ESP8266设置为服务器后wifi连接失败

    将一块ATK-ESP8266通过程序配置为STA模式与单片机相连,而其连接的服务器是另一块ATK-ESP8266,测试了好几次。不明白为什么将作为
    发表于 05-07 05:35

    使用EsP8266(NodeMCU)连接阿里云服务器

    Esp8266【NodeMCU】连接阿里云服务器创建阿里云产品添加设备Esp8266代码MQTT_PASSWD密码生成工具修改PubSubClient.h文件(不修改无法连接Mqtt服务器
    发表于 11-24 06:23

    ESP8266 WEB智能小后台 ,采电压,绘曲线,向服务器传信息

    ESP8266 WEB小后台 ,采电压,绘曲线,向服务器传信息一个月前,自己想设计一个不用安装应用程序的智能手机控制的硬件。是否有人有兴趣?有兴趣的可以联系我,朝“自带智能使用程序的智能硬件,或是有
    发表于 11-25 22:15

    如何将BMP180中的数据添加ESP8266中的Web服务器页面?

    我需要将 BMP180 中的数据添加到我的 ESP8266 中的 Web 服务器页面。 我该怎么做?
    发表于 05-10 12:02

    ESP8266使Web服务器完全无响应是怎么回事?

    我正在使用 ESP8266WebServer 库和为 NodeMCU ESP8266 编译的草图。我知道库创建的服务器需要以下代码才能激活: void loop(void
    发表于 05-12 08:20

    使用ESP8266作为Web服务器,如何将网页上传到SPIFFS?

    我希望这是一个宣布这个的好地方...... 我一直在使用 ESP8266 作为 Web 服务器,因此必须一直将我的网页上传到 SPIFFS。 我曾经使用 Arduino IDE 和 SPIFFS
    发表于 05-23 08:49

    无法使用esp8266webserver.h库在给esp8266的静态IP中创建服务器怎么解决?

    我无法使用 esp8266webserver.h 库在给我的 esp8266 的静态 IP 中创建服务器esp8266 采用给定的静态 IP,但它没有为静态 IP 创建
    发表于 06-05 13:07

    ESP8266可作为Web服务器吗?怎么实现?

    ESP8266可作为Web服务器吗怎么实现
    发表于 10-24 08:17

    如何建立一个带Arduino IDE的ESP8266 Web服务器

    本文档的主要内容详细介绍的是如何建立一个带Arduino IDE的ESP8266 Web服务器
    发表于 06-02 08:00 2次下载
    如何建立一个带Arduino IDE的<b class='flag-5'>ESP8266</b> <b class='flag-5'>Web</b><b class='flag-5'>服务器</b>

    Esp8266(NodeMCU)连接阿里云服务器

    Esp8266【NodeMCU】连接阿里云服务器创建阿里云产品添加设备Esp8266代码MQTT_PASSWD密码生成工具修改PubSubClient.h文件(不修改无法连接Mqtt服务器
    发表于 11-16 10:21 16次下载
    <b class='flag-5'>Esp8266</b>(NodeMCU)连接阿里云<b class='flag-5'>服务器</b>

    调用Lua新建的WEB服务器 操作Nodemcu esp8266 控制继电器实现物联网

    调用Lua新建的WEB服务器 操作Nodemcu esp8266 控制继电器实现物联网
    发表于 12-08 16:51 13次下载
    调用Lua新建的<b class='flag-5'>WEB</b><b class='flag-5'>服务器</b>  操作Nodemcu <b class='flag-5'>esp8266</b> 控制继电器实现物联网

    通过使用ESP8266 NodeMCU Web服务器来控制的电子元件

    电子发烧友网站提供《通过使用ESP8266 NodeMCU Web服务器来控制的电子元件.zip》资料免费下载
    发表于 10-24 11:04 1次下载
    通过使用<b class='flag-5'>ESP8266</b> NodeMCU <b class='flag-5'>Web</b><b class='flag-5'>服务器</b>来控制的电子元件

    NodeMCU ESP8266启用AJAX的Web服务器

    电子发烧友网站提供《NodeMCU ESP8266启用AJAX的Web服务器.zip》资料免费下载
    发表于 11-22 09:37 1次下载
    NodeMCU <b class='flag-5'>ESP8266</b>启用AJAX的<b class='flag-5'>Web</b><b class='flag-5'>服务器</b>

    基于ESP8266Web服务器

    项目将告诉你如何在不使用 Arduino 的情况下使用 ESP8266 构建 Web 服务器
    发表于 12-07 11:02 1次下载