ESP32 MESH学习笔记

前言

为更好地学习ESPMESH,还得学习一下相关的PainlessMesh命令函数 。

一、PainlessMesh引用的库

painlessMesh使用了以下库,这些库可以通过Arduino库管理器进行安装
1)ArduinoJson
 2)TaskScheduler
  3)ESPAsyncTCP (用于ESP8266)
  4)AsyncTCP (用于ESP32)
  这些库中的函数都可以 应用。

二、PainlessMeshy 相关函数

1.原文

英文原版说明:https://gitlab.com/painlessMesh/painlessMesh

2. void painlessMesh::init()

参数: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)```
作用:初始化网状网络,搜索作为Mesh网络一部分。如果没有找到ssid所声名的网络,它将在5秒内启动新的搜索。
参数:ssid= mesh网络名称。
password= mesh网络的wifi密码。
port= mesh TCP端口。如果没有指定,默认为5555
connectMode 连接方式,包括AP、STA和AP_STA(默认)模式之间切换

3. void painlessMesh::stop()

参数:无
作用:断开本节点

4.void painlessMesh::update( void )

参数:无
作用:在Loop()主函数中,不断刷新和运行。没有它节点就不会工作。

5.void painlessMesh::onReceive( &receivedCallback )

格式:void receivedCallback( uint32_t from, String &msg )
作用:节点为收到信息后,发布反馈信息。其中from是信息源节点号(唯一),“msg”是一个连续的信息,可以是JSON 、字符串以及二进制信息。

6.void painlessMesh::onChangedConnections( &changedConnectionsCallback )

格式:void onChangedConnections()
这个很好理解,就是组网发生变发时的回调信息

7.bool painlessMesh::isConnected( nodeId )

这个是询问某个ID的节点在不在MESH网里。

8.void painlessMesh::onNodeTimeAdjusted( &nodeTimeAdjustedCallback )

格式:void onNodeTimeAdjusted(int32_t offset)
作用:同步时触发。回调具有以下结构
offset是计算并应用于本地时钟的调整增量。

9.void onNodeDelayReceived(nodeDelayCallback_t onDelayReceived)

格式: void onNodeDelayReceived(uint32_t nodeId, int32_t delay)
作用:测试某一节点的延时是否大于多少微秒?大于就触发(待验证)。

10.bool painlessMesh::sendBroadcast( String &msg, bool includeSelf = false)

作用:广播信息。includeSelf是指是不是发给自己,如果为真( true)则导致在发送广播消息时后自己调用receivedCallback。

11.bool painlessMesh::sendSingle(uint32_t dest, String &msg)

作用:将msg发送到指定的点节点。
  如果一切正常,返回true;如果没有,返回false。将错误消息打印到串行。打印,如果有失败。

12.String painlessMesh::subConnectionJson()

作用:返回JSON格式的网格拓扑。

13.std::list painlessMesh::getNodeList()

作用:获取所有已知节点的列表。

14.uint32_t painlessMesh::getNodeId( void )

作用:返回正在运行的节点的pid(与list PainlessMesh命令的差异以后进行对比)

15.uint32_t painlessMesh::getNodeTime( void )

作用:返回网格时间基微秒计数器,应该是MESH网运行的时间。这个时间不会是一直记录下去的,而是每71分钟后就重置了(待验证)。

而这个时间是用于MESH网对时的。

16.bool painlessMesh::startDelayMeas(uint32_t nodeId)

作用:向节点发送一个数据包,以测量到该节点的网络旅行延迟。同时也测量该节点还在不在网内。如果nodeId连接到网格,则返回true,否则返回false。在调用此函数之后,用户程序必须等待由指定的回调形式的响应

17.oid painlessMesh::stationManual( String ssid, String password, uint16_t port, uint8_t *remote_ip )

将节点连接到MESH外的外网WIFI_AP。

注意: mesh必须与AP位于同一WiFi通道上(不理解,待学习并验证)