标签:oid 增量 成员函数 ssm 信息 tde 通过 好的 延迟
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”标识的单个节点。
局限和警告
安装
Arduino库管理器和platformio库注册表中都包含了painlessMesh,可以通过这两种方法轻松安装。
依赖关系
示例
这里有一个基本的示例用法。当节点连接到网格上时,它会闪烁几次内置的LED(在sp -12中)。进一步的示例在示例目录下,并在https://platformio.org/lib/show/1269/painlessMesh页面上显示。
贡献
我们尝试遵循git流开发模型。这意味着我们有一个开发分支和主分支。所有开发都是在特性分支下完成的,这些分支在完成后并入了开发分支。当新版本发布时,我们将开发分支合并到主分支。有关详细信息,请参阅贡献文件https://gitlab.com/painlessMesh/painlessMesh/blob/master/CONTRIBUTING.md。
寻求帮助
在维基上有帮助,你也可以在我们的gitter频道上找到我们。https://gitter.im/painlessMesh/Lobby
PainlessMesh API
使用painlessMesh是无痛的
首先包括库并创建一个类似这样的无痛网格对象..
#include <painlessMesh.h>
painlessMesh mesh;
主要成员函数包括在下面。完整的doxygen生成的文档可以在这里找到https://painlessmesh.gitlab.io/painlessMesh/classpainlessMesh.html
成员函数
void painlessMesh::init(String ssid, String password, uint16_t port = 5555, WiFiMode_t connectMode = WIFI_AP_STA, _auth_mode authmode = AUTH_WPA2_PSK, uint8_t channel = 1, phy_mode_t phymode = PHY_MODE_11G, uint8_t maxtpw = 82, uint8_t hidden = 0, uint8_t maxconn = 4)
将其添加到setup()函数中。初始化网状网络。这个例程做以下事情。
开始一个无线网络
开始搜索作为网络一部分的其他wifi网络
登录到它找到的最好的网格网络节点,如果没有找到任何东西,它将在5秒内启动新的搜索。
ssid= 你的mesh网络名称。 所有节点共享相同的AP ssid。 他们有别于BSSID。password= 你的mesh网络的wifi密码。port= 希望mesh服务器运行的TCP端口。如果没有指定,默认为5555。 connectMode = 在WIFI_AP、WIFI_STA和WIFI_AP_STA(默认)模式之间切换
void painlessMesh::stop()
停止节点。这将导致节点与所有其他节点断开连接,并停止/发送消息。
void painlessMesh::update( void )
将它添加到loop()函数中这个例程运行各种维护任务……虽然不是很有趣,但没有它,事情就不会有结果。
void painlessMesh::onReceive( &receivedCallback )
为该节点上的任何消息设置回调例程。回调例程具有以下结构。
void receivedCallback( uint32_t from, String &msg )
每当这个节点接收到一条消息时,这个回调例程就会被调用。from是消息的原始发送者的id, msg是包含消息的字符串。信息可以是任何东西。JSON、其他一些文本字符串或二进制数据。
void painlessMesh::onNewConnection( &newConnectionCallback )
这将在每次本地节点创建新连接时触发。回调具有以下结构。
void newConnectionCallback( uint32_t nodeId )
nodeId是网格中新的已连接节点ID。
void painlessMesh::onChangedConnections( &changedConnectionsCallback )
每当网格拓扑发生变化时,就会发生这种情况。回调具有以下结构。
void onChangedConnections()
这里没有传递参数。这只是一个信号。
bool painlessMesh::isConnected( nodeId )
返回当前连接到网格的给定节点。
nodeId是请求引用的节点ID。
void painlessMesh::onNodeTimeAdjusted( &nodeTimeAdjustedCallback )
这将在每次调整本地时间以使其与网格时间同步时触发。回调具有以下结构。
void onNodeTimeAdjusted(int32_t offset)
offset是计算并应用于本地时钟的调整增量。
void onNodeDelayReceived(nodeDelayCallback_t onDelayReceived)
当收到一个请求后,收到一个延迟量减响应时,就会触发。回调具有以下结构。
void onNodeDelayReceived(uint32_t nodeId, int32_t delay)
nodeId发起响应的节点。
delay 单向网络旅行延迟在微秒。
void onNodeDelayReceived(uint32_t nodeId, int32_t delay)
bool painlessMesh::sendBroadcast( String &msg, bool includeSelf = false)
将msg发送到整个网格网络的每个节点。默认情况下,当前节点被排除在接收消息之外(includeSelf = false)。includeSelf = true重写此行为,导致在发送广播消息时调用receivedCallback。
如果一切正常,返回true;如果没有,返回false。将错误消息打印到串行。打印,如果有失败。
bool painlessMesh::sendSingle(uint32_t dest, String &msg)
将msg发送到具有Id == dest的节点。
如果一切正常,返回true;如果没有,返回false。将错误消息打印到串行。打印,如果有失败。
String painlessMesh::subConnectionJson()
返回JSON格式的网格拓扑。
std::list painlessMesh::getNodeList()
获取所有已知节点的列表。这包括直接和间接连接到当前节点的节点。
uint32_t painlessMesh::getNodeId( void )
返回正在运行的节点的pid。
uint32_t painlessMesh::getNodeTime( void )
返回网格时间基微秒计数器。从第一个节点启动开始滚动71分钟。
节点尝试使用基于SNTP的协议来保持一个公共的时间基同步
bool painlessMesh::startDelayMeas(uint32_t nodeId)
向节点发送一个数据包,以测量到该节点的网络旅行延迟。如果nodeId连接到网格,则返回true,否则返回false。在调用此函数之后,用户程序必须等待由指定的回调形式的响应
void painlessMesh:onNodeDelayReceived(nodeDelayCallback_t onDelayReceived)
nodeDelayCallback_t是void(uint32_t nodeId,int32_t delay)形式的函数。
void painlessMesh::stationManual( String ssid, String password, uint16_t port, uint8_t *remote_ip )
将节点连接到网格外的AP。当指定remote_ip和端口时,节点在建立WiFi连接后打开TCP连接。
注意: mesh必须与AP位于同一WiFi通道上。
标签:oid 增量 成员函数 ssm 信息 tde 通过 好的 延迟
原文地址:https://www.cnblogs.com/taoxu991/p/9262017.html