painlessMesh and namedMesh Arduino Examples for ESP Networks

Computer science3.14 KB

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();
}

Download

PDF Word HTML