painlessMesh and namedMesh Arduino Examples for ESP Networks
painlessMesh and namedMesh Examples
The following two sketches demonstrate how to build a wireless mesh network with the painlessMesh library on ESP8266 and ESP32 boards.
Example 1: Broadcasting with painlessMesh
#include "painlessMesh.h"
#define MESH_PREFIX "whateverYouLike"
#define MESH_PASSWORD "somethingSneaky"
#define MESH_PORT 5555
Scheduler userScheduler;
painlessMesh mesh;
void sendMessage();
Task taskSendMessage(TASK_SECOND * 1, TASK_FOREVER, &sendMessage);
void sendMessage() {
String msg = "Hello from node ";
msg += mesh.getNodeId();
mesh.sendBroadcast(msg);
taskSendMessage.setInterval(random(TASK_SECOND * 1, TASK_SECOND * 5));
}
void receivedCallback(uint32_t from, String &msg) {
Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
}
void newConnectionCallback(uint32_t nodeId) {
Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
}
void changedConnectionCallback() {
Serial.printf("Changed connections\n");
}
void nodeTimeAdjustedCallback(int32_t offset) {
Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
}
void setup() {
Serial.begin(115200);
mesh.setDebugMsgTypes(ERROR | STARTUP);
mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
mesh.onReceive(&receivedCallback);
mesh.onNewConnection(&newConnectionCallback);
mesh.onChangedConnections(&changedConnectionCallback);
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
userScheduler.addTask(taskSendMessage);
taskSendMessage.enable();
}
void loop() {
mesh.update();
}
Example 2: Named Nodes with namedMesh
#include "namedMesh.h"
#define MESH_SSID "whateverYouLike"
#define MESH_PASSWORD "somethingSneaky"
#define MESH_PORT 5555
Scheduler userScheduler;
namedMesh mesh;
String nodeName = "logNode";
Task taskSendMessage(TASK_SECOND * 30, TASK_FOREVER, []() {
String msg = String("This is a message from: ") + nodeName + String(" for logNode");
String to = "logNode";
mesh.sendSingle(to, msg);
});
void setup() {
Serial.begin(115200);
mesh.setDebugMsgTypes(ERROR | DEBUG | CONNECTION);
mesh.init(MESH_SSID, MESH_PASSWORD, &userScheduler, MESH_PORT);
mesh.setName(nodeName);
mesh.onReceive([](uint32_t from, String &msg) {
Serial.printf("Received message by id from: %u, %s\n", from, msg.c_str());
});
mesh.onReceive([](String &from, String &msg) {
Serial.printf("Received message by name from: %s, %s\n", from.c_str(), msg.c_str());
});
mesh.onChangedConnections([]() {
Serial.printf("Changed connection\n");
});
userScheduler.addTask(taskSendMessage);
taskSendMessage.enable();
}
void loop() {
mesh.update();
}