@alteriom/painlessmesh 1.6.1 → 1.7.3

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.
Files changed (152) hide show
  1. package/CHANGELOG.md +435 -144
  2. package/LICENSE +674 -674
  3. package/README.md +491 -434
  4. package/RELEASE_GUIDE.md +504 -418
  5. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
  6. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
  7. package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
  8. package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
  9. package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
  10. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
  11. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
  12. package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
  13. package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
  14. package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
  15. package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
  16. package/docs/PHASE1_GUIDE.md +349 -0
  17. package/docs/PHASE2_GUIDE.md +543 -0
  18. package/docs/README.md +130 -71
  19. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
  20. package/docs/alteriom/overview.md +507 -507
  21. package/docs/api/core-api.md +606 -606
  22. package/docs/architecture/mesh-architecture.md +378 -378
  23. package/docs/architecture/plugin-system.md +516 -516
  24. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +166 -0
  25. package/docs/archive/FEATURE_PROPOSALS.md +337 -0
  26. package/docs/archive/LIBRARY_JSON_FIX.md +98 -0
  27. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +215 -0
  28. package/docs/archive/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/archive/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/archive/RELEASE_SUMMARY.md +173 -0
  31. package/docs/archive/SCONS_BUILD_FIX.md +313 -0
  32. package/docs/archive/TRIGGER_RELEASE.md +280 -0
  33. package/docs/archive/VECTOR_INCLUDE_FIX.md +129 -0
  34. package/docs/archive/ota-and-status-enhancements.md +911 -0
  35. package/docs/archive/ota-status-architecture-diagrams.md +658 -0
  36. package/docs/archive/ota-status-quick-reference.md +284 -0
  37. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +71 -0
  38. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +1011 -0
  39. package/docs/development/DOCKER_TESTING.md +196 -0
  40. package/docs/development/PLATFORMIO_USAGE.md +180 -0
  41. package/docs/development/TESTING_SUMMARY.md +126 -0
  42. package/docs/development/contributing.md +301 -0
  43. package/docs/development/documentation.md +583 -0
  44. package/docs/getting-started/first-mesh.md +409 -409
  45. package/docs/getting-started/installation.md +274 -274
  46. package/docs/getting-started/quickstart.md +157 -157
  47. package/docs/improvements/FUTURE_PROPOSALS.md +1016 -0
  48. package/docs/improvements/IMPLEMENTATION_HISTORY.md +1091 -0
  49. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +709 -0
  50. package/docs/improvements/README.md +212 -69
  51. package/docs/platformio-publishing.md +255 -0
  52. package/docs/platformio-setup-summary.md +121 -0
  53. package/docs/releases/FEATURE_HISTORY.md +543 -0
  54. package/docs/releases/PATCH_v1.7.3.md +262 -0
  55. package/docs/releases/PHASE1_SUMMARY.md +246 -0
  56. package/docs/releases/PHASE2_SUMMARY.md +499 -0
  57. package/docs/releases/RELEASE_NOTES_1.7.0.md +539 -0
  58. package/docs/troubleshooting/common-issues.md +520 -520
  59. package/docs/troubleshooting/debugging.md +455 -0
  60. package/docs/troubleshooting/faq.md +472 -472
  61. package/docs/tutorials/basic-examples.md +717 -717
  62. package/docs/wiki/API-Reference.md +245 -245
  63. package/docs/wiki/Complete-Documentation.md +122 -122
  64. package/examples/alteriom/README.md +139 -81
  65. package/examples/alteriom/alteriom.ino +186 -185
  66. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  67. package/examples/alteriom/platformio.ini +24 -24
  68. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  69. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  70. package/examples/alteriomImproved/platformio.ini +25 -0
  71. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  72. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  73. package/examples/alteriomPhase1/platformio.ini +25 -0
  74. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  75. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  76. package/examples/alteriomPhase2/platformio.ini +25 -0
  77. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  78. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  79. package/examples/alteriomSensorNode/platformio.ini +25 -0
  80. package/examples/basic/basic.ino +66 -66
  81. package/examples/basic/platformio.ini +25 -25
  82. package/examples/bridge/bridge.ino +51 -51
  83. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  84. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  85. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  86. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  87. package/examples/bridge/platformio.ini +25 -25
  88. package/examples/echoNode/echoNode.ino +33 -33
  89. package/examples/echoNode/platformio.ini +25 -25
  90. package/examples/logClient/logClient.ino +109 -109
  91. package/examples/logClient/platformio.ini +25 -25
  92. package/examples/logServer/logServer.ino +81 -81
  93. package/examples/logServer/platformio.ini +25 -25
  94. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  95. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  96. package/examples/meshCommandNode/platformio.ini +25 -0
  97. package/examples/mqttBridge/mqttBridge.ino +118 -118
  98. package/examples/mqttBridge/platformio.ini +26 -26
  99. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  100. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  101. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  102. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  103. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  104. package/examples/mqttCommandBridge/platformio.ini +26 -0
  105. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  106. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  107. package/examples/mqttStatusBridge/platformio.ini +26 -0
  108. package/examples/mqttTopologyTest/README.md +467 -0
  109. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  110. package/examples/mqttTopologyTest/platformio.ini +26 -0
  111. package/examples/namedMesh/namedMesh.ino +97 -97
  112. package/examples/namedMesh/platformio.ini +25 -25
  113. package/examples/otaReceiver/otaReceiver.ino +79 -79
  114. package/examples/otaReceiver/platformio.ini +25 -25
  115. package/examples/otaSender/otaSender.ino +160 -151
  116. package/examples/otaSender/platformio.ini +25 -25
  117. package/examples/startHere/platformio.ini +25 -25
  118. package/examples/startHere/startHere.ino +159 -159
  119. package/examples/webServer/platformio.ini +27 -27
  120. package/examples/webServer/webServer.ino +89 -89
  121. package/keywords.txt +48 -48
  122. package/library.json +55 -34
  123. package/library.properties +10 -10
  124. package/package.json +86 -78
  125. package/src/AlteriomPainlessMesh.h +97 -97
  126. package/src/arduino/wifi.hpp +365 -365
  127. package/src/boost/asynctcp.hpp +279 -279
  128. package/src/painlessMesh.h +70 -70
  129. package/src/painlessMeshSTA.cpp +236 -236
  130. package/src/painlessMeshSTA.h +58 -58
  131. package/src/painlessTaskOptions.h +4 -4
  132. package/src/painlessmesh/base64.hpp +111 -111
  133. package/src/painlessmesh/buffer.hpp +229 -229
  134. package/src/painlessmesh/callback.hpp +91 -91
  135. package/src/painlessmesh/configuration.hpp +77 -77
  136. package/src/painlessmesh/connection.hpp +192 -192
  137. package/src/painlessmesh/layout.hpp +188 -188
  138. package/src/painlessmesh/logger.hpp +158 -158
  139. package/src/painlessmesh/memory.hpp +119 -119
  140. package/src/painlessmesh/mesh.hpp +761 -560
  141. package/src/painlessmesh/metrics.hpp +322 -322
  142. package/src/painlessmesh/ntp.hpp +263 -263
  143. package/src/painlessmesh/ota.hpp +582 -553
  144. package/src/painlessmesh/plugin.hpp +188 -188
  145. package/src/painlessmesh/protocol.hpp +813 -813
  146. package/src/painlessmesh/router.hpp +338 -322
  147. package/src/painlessmesh/tcp.hpp +71 -71
  148. package/src/painlessmesh/validation.hpp +238 -238
  149. package/src/plugin/performance.hpp +214 -214
  150. package/src/plugin/remote.hpp +64 -64
  151. package/src/scheduler.cpp +10 -10
  152. 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