【问题标题】:Webserver hosted on an ESP32 using p2p使用 p2p 托管在 ESP32 上的 Web 服务器
【发布时间】: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 中的浏览器上的内置选项等等。

ESP32 microcontroller LINK.

问题是,如何在微控制器(例如使用 esp idf 或 arduino 框架的 esp32)和浏览器客户端之间建立 p2p 连接?有可能吗?

【问题讨论】:

    标签: node.js webrtc microcontroller p2p arduino-esp32


    【解决方案1】:

    您是否考虑过 mDNS/DNS-SD?您可以从 esp32 宣传您的服务,并通过任意网络与您的客户端一起发现它

    【讨论】:

    • ESP 已经在使用 mDNS 服务。您可以通过 something.local/ 访问它,但这只是在本地网络内。如果我想在不重新配置路由器的情况下从世界任何地方访问此 ESP,mDNS 服务将无济于事。 :(
    • 对不起,我可能错过了您需要通过互联网访问它。我最近才发现hub.safedev.org也许你会发现它对你的情况很有用,但我还没有机会去挖掘它
    • ju8st 偶然发现了这个,它似乎声称您一直在寻找功能github.com/ambianic/peerfetch
    • 感谢您的评论。我会调查的。看起来很有希望!
    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2011-11-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多