ESP8266 无网页

物联网 无线上网 ESP8266
2021-06-03 01:32:33

我可以在不创建网络服务器的情况下向 ESP8266 发送数据吗?

我正在通过网络服务器访问 ESP8266 的 GPIO 引脚。现在我想为此制作一个 Android 应用程序。所以我想把数据发送到 8266 而不用做网络服务器——这可能吗?

2个回答

是的,您可以在不使用网络服务器的情况下将数据发送到 ESP8266,但您可能想要使用一个,或者使用与一个功能相关的东西。

ESP8266 是一种相当通用的计算设备,具有 WiFi 无线电和网络堆栈,因此,您可以实现几乎任何您想在代码中描述的合理协议。

然而,实现看起来和行为很像供人类消费的微型网页的协议已经变得非常流行。

即,而不是您的客户端连接并执行类似的操作

GET /index.html HTTP/1.1

它可能会说

GET /gpio/15/value HTTP/1.1

URL 不是指特定文档,而是指您希望访问的设备上的某些数据。你可以做类似的事情POSTPATCHDELETE等请求。

除非您正在构建供人类使用的页面,否则您交换的数据通常不会是 HTML 页面。通常它可能是类似于 JSON 的东西。所以例如

GET /gpio/15/value HTTP/1.1

可能会触发类似的响应

{"gpio": 15, "direction": "in", "value": 0}

同样,您可以创建一个端点,您的客户端可以通过说

POST /gpio/15 HTTP/1.1
{"direction": "out", "value": 1}

如果回答此类查询的程序是一个“网络服务器”,那么在某种程度上,这是一个语义或实现特定的问题——它可能是一个运行各种辅助任务来处理数据和 gpios 的网络服务器(就像服务器服务页面可能动态从数据库查询生成他们的一些内容),或者它可以是一个专门的程序,既处理数据又知道如何使用 HTTP。

当然,使用 HTTP 来交换 JSON 有效负载只是许多方法中的一种 - 它恰好是当前流行的一种,它重新使用了许多类似网络服务器的概念,并且在某种程度上甚至可能允许使用网络浏览器供测试用。


还值得记住的是,当手机和 ESP8266 是同一家庭 WiFi 网络的客户端时,这种方案往往在本地效果最佳。如果手机不在“家中”或不在“家中”,但仅在移动网络上,则允许它访问 ESP8266 意味着允许外部请求进入家庭网络,最好避免这种情况。在这种情况下,使用一种协议非常流行,其中 ESP8266 设备和电话都独立地连接到外部中继服务器,在它们之间传递消息。MQTT 是通常用于具有基于中继服务器的体系结构的系统的方案示例。

是的,您可以编写自定义TCP 服务器或者,为了减轻重量,请使用UDP 服务器

无论哪种方式,在 TCP/UDP 之上定义您自己的应用程序协议,并让您的应用程序发送它。并且您可以节省 HTTP 的开销。(HTTP 每条消息可能有大约 1000 字节的开销!)