painlessMesh是一个库,它负责使用esp8266和esp32硬件创建一个简单的网格网络。目的是让程序员可以使用一个网格网络,而不必担心网络的结构或管理方式。
真正的自组网
painlessMesh是一个真正的临时网络,这意味着不需要计划、中央控制器或者路由器。任何一个或多个节点的系统都会自动组织成功能完备的网格。网格的最大大小(我们认为)受到堆中可以分配给子连接缓冲区的内存数量的限制,因此应该非常高。
基于JSON
painlessMesh使用JSON对象进行所有的消息传递。这有几个原因。首先,它使代码和消息具有可读性,易于理解;其次,它使与javascript前端、web应用程序和其他应用程序集成无痛网格变得无痛。有些性能丢失了,但是我还没有遇到性能问题。如果有人想要贡献的话,转换成二进制消息传递是相当直接的。
无线和网路
painlessMesh被设计为与Arduino一起使用,但是它不使用Arduino WiFi库,因为我们遇到了性能问题(主要是延迟)。而是使用本地的esp32和esp8266 SDK库进行联网,这些库可以通过Arduino IDE获得。不过,希望对大多数用户来说,使用哪些网络库并不重要,因为您只需包含painlessMesh.h,运行init(),然后通过API工作库。
painlessMesh不是IP网络
painlessMesh不创建节点的TCP/IP网络。相反,每个节点都是由它的32位chipId惟一标识的,它是在SDK中使用system_get_chip_id()调用从esp8266/esp32检索的。每个节点都有一个唯一的数字。可以将消息广播到网格上的所有节点,也可以特定地发送到由其“nodeId”标识的单个节点。
局限和警告
- 尽量避免在代码中使用delay()。为了维护网格,我们需要在后台执行一些任务。使用delay()将阻止这些任务的发生,并可能导致网格失去稳定性/崩溃。相反,我们建议使用painlessMesh中包含的调度器。该调度器是微修改的TaskScheduler库版本。文档可以在这里找到。有关如何使用调度器的其他示例,请参见示例文件夹。
- painlessMesh订阅WiFi事件(ESP8266和ESP32)。请注意,因此painlessMesh可能与试图绑定到相同事件的用户程序/其他库不兼容。
- 尽量在每分钟发送的消息(尤其是广播消息)的数量上保持保守。这是为了防止硬件过载。esp8266和esp32在处理能力/内存方面都是有限的,因此很容易超载和破坏网格。尽管无痛网格试图阻止这种情况的发生,但并非总是能做到。
- 由于高流量,消息可能丢失或丢失,您不能依赖于所有要传递的消息。其中一个建议是,每隔一段时间重新发送一次消息。即使有一些人失踪了,大多数人也应该经历。另一种方法是让节点在收到消息时发送回复。如果发送节点在一定时间内没有得到回复,则可以重新发送消息。
安装