我可以在不创建Web服务器的情况下将数据发送到ESP8266吗?

我正在通过Web服务器访问ESP8266的GPIO引脚。现在,我想为此制作一个Android应用程序。因此,我想在不使用Web服务器的情况下将数据发送到8266,这可能吗?

评论

通过使用Android App,您是否会在同一网络上?

#1 楼

是的,您可以在不使用网络服务器的情况下将数据发送到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}


来设置GPIO,如果回答此类查询的程序是“ Web服务器”,则在某种程度上是语义或实现方面的特定问题。可以是运行各种帮助程序任务以处理数据和gpios的网络服务器(就像服务页面的服务器可能从数据库查询中动态生成其某些内容一样),也可以是专用于处理数据并了解信息的程序如何使用HTTP。

当然,使用HTTP交换JSON负载只是多种处理方式之一-它恰好是当前流行的一种,它重用了许多类似于Web服务器的概念,甚至在一定程度上甚至允许使用网络浏览器进行测试。


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

评论


另外,我很好奇对端口实现DELETE ;-)

– Arjan
17年7月19日在21:37

在许多Linux系统上,必须先“导出” GPIO,然后才能将其用于/ sys / class / gpio接口。我不知道是否可以“取消导出”,但从概念上讲,可以匹配DELETE :-)

–克里斯·斯特拉顿(Chris Stratton)
17年7月19日在23:04



#2 楼

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

两种方法都可以在TCP / UDP之上定义自己的应用程序协议,然后让应用程序发送它。而且您节省了HTTP的开销。 (HTTP每条消息可能会有大约1000字节的开销!)