@alteriom/painlessmesh 1.6.1 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +380 -143
- package/LICENSE +674 -674
- package/README.md +477 -434
- package/RELEASE_GUIDE.md +504 -418
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
- package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
- package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
- package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
- package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
- package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
- package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
- package/docs/PHASE1_GUIDE.md +349 -0
- package/docs/PHASE2_GUIDE.md +543 -0
- package/docs/README.md +77 -70
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
- package/docs/alteriom/overview.md +507 -507
- package/docs/api/core-api.md +606 -606
- package/docs/architecture/mesh-architecture.md +378 -378
- package/docs/architecture/plugin-system.md +516 -516
- package/docs/getting-started/first-mesh.md +409 -409
- package/docs/getting-started/installation.md +274 -274
- package/docs/getting-started/quickstart.md +157 -157
- package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
- package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
- package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
- package/docs/improvements/README.md +86 -68
- package/docs/improvements/ota-and-status-enhancements.md +911 -0
- package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
- package/docs/improvements/ota-status-quick-reference.md +284 -0
- package/docs/platformio-publishing.md +255 -0
- package/docs/platformio-setup-summary.md +121 -0
- package/docs/troubleshooting/common-issues.md +520 -520
- package/docs/troubleshooting/faq.md +472 -472
- package/docs/tutorials/basic-examples.md +717 -717
- package/docs/wiki/API-Reference.md +245 -245
- package/docs/wiki/Complete-Documentation.md +122 -122
- package/examples/alteriom/README.md +139 -81
- package/examples/alteriom/alteriom.ino +186 -185
- package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
- package/examples/alteriom/platformio.ini +24 -24
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
- package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
- package/examples/alteriomImproved/platformio.ini +25 -0
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase1/phase1_features.ino +242 -0
- package/examples/alteriomPhase1/platformio.ini +25 -0
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase2/phase2_features.ino +186 -0
- package/examples/alteriomPhase2/platformio.ini +25 -0
- package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomSensorNode/platformio.ini +25 -0
- package/examples/basic/basic.ino +66 -66
- package/examples/basic/platformio.ini +25 -25
- package/examples/bridge/bridge.ino +51 -51
- package/examples/bridge/mesh_event_publisher.hpp +253 -0
- package/examples/bridge/mesh_topology_reporter.hpp +303 -0
- package/examples/bridge/mqtt_command_bridge.hpp +459 -0
- package/examples/bridge/mqtt_status_bridge.hpp +519 -0
- package/examples/bridge/platformio.ini +25 -25
- package/examples/echoNode/echoNode.ino +33 -33
- package/examples/echoNode/platformio.ini +25 -25
- package/examples/logClient/logClient.ino +109 -109
- package/examples/logClient/platformio.ini +25 -25
- package/examples/logServer/logServer.ino +81 -81
- package/examples/logServer/platformio.ini +25 -25
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
- package/examples/meshCommandNode/meshCommandNode.ino +263 -0
- package/examples/meshCommandNode/platformio.ini +25 -0
- package/examples/mqttBridge/mqttBridge.ino +118 -118
- package/examples/mqttBridge/platformio.ini +26 -26
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
- package/examples/mqttCommandBridge/platformio.ini +26 -0
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
- package/examples/mqttStatusBridge/platformio.ini +26 -0
- package/examples/mqttTopologyTest/README.md +467 -0
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
- package/examples/mqttTopologyTest/platformio.ini +26 -0
- package/examples/namedMesh/namedMesh.ino +97 -97
- package/examples/namedMesh/platformio.ini +25 -25
- package/examples/otaReceiver/otaReceiver.ino +79 -79
- package/examples/otaReceiver/platformio.ini +25 -25
- package/examples/otaSender/otaSender.ino +160 -151
- package/examples/otaSender/platformio.ini +25 -25
- package/examples/startHere/platformio.ini +25 -25
- package/examples/startHere/startHere.ino +159 -159
- package/examples/webServer/platformio.ini +27 -27
- package/examples/webServer/webServer.ino +89 -89
- package/keywords.txt +48 -48
- package/library.json +55 -34
- package/library.properties +10 -10
- package/package.json +86 -78
- package/src/AlteriomPainlessMesh.h +97 -97
- package/src/arduino/wifi.hpp +365 -365
- package/src/boost/asynctcp.hpp +279 -279
- package/src/painlessMesh.h +70 -70
- package/src/painlessMeshSTA.cpp +236 -236
- package/src/painlessMeshSTA.h +58 -58
- package/src/painlessTaskOptions.h +4 -4
- package/src/painlessmesh/base64.hpp +111 -111
- package/src/painlessmesh/buffer.hpp +229 -229
- package/src/painlessmesh/callback.hpp +91 -91
- package/src/painlessmesh/configuration.hpp +77 -77
- package/src/painlessmesh/connection.hpp +192 -192
- package/src/painlessmesh/layout.hpp +188 -188
- package/src/painlessmesh/logger.hpp +158 -158
- package/src/painlessmesh/memory.hpp +119 -119
- package/src/painlessmesh/mesh.hpp +761 -560
- package/src/painlessmesh/metrics.hpp +322 -322
- package/src/painlessmesh/ntp.hpp +263 -263
- package/src/painlessmesh/ota.hpp +582 -553
- package/src/painlessmesh/plugin.hpp +188 -188
- package/src/painlessmesh/protocol.hpp +813 -813
- package/src/painlessmesh/router.hpp +322 -322
- package/src/painlessmesh/tcp.hpp +71 -71
- package/src/painlessmesh/validation.hpp +238 -238
- package/src/plugin/performance.hpp +214 -214
- package/src/plugin/remote.hpp +64 -64
- package/src/scheduler.cpp +10 -10
- package/src/wifi.cpp +2 -2
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
//************************************************************
|
|
2
|
-
// this is a simple example that uses the painlessMesh library to
|
|
3
|
-
// setup a node that logs to a central logging node
|
|
4
|
-
// The logServer example shows how to configure the central logging nodes
|
|
5
|
-
//************************************************************
|
|
6
|
-
#include "painlessMesh.h"
|
|
7
|
-
|
|
8
|
-
#define MESH_PREFIX "whateverYouLike"
|
|
9
|
-
#define MESH_PASSWORD "somethingSneaky"
|
|
10
|
-
#define MESH_PORT 5555
|
|
11
|
-
|
|
12
|
-
Scheduler userScheduler; // to control your personal task
|
|
13
|
-
painlessMesh mesh;
|
|
14
|
-
|
|
15
|
-
// Prototype
|
|
16
|
-
void receivedCallback( uint32_t from, String &msg );
|
|
17
|
-
|
|
18
|
-
size_t logServerId = 0;
|
|
19
|
-
|
|
20
|
-
// Send message to the logServer every 10 seconds
|
|
21
|
-
Task myLoggingTask(10000, TASK_FOREVER, []() {
|
|
22
|
-
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
23
|
-
JsonDocument jsonBuffer;
|
|
24
|
-
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
25
|
-
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
26
|
-
DynamicJsonDocument jsonBuffer(1024);
|
|
27
|
-
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
28
|
-
#else
|
|
29
|
-
DynamicJsonBuffer jsonBuffer;
|
|
30
|
-
JsonObject& msg = jsonBuffer.createObject();
|
|
31
|
-
#endif
|
|
32
|
-
msg["topic"] = "sensor";
|
|
33
|
-
msg["value"] = random(0, 180);
|
|
34
|
-
|
|
35
|
-
String str;
|
|
36
|
-
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
37
|
-
serializeJson(msg, str);
|
|
38
|
-
#else
|
|
39
|
-
msg.printTo(str);
|
|
40
|
-
#endif
|
|
41
|
-
if (logServerId == 0) // If we don't know the logServer yet
|
|
42
|
-
mesh.sendBroadcast(str);
|
|
43
|
-
else
|
|
44
|
-
mesh.sendSingle(logServerId, str);
|
|
45
|
-
|
|
46
|
-
// log to serial
|
|
47
|
-
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
48
|
-
serializeJson(msg, Serial);
|
|
49
|
-
#else
|
|
50
|
-
msg.printTo(Serial);
|
|
51
|
-
#endif
|
|
52
|
-
Serial.printf("\n");
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
void setup() {
|
|
56
|
-
Serial.begin(115200);
|
|
57
|
-
|
|
58
|
-
mesh.setDebugMsgTypes( ERROR | STARTUP | CONNECTION ); // set before init() so that you can see startup messages
|
|
59
|
-
|
|
60
|
-
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT, WIFI_AP_STA, 6 );
|
|
61
|
-
mesh.onReceive(&receivedCallback);
|
|
62
|
-
|
|
63
|
-
// Add the task to the your scheduler
|
|
64
|
-
userScheduler.addTask(myLoggingTask);
|
|
65
|
-
myLoggingTask.enable();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
void loop() {
|
|
69
|
-
// it will run the user scheduler as well
|
|
70
|
-
mesh.update();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
void receivedCallback( uint32_t from, String &msg ) {
|
|
74
|
-
Serial.printf("logClient: Received from %u msg=%s\n", from, msg.c_str());
|
|
75
|
-
|
|
76
|
-
// Saving logServer
|
|
77
|
-
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
78
|
-
JsonDocument jsonBuffer;
|
|
79
|
-
DeserializationError error = deserializeJson(jsonBuffer, msg);
|
|
80
|
-
if (error) {
|
|
81
|
-
Serial.printf("DeserializationError\n");
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
JsonObject root = jsonBuffer.as<JsonObject>();
|
|
85
|
-
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
86
|
-
DynamicJsonDocument jsonBuffer(1024 + msg.length());
|
|
87
|
-
DeserializationError error = deserializeJson(jsonBuffer, msg);
|
|
88
|
-
if (error) {
|
|
89
|
-
Serial.printf("DeserializationError\n");
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
JsonObject root = jsonBuffer.as<JsonObject>();
|
|
93
|
-
#else
|
|
94
|
-
DynamicJsonBuffer jsonBuffer;
|
|
95
|
-
JsonObject& root = jsonBuffer.parseObject(msg);
|
|
96
|
-
#endif
|
|
97
|
-
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
98
|
-
if (root.containsKey("topic")) {
|
|
99
|
-
#else
|
|
100
|
-
if (root["topic"].is<String>()) {
|
|
101
|
-
#endif
|
|
102
|
-
if (String("logServer").equals(root["topic"].as<String>())) {
|
|
103
|
-
// check for on: true or false
|
|
104
|
-
logServerId = root["nodeId"];
|
|
105
|
-
Serial.printf("logServer detected!!!\n");
|
|
106
|
-
}
|
|
107
|
-
Serial.printf("Handled from %u msg=%s\n", from, msg.c_str());
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
//************************************************************
|
|
2
|
+
// this is a simple example that uses the painlessMesh library to
|
|
3
|
+
// setup a node that logs to a central logging node
|
|
4
|
+
// The logServer example shows how to configure the central logging nodes
|
|
5
|
+
//************************************************************
|
|
6
|
+
#include "painlessMesh.h"
|
|
7
|
+
|
|
8
|
+
#define MESH_PREFIX "whateverYouLike"
|
|
9
|
+
#define MESH_PASSWORD "somethingSneaky"
|
|
10
|
+
#define MESH_PORT 5555
|
|
11
|
+
|
|
12
|
+
Scheduler userScheduler; // to control your personal task
|
|
13
|
+
painlessMesh mesh;
|
|
14
|
+
|
|
15
|
+
// Prototype
|
|
16
|
+
void receivedCallback( uint32_t from, String &msg );
|
|
17
|
+
|
|
18
|
+
size_t logServerId = 0;
|
|
19
|
+
|
|
20
|
+
// Send message to the logServer every 10 seconds
|
|
21
|
+
Task myLoggingTask(10000, TASK_FOREVER, []() {
|
|
22
|
+
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
23
|
+
JsonDocument jsonBuffer;
|
|
24
|
+
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
25
|
+
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
26
|
+
DynamicJsonDocument jsonBuffer(1024);
|
|
27
|
+
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
28
|
+
#else
|
|
29
|
+
DynamicJsonBuffer jsonBuffer;
|
|
30
|
+
JsonObject& msg = jsonBuffer.createObject();
|
|
31
|
+
#endif
|
|
32
|
+
msg["topic"] = "sensor";
|
|
33
|
+
msg["value"] = random(0, 180);
|
|
34
|
+
|
|
35
|
+
String str;
|
|
36
|
+
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
37
|
+
serializeJson(msg, str);
|
|
38
|
+
#else
|
|
39
|
+
msg.printTo(str);
|
|
40
|
+
#endif
|
|
41
|
+
if (logServerId == 0) // If we don't know the logServer yet
|
|
42
|
+
mesh.sendBroadcast(str);
|
|
43
|
+
else
|
|
44
|
+
mesh.sendSingle(logServerId, str);
|
|
45
|
+
|
|
46
|
+
// log to serial
|
|
47
|
+
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
48
|
+
serializeJson(msg, Serial);
|
|
49
|
+
#else
|
|
50
|
+
msg.printTo(Serial);
|
|
51
|
+
#endif
|
|
52
|
+
Serial.printf("\n");
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
void setup() {
|
|
56
|
+
Serial.begin(115200);
|
|
57
|
+
|
|
58
|
+
mesh.setDebugMsgTypes( ERROR | STARTUP | CONNECTION ); // set before init() so that you can see startup messages
|
|
59
|
+
|
|
60
|
+
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT, WIFI_AP_STA, 6 );
|
|
61
|
+
mesh.onReceive(&receivedCallback);
|
|
62
|
+
|
|
63
|
+
// Add the task to the your scheduler
|
|
64
|
+
userScheduler.addTask(myLoggingTask);
|
|
65
|
+
myLoggingTask.enable();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void loop() {
|
|
69
|
+
// it will run the user scheduler as well
|
|
70
|
+
mesh.update();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
void receivedCallback( uint32_t from, String &msg ) {
|
|
74
|
+
Serial.printf("logClient: Received from %u msg=%s\n", from, msg.c_str());
|
|
75
|
+
|
|
76
|
+
// Saving logServer
|
|
77
|
+
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
78
|
+
JsonDocument jsonBuffer;
|
|
79
|
+
DeserializationError error = deserializeJson(jsonBuffer, msg);
|
|
80
|
+
if (error) {
|
|
81
|
+
Serial.printf("DeserializationError\n");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
JsonObject root = jsonBuffer.as<JsonObject>();
|
|
85
|
+
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
86
|
+
DynamicJsonDocument jsonBuffer(1024 + msg.length());
|
|
87
|
+
DeserializationError error = deserializeJson(jsonBuffer, msg);
|
|
88
|
+
if (error) {
|
|
89
|
+
Serial.printf("DeserializationError\n");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
JsonObject root = jsonBuffer.as<JsonObject>();
|
|
93
|
+
#else
|
|
94
|
+
DynamicJsonBuffer jsonBuffer;
|
|
95
|
+
JsonObject& root = jsonBuffer.parseObject(msg);
|
|
96
|
+
#endif
|
|
97
|
+
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
98
|
+
if (root.containsKey("topic")) {
|
|
99
|
+
#else
|
|
100
|
+
if (root["topic"].is<String>()) {
|
|
101
|
+
#endif
|
|
102
|
+
if (String("logServer").equals(root["topic"].as<String>())) {
|
|
103
|
+
// check for on: true or false
|
|
104
|
+
logServerId = root["nodeId"];
|
|
105
|
+
Serial.printf("logServer detected!!!\n");
|
|
106
|
+
}
|
|
107
|
+
Serial.printf("Handled from %u msg=%s\n", from, msg.c_str());
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
[platformio]
|
|
2
|
-
src_dir = .
|
|
3
|
-
|
|
4
|
-
[env]
|
|
5
|
-
lib_deps =
|
|
6
|
-
bblanchon/ArduinoJson
|
|
7
|
-
arkhipenko/TaskScheduler
|
|
8
|
-
|
|
9
|
-
[env:esp8266]
|
|
10
|
-
platform = espressif8266
|
|
11
|
-
board = nodemcuv2
|
|
12
|
-
framework = arduino
|
|
13
|
-
lib_extra_dirs = ../../
|
|
14
|
-
lib_deps =
|
|
15
|
-
${env.lib_deps} ; Inherit common dependencies
|
|
16
|
-
esp32async/ESPAsyncTCP ; Only for ESP8266
|
|
17
|
-
|
|
18
|
-
[env:esp32]
|
|
19
|
-
platform = espressif32
|
|
20
|
-
board = esp32dev
|
|
21
|
-
framework = arduino
|
|
22
|
-
lib_extra_dirs = ../../
|
|
23
|
-
lib_deps =
|
|
24
|
-
${env.lib_deps} ; Inherit common dependencies
|
|
25
|
-
esp32async/AsyncTCP
|
|
1
|
+
[platformio]
|
|
2
|
+
src_dir = .
|
|
3
|
+
|
|
4
|
+
[env]
|
|
5
|
+
lib_deps =
|
|
6
|
+
bblanchon/ArduinoJson
|
|
7
|
+
arkhipenko/TaskScheduler
|
|
8
|
+
|
|
9
|
+
[env:esp8266]
|
|
10
|
+
platform = espressif8266
|
|
11
|
+
board = nodemcuv2
|
|
12
|
+
framework = arduino
|
|
13
|
+
lib_extra_dirs = ../../
|
|
14
|
+
lib_deps =
|
|
15
|
+
${env.lib_deps} ; Inherit common dependencies
|
|
16
|
+
esp32async/ESPAsyncTCP ; Only for ESP8266
|
|
17
|
+
|
|
18
|
+
[env:esp32]
|
|
19
|
+
platform = espressif32
|
|
20
|
+
board = esp32dev
|
|
21
|
+
framework = arduino
|
|
22
|
+
lib_extra_dirs = ../../
|
|
23
|
+
lib_deps =
|
|
24
|
+
${env.lib_deps} ; Inherit common dependencies
|
|
25
|
+
esp32async/AsyncTCP
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
//************************************************************
|
|
2
|
-
// this is a simple example that uses the painlessMesh library to
|
|
3
|
-
// setup a single node (this node) as a logging node
|
|
4
|
-
// The logClient example shows how to configure the other nodes
|
|
5
|
-
// to log to this server
|
|
6
|
-
//************************************************************
|
|
7
|
-
#include "painlessMesh.h"
|
|
8
|
-
|
|
9
|
-
#define MESH_PREFIX "whateverYouLike"
|
|
10
|
-
#define MESH_PASSWORD "somethingSneaky"
|
|
11
|
-
#define MESH_PORT 5555
|
|
12
|
-
|
|
13
|
-
Scheduler userScheduler; // to control your personal task
|
|
14
|
-
painlessMesh mesh;
|
|
15
|
-
// Prototype
|
|
16
|
-
void receivedCallback( uint32_t from, String &msg );
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// Send my ID every 10 seconds to inform others
|
|
20
|
-
Task logServerTask(10000, TASK_FOREVER, []() {
|
|
21
|
-
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
22
|
-
JsonDocument jsonBuffer;
|
|
23
|
-
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
24
|
-
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
25
|
-
DynamicJsonDocument jsonBuffer(1024);
|
|
26
|
-
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
27
|
-
#else
|
|
28
|
-
DynamicJsonBuffer jsonBuffer;
|
|
29
|
-
JsonObject& msg = jsonBuffer.createObject();
|
|
30
|
-
#endif
|
|
31
|
-
msg["topic"] = "logServer";
|
|
32
|
-
msg["nodeId"] = mesh.getNodeId();
|
|
33
|
-
|
|
34
|
-
String str;
|
|
35
|
-
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
36
|
-
serializeJson(msg, str);
|
|
37
|
-
#else
|
|
38
|
-
msg.printTo(str);
|
|
39
|
-
#endif
|
|
40
|
-
mesh.sendBroadcast(str);
|
|
41
|
-
|
|
42
|
-
// log to serial
|
|
43
|
-
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
44
|
-
serializeJson(msg, Serial);
|
|
45
|
-
#else
|
|
46
|
-
msg.printTo(Serial);
|
|
47
|
-
#endif
|
|
48
|
-
Serial.printf("\n");
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
void setup() {
|
|
52
|
-
Serial.begin(115200);
|
|
53
|
-
|
|
54
|
-
//mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE | DEBUG ); // all types on
|
|
55
|
-
//mesh.setDebugMsgTypes( ERROR | CONNECTION | SYNC | S_TIME ); // set before init() so that you can see startup messages
|
|
56
|
-
mesh.setDebugMsgTypes( ERROR | CONNECTION | S_TIME ); // set before init() so that you can see startup messages
|
|
57
|
-
|
|
58
|
-
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT, WIFI_AP_STA, 6 );
|
|
59
|
-
mesh.onReceive(&receivedCallback);
|
|
60
|
-
|
|
61
|
-
mesh.onNewConnection([](size_t nodeId) {
|
|
62
|
-
Serial.printf("New Connection %u\n", nodeId);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
mesh.onDroppedConnection([](size_t nodeId) {
|
|
66
|
-
Serial.printf("Dropped Connection %u\n", nodeId);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
// Add the task to the your scheduler
|
|
70
|
-
userScheduler.addTask(logServerTask);
|
|
71
|
-
logServerTask.enable();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
void loop() {
|
|
75
|
-
// it will run the user scheduler as well
|
|
76
|
-
mesh.update();
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
void receivedCallback( uint32_t from, String &msg ) {
|
|
80
|
-
Serial.printf("logServer: Received from %u msg=%s\n", from, msg.c_str());
|
|
81
|
-
}
|
|
1
|
+
//************************************************************
|
|
2
|
+
// this is a simple example that uses the painlessMesh library to
|
|
3
|
+
// setup a single node (this node) as a logging node
|
|
4
|
+
// The logClient example shows how to configure the other nodes
|
|
5
|
+
// to log to this server
|
|
6
|
+
//************************************************************
|
|
7
|
+
#include "painlessMesh.h"
|
|
8
|
+
|
|
9
|
+
#define MESH_PREFIX "whateverYouLike"
|
|
10
|
+
#define MESH_PASSWORD "somethingSneaky"
|
|
11
|
+
#define MESH_PORT 5555
|
|
12
|
+
|
|
13
|
+
Scheduler userScheduler; // to control your personal task
|
|
14
|
+
painlessMesh mesh;
|
|
15
|
+
// Prototype
|
|
16
|
+
void receivedCallback( uint32_t from, String &msg );
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// Send my ID every 10 seconds to inform others
|
|
20
|
+
Task logServerTask(10000, TASK_FOREVER, []() {
|
|
21
|
+
#if ARDUINOJSON_VERSION_MAJOR==7
|
|
22
|
+
JsonDocument jsonBuffer;
|
|
23
|
+
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
24
|
+
#elif ARDUINOJSON_VERSION_MAJOR==6
|
|
25
|
+
DynamicJsonDocument jsonBuffer(1024);
|
|
26
|
+
JsonObject msg = jsonBuffer.to<JsonObject>();
|
|
27
|
+
#else
|
|
28
|
+
DynamicJsonBuffer jsonBuffer;
|
|
29
|
+
JsonObject& msg = jsonBuffer.createObject();
|
|
30
|
+
#endif
|
|
31
|
+
msg["topic"] = "logServer";
|
|
32
|
+
msg["nodeId"] = mesh.getNodeId();
|
|
33
|
+
|
|
34
|
+
String str;
|
|
35
|
+
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
36
|
+
serializeJson(msg, str);
|
|
37
|
+
#else
|
|
38
|
+
msg.printTo(str);
|
|
39
|
+
#endif
|
|
40
|
+
mesh.sendBroadcast(str);
|
|
41
|
+
|
|
42
|
+
// log to serial
|
|
43
|
+
#if ARDUINOJSON_VERSION_MAJOR>=6
|
|
44
|
+
serializeJson(msg, Serial);
|
|
45
|
+
#else
|
|
46
|
+
msg.printTo(Serial);
|
|
47
|
+
#endif
|
|
48
|
+
Serial.printf("\n");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
void setup() {
|
|
52
|
+
Serial.begin(115200);
|
|
53
|
+
|
|
54
|
+
//mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE | DEBUG ); // all types on
|
|
55
|
+
//mesh.setDebugMsgTypes( ERROR | CONNECTION | SYNC | S_TIME ); // set before init() so that you can see startup messages
|
|
56
|
+
mesh.setDebugMsgTypes( ERROR | CONNECTION | S_TIME ); // set before init() so that you can see startup messages
|
|
57
|
+
|
|
58
|
+
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT, WIFI_AP_STA, 6 );
|
|
59
|
+
mesh.onReceive(&receivedCallback);
|
|
60
|
+
|
|
61
|
+
mesh.onNewConnection([](size_t nodeId) {
|
|
62
|
+
Serial.printf("New Connection %u\n", nodeId);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
mesh.onDroppedConnection([](size_t nodeId) {
|
|
66
|
+
Serial.printf("Dropped Connection %u\n", nodeId);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Add the task to the your scheduler
|
|
70
|
+
userScheduler.addTask(logServerTask);
|
|
71
|
+
logServerTask.enable();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void loop() {
|
|
75
|
+
// it will run the user scheduler as well
|
|
76
|
+
mesh.update();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void receivedCallback( uint32_t from, String &msg ) {
|
|
80
|
+
Serial.printf("logServer: Received from %u msg=%s\n", from, msg.c_str());
|
|
81
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
[platformio]
|
|
2
|
-
src_dir = .
|
|
3
|
-
|
|
4
|
-
[env]
|
|
5
|
-
lib_deps =
|
|
6
|
-
bblanchon/ArduinoJson
|
|
7
|
-
arkhipenko/TaskScheduler
|
|
8
|
-
|
|
9
|
-
[env:esp8266]
|
|
10
|
-
platform = espressif8266
|
|
11
|
-
board = nodemcuv2
|
|
12
|
-
framework = arduino
|
|
13
|
-
lib_extra_dirs = ../../
|
|
14
|
-
lib_deps =
|
|
15
|
-
${env.lib_deps} ; Inherit common dependencies
|
|
16
|
-
esp32async/ESPAsyncTCP ; Only for ESP8266
|
|
17
|
-
|
|
18
|
-
[env:esp32]
|
|
19
|
-
platform = espressif32
|
|
20
|
-
board = esp32dev
|
|
21
|
-
framework = arduino
|
|
22
|
-
lib_extra_dirs = ../../
|
|
23
|
-
lib_deps =
|
|
24
|
-
${env.lib_deps} ; Inherit common dependencies
|
|
25
|
-
esp32async/AsyncTCP
|
|
1
|
+
[platformio]
|
|
2
|
+
src_dir = .
|
|
3
|
+
|
|
4
|
+
[env]
|
|
5
|
+
lib_deps =
|
|
6
|
+
bblanchon/ArduinoJson
|
|
7
|
+
arkhipenko/TaskScheduler
|
|
8
|
+
|
|
9
|
+
[env:esp8266]
|
|
10
|
+
platform = espressif8266
|
|
11
|
+
board = nodemcuv2
|
|
12
|
+
framework = arduino
|
|
13
|
+
lib_extra_dirs = ../../
|
|
14
|
+
lib_deps =
|
|
15
|
+
${env.lib_deps} ; Inherit common dependencies
|
|
16
|
+
esp32async/ESPAsyncTCP ; Only for ESP8266
|
|
17
|
+
|
|
18
|
+
[env:esp32]
|
|
19
|
+
platform = espressif32
|
|
20
|
+
board = esp32dev
|
|
21
|
+
framework = arduino
|
|
22
|
+
lib_extra_dirs = ../../
|
|
23
|
+
lib_deps =
|
|
24
|
+
${env.lib_deps} ; Inherit common dependencies
|
|
25
|
+
esp32async/AsyncTCP
|