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通道上(不理解,待学习并验证)