【发布时间】:2022-01-09 18:52:27
【问题描述】:
我在考虑如何从可从其网络外部访问的 esp32 托管网络服务器。 我做的第一件事是在我的路由器上转发我的 esp32 私有 ip,并将一个 dns 服务器配置到我的路由器的公共 ip(no-ip,ddns.net)
那很好。我可以访问托管在我的 esp32 上的网络服务器,但如果我想创建一个产品,这不是一个好的解决方案,因为我不能强迫用户配置他们的路由器并为他们自己配置一个 dns 提供程序。
所以我的下一个想法是,我需要一台服务器。我本可以使用 mqtt 或任何其他服务与客户端交换数据,但我想自己做。
所以我在我的 PC 上设置了一个节点 js 服务器。 esp32 可以连接到这个服务器,因为它在公共网络上并且已经转发了端口。 esp32 可以使用 websockets 作为客户端或使用 http 请求向服务器发送数据。这没关系,但是客户端看到的 web 应用程序不是托管在 esp32 上,而是在服务器上。这使得在服务器和 esp32 上更新 Web 应用程序文件(html 和 js 文件)变得很困难。因为如果客户想从没有互联网的本地网络中访问 Web 应用程序怎么办。 esp32 应该与服务器上托管完全相同的 Web 应用程序。
我使用 socket io 将 esp32 的数据与 Web 应用程序客户端进行通信。 node js 服务器将静态 html 和 js 文件提供给客户端,并将来自 websocket 的 esp 消息通过 socket io 转发给客户端。
好的,这里的问题正如我所说的,我必须更新节点服务器和 esp32 上的文件。这不是一个好方法。
所以我需要某种 p2p 连接。在这一点上,我读到了关于打孔和 webrtc 之类的东西。
我尝试建立 p2p 连接的方法:
-
Esp32 每 100 毫秒连接一次节点 js 服务器,发送它的路由器 公共 IP,它是自己的私有 IP 等等。
-
服务器存储esp数据。
-
客户端连接服务器,获取 esp 的路由器公共 ip,试图 连接到它。
-
服务器将消息发送回 esp32 作为与客户端的响应 ip地址。
-
Esp 获取消息,尝试将数据发送到客户端的 IP 地址。
-
客户尝试相同...
aa并且什么也没有发生。路由器不想打开它们的端口。
我尝试使用原始 udp、http 请求和 websockets。这些是不安全的连接。
我发现没有关于 web rtc 数据通道的低级解释。如果我想使用 C 语言编写这个“开源”协议,那么这里只是关于这个 webrtc 的解释,它使用高级语言,比如在 JS 中的浏览器上的内置选项等等。
问题是,如何在微控制器(例如使用 esp idf 或 arduino 框架的 esp32)和浏览器客户端之间建立 p2p 连接?有可能吗?
【问题讨论】:
标签: node.js webrtc microcontroller p2p arduino-esp32