@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.
Files changed (129) hide show
  1. package/CHANGELOG.md +380 -143
  2. package/LICENSE +674 -674
  3. package/README.md +477 -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 +77 -70
  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/getting-started/first-mesh.md +409 -409
  25. package/docs/getting-started/installation.md +274 -274
  26. package/docs/getting-started/quickstart.md +157 -157
  27. package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
  28. package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/improvements/README.md +86 -68
  31. package/docs/improvements/ota-and-status-enhancements.md +911 -0
  32. package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
  33. package/docs/improvements/ota-status-quick-reference.md +284 -0
  34. package/docs/platformio-publishing.md +255 -0
  35. package/docs/platformio-setup-summary.md +121 -0
  36. package/docs/troubleshooting/common-issues.md +520 -520
  37. package/docs/troubleshooting/faq.md +472 -472
  38. package/docs/tutorials/basic-examples.md +717 -717
  39. package/docs/wiki/API-Reference.md +245 -245
  40. package/docs/wiki/Complete-Documentation.md +122 -122
  41. package/examples/alteriom/README.md +139 -81
  42. package/examples/alteriom/alteriom.ino +186 -185
  43. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  44. package/examples/alteriom/platformio.ini +24 -24
  45. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  46. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  47. package/examples/alteriomImproved/platformio.ini +25 -0
  48. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  49. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  50. package/examples/alteriomPhase1/platformio.ini +25 -0
  51. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  52. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  53. package/examples/alteriomPhase2/platformio.ini +25 -0
  54. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  55. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  56. package/examples/alteriomSensorNode/platformio.ini +25 -0
  57. package/examples/basic/basic.ino +66 -66
  58. package/examples/basic/platformio.ini +25 -25
  59. package/examples/bridge/bridge.ino +51 -51
  60. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  61. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  62. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  63. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  64. package/examples/bridge/platformio.ini +25 -25
  65. package/examples/echoNode/echoNode.ino +33 -33
  66. package/examples/echoNode/platformio.ini +25 -25
  67. package/examples/logClient/logClient.ino +109 -109
  68. package/examples/logClient/platformio.ini +25 -25
  69. package/examples/logServer/logServer.ino +81 -81
  70. package/examples/logServer/platformio.ini +25 -25
  71. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  72. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  73. package/examples/meshCommandNode/platformio.ini +25 -0
  74. package/examples/mqttBridge/mqttBridge.ino +118 -118
  75. package/examples/mqttBridge/platformio.ini +26 -26
  76. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  77. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  78. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  79. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  80. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  81. package/examples/mqttCommandBridge/platformio.ini +26 -0
  82. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  83. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  84. package/examples/mqttStatusBridge/platformio.ini +26 -0
  85. package/examples/mqttTopologyTest/README.md +467 -0
  86. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  87. package/examples/mqttTopologyTest/platformio.ini +26 -0
  88. package/examples/namedMesh/namedMesh.ino +97 -97
  89. package/examples/namedMesh/platformio.ini +25 -25
  90. package/examples/otaReceiver/otaReceiver.ino +79 -79
  91. package/examples/otaReceiver/platformio.ini +25 -25
  92. package/examples/otaSender/otaSender.ino +160 -151
  93. package/examples/otaSender/platformio.ini +25 -25
  94. package/examples/startHere/platformio.ini +25 -25
  95. package/examples/startHere/startHere.ino +159 -159
  96. package/examples/webServer/platformio.ini +27 -27
  97. package/examples/webServer/webServer.ino +89 -89
  98. package/keywords.txt +48 -48
  99. package/library.json +55 -34
  100. package/library.properties +10 -10
  101. package/package.json +86 -78
  102. package/src/AlteriomPainlessMesh.h +97 -97
  103. package/src/arduino/wifi.hpp +365 -365
  104. package/src/boost/asynctcp.hpp +279 -279
  105. package/src/painlessMesh.h +70 -70
  106. package/src/painlessMeshSTA.cpp +236 -236
  107. package/src/painlessMeshSTA.h +58 -58
  108. package/src/painlessTaskOptions.h +4 -4
  109. package/src/painlessmesh/base64.hpp +111 -111
  110. package/src/painlessmesh/buffer.hpp +229 -229
  111. package/src/painlessmesh/callback.hpp +91 -91
  112. package/src/painlessmesh/configuration.hpp +77 -77
  113. package/src/painlessmesh/connection.hpp +192 -192
  114. package/src/painlessmesh/layout.hpp +188 -188
  115. package/src/painlessmesh/logger.hpp +158 -158
  116. package/src/painlessmesh/memory.hpp +119 -119
  117. package/src/painlessmesh/mesh.hpp +761 -560
  118. package/src/painlessmesh/metrics.hpp +322 -322
  119. package/src/painlessmesh/ntp.hpp +263 -263
  120. package/src/painlessmesh/ota.hpp +582 -553
  121. package/src/painlessmesh/plugin.hpp +188 -188
  122. package/src/painlessmesh/protocol.hpp +813 -813
  123. package/src/painlessmesh/router.hpp +322 -322
  124. package/src/painlessmesh/tcp.hpp +71 -71
  125. package/src/painlessmesh/validation.hpp +238 -238
  126. package/src/plugin/performance.hpp +214 -214
  127. package/src/plugin/remote.hpp +64 -64
  128. package/src/scheduler.cpp +10 -10
  129. package/src/wifi.cpp +2 -2
@@ -0,0 +1,26 @@
1
+ [platformio]
2
+ src_dir = .
3
+
4
+ [env]
5
+ lib_deps =
6
+ bblanchon/ArduinoJson
7
+ arkhipenko/TaskScheduler
8
+ knolleary/PubSubClient
9
+
10
+ [env:esp8266]
11
+ platform = espressif8266
12
+ board = nodemcuv2
13
+ framework = arduino
14
+ lib_extra_dirs = ../../
15
+ lib_deps =
16
+ ${env.lib_deps} ; Inherit common dependencies
17
+ esp32async/ESPAsyncTCP@^2.0.0 ; Only for ESP8266
18
+
19
+ [env:esp32]
20
+ platform = espressif32
21
+ board = esp32dev
22
+ framework = arduino
23
+ lib_extra_dirs = ../../
24
+ lib_deps =
25
+ ${env.lib_deps} ; Inherit common dependencies
26
+ esp32async/AsyncTCP
@@ -1,97 +1,97 @@
1
- //************************************************************
2
- // this is a simple example that uses the painlessMesh library
3
- //
4
- // This example shows how to build a mesh with named nodes using the plugin
5
- // system
6
- //
7
- //
8
- //************************************************************
9
- #include <cstdint>
10
- #include <map>
11
- #include "Arduino.h"
12
- #include "painlessMesh.h"
13
- #include "painlessmesh/plugin.hpp"
14
-
15
- #define MESH_PREFIX "whateverYouLike"
16
- #define MESH_PASSWORD "somethingSneaky"
17
- #define MESH_PORT 5555
18
-
19
- painlessMesh mesh;
20
-
21
- // NOTE: various ideas for improvement
22
- // - Send new names regularly and only send all names sometimes
23
- // - Keep track of the names the neighbour already knows (when we receive them)
24
- // and only send unknown names/nodes
25
- // - Use some kind of bidirectoral map, so both get_name_from_id and
26
- // get_id_from_name are fast
27
-
28
- // Send the names you know to your neighbours
29
- class NamePackage : public painlessmesh::plugin::NeighbourPackage {
30
- public:
31
- std::map<TSTRING, uint32_t> names;
32
-
33
- // Set an id for the package. Id can be any unique int not already in use. The
34
- // mesh uses the numbers 1..12, so using a number larger than that
35
- NamePackage() : painlessmesh::plugin::NeighbourPackage(21) {}
36
-
37
- NamePackage(JsonObject jsonObj)
38
- : painlessmesh::plugin::NeighbourPackage(jsonObj) {
39
- for (JsonPair kv : jsonObj) {
40
- names.insert(std::pair<TSTRING, uint32_t>(kv.key().c_str(), kv.value()));
41
- }
42
- }
43
-
44
- JsonObject addTo(JsonObject&& jsonObj) const {
45
- jsonObj = painlessmesh::plugin::NeighbourPackage::addTo(std::move(jsonObj));
46
- for (auto&& kv : names) {
47
- jsonObj[kv.first] = kv.second;
48
- }
49
- return jsonObj;
50
- }
51
- };
52
-
53
- std::map<TSTRING, uint32_t> known_names;
54
- TSTRING get_name_from_id(uint32_t id) {
55
- for (auto&& kv : known_names) {
56
- if (kv.second == id) {
57
- return kv.first;
58
- }
59
- }
60
- return String(id);
61
- }
62
-
63
- uint32_t get_id_from_name(TSTRING name) {
64
- auto it = known_names.find(name);
65
- return (it != known_names.end()) ? it->second : 0;
66
- }
67
-
68
- void setup() {
69
- Serial.begin(115200);
70
- mesh.setDebugMsgTypes(ERROR | STARTUP);
71
-
72
- mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT);
73
-
74
- auto sendPkg = std::make_shared<NamePackage>();
75
- sendPkg->names = known_names;
76
- // Every minute we send the names we know to our neighbours
77
- mesh.addTask(TASK_MINUTE, TASK_FOREVER, [sendPkg, &mesh]() {
78
- sendPkg->names = known_names;
79
- mesh.sendPackage(sendPkg.get());
80
- });
81
-
82
- // When we receive a message of the correct type, then insert the names they
83
- // know into our map of names
84
- mesh.onPackage(sendPkg->type, [](painlessmesh::protocol::Variant& var) {
85
- const auto& pkg = var.to<NamePackage>();
86
- for (auto&& kv : pkg.names) {
87
- known_names.insert(kv);
88
- }
89
-
90
- return false;
91
- });
92
- }
93
-
94
- void loop() {
95
- // it will run the user scheduler as well
96
- mesh.update();
97
- }
1
+ //************************************************************
2
+ // this is a simple example that uses the painlessMesh library
3
+ //
4
+ // This example shows how to build a mesh with named nodes using the plugin
5
+ // system
6
+ //
7
+ //
8
+ //************************************************************
9
+ #include <cstdint>
10
+ #include <map>
11
+ #include "Arduino.h"
12
+ #include "painlessMesh.h"
13
+ #include "painlessmesh/plugin.hpp"
14
+
15
+ #define MESH_PREFIX "whateverYouLike"
16
+ #define MESH_PASSWORD "somethingSneaky"
17
+ #define MESH_PORT 5555
18
+
19
+ painlessMesh mesh;
20
+
21
+ // NOTE: various ideas for improvement
22
+ // - Send new names regularly and only send all names sometimes
23
+ // - Keep track of the names the neighbour already knows (when we receive them)
24
+ // and only send unknown names/nodes
25
+ // - Use some kind of bidirectoral map, so both get_name_from_id and
26
+ // get_id_from_name are fast
27
+
28
+ // Send the names you know to your neighbours
29
+ class NamePackage : public painlessmesh::plugin::NeighbourPackage {
30
+ public:
31
+ std::map<TSTRING, uint32_t> names;
32
+
33
+ // Set an id for the package. Id can be any unique int not already in use. The
34
+ // mesh uses the numbers 1..12, so using a number larger than that
35
+ NamePackage() : painlessmesh::plugin::NeighbourPackage(21) {}
36
+
37
+ NamePackage(JsonObject jsonObj)
38
+ : painlessmesh::plugin::NeighbourPackage(jsonObj) {
39
+ for (JsonPair kv : jsonObj) {
40
+ names.insert(std::pair<TSTRING, uint32_t>(kv.key().c_str(), kv.value()));
41
+ }
42
+ }
43
+
44
+ JsonObject addTo(JsonObject&& jsonObj) const {
45
+ jsonObj = painlessmesh::plugin::NeighbourPackage::addTo(std::move(jsonObj));
46
+ for (auto&& kv : names) {
47
+ jsonObj[kv.first] = kv.second;
48
+ }
49
+ return jsonObj;
50
+ }
51
+ };
52
+
53
+ std::map<TSTRING, uint32_t> known_names;
54
+ TSTRING get_name_from_id(uint32_t id) {
55
+ for (auto&& kv : known_names) {
56
+ if (kv.second == id) {
57
+ return kv.first;
58
+ }
59
+ }
60
+ return String(id);
61
+ }
62
+
63
+ uint32_t get_id_from_name(TSTRING name) {
64
+ auto it = known_names.find(name);
65
+ return (it != known_names.end()) ? it->second : 0;
66
+ }
67
+
68
+ void setup() {
69
+ Serial.begin(115200);
70
+ mesh.setDebugMsgTypes(ERROR | STARTUP);
71
+
72
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT);
73
+
74
+ auto sendPkg = std::make_shared<NamePackage>();
75
+ sendPkg->names = known_names;
76
+ // Every minute we send the names we know to our neighbours
77
+ mesh.addTask(TASK_MINUTE, TASK_FOREVER, [sendPkg, &mesh]() {
78
+ sendPkg->names = known_names;
79
+ mesh.sendPackage(sendPkg.get());
80
+ });
81
+
82
+ // When we receive a message of the correct type, then insert the names they
83
+ // know into our map of names
84
+ mesh.onPackage(sendPkg->type, [](painlessmesh::protocol::Variant& var) {
85
+ const auto& pkg = var.to<NamePackage>();
86
+ for (auto&& kv : pkg.names) {
87
+ known_names.insert(kv);
88
+ }
89
+
90
+ return false;
91
+ });
92
+ }
93
+
94
+ void loop() {
95
+ // it will run the user scheduler as well
96
+ mesh.update();
97
+ }
@@ -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,79 +1,79 @@
1
- //************************************************************
2
- // this is a simple example that uses the painlessMesh library
3
- //
4
- // 1. sends a silly message to every node on the mesh at a random time between 1
5
- // and 5 seconds
6
- // 2. prints anything it receives to Serial.print
7
- // 3. has OTA support and can be updated remotely
8
- //
9
- //************************************************************
10
- #include "painlessMesh.h"
11
-
12
- #define MESH_PREFIX "whateverYouLike"
13
- #define MESH_PASSWORD "somethingSneaky"
14
- #define MESH_PORT 5555
15
-
16
- Scheduler userScheduler; // to control your personal task
17
- painlessMesh mesh;
18
-
19
- // User stub
20
- void sendMessage(); // Prototype so PlatformIO doesn't complain
21
-
22
- Task taskSendMessage(TASK_SECOND * 1, TASK_FOREVER, &sendMessage);
23
-
24
- void sendMessage() {
25
- String msg = "Hello from node ";
26
- msg += mesh.getNodeId();
27
- mesh.sendBroadcast(msg);
28
- taskSendMessage.setInterval(random(TASK_SECOND * 1, TASK_SECOND * 5));
29
- }
30
-
31
- // Needed for painless library
32
- void receivedCallback(uint32_t from, String &msg) {
33
- Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
34
- }
35
-
36
- void newConnectionCallback(uint32_t nodeId) {
37
- Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
38
- }
39
-
40
- void changedConnectionCallback() { Serial.printf("Changed connections\n"); }
41
-
42
- void nodeTimeAdjustedCallback(int32_t offset) {
43
- Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
44
- }
45
-
46
- void setup() {
47
- Serial.begin(115200);
48
-
49
- // mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC |
50
- // COMMUNICATION | GENERAL | MSG_TYPES | REMOTE ); // all types on
51
- mesh.setDebugMsgTypes(
52
- ERROR | STARTUP |
53
- DEBUG); // set before init() so that you can see startup messages
54
-
55
- mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
56
- mesh.onReceive(&receivedCallback);
57
- mesh.onNewConnection(&newConnectionCallback);
58
- mesh.onChangedConnections(&changedConnectionCallback);
59
- mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
60
-
61
- // if you want your node to accept OTA firmware, simply include this line
62
- // with whatever role you want your hardware to be. For instance, a
63
- // mesh network may have a thermometer, rain detector, and bridge. Each of
64
- // those may require different firmware, so different roles are preferrable.
65
- //
66
- // MAKE SURE YOUR UPLOADED OTA FIRMWARE INCLUDES OTA SUPPORT OR YOU WILL LOSE
67
- // THE ABILITY TO UPLOAD MORE FIRMWARE OVER OTA. YOU ALSO WANT TO MAKE SURE
68
- // THE ROLES ARE CORRECT
69
- mesh.initOTAReceive("otareceiver");
70
- mesh.setContainsRoot(true);
71
-
72
- userScheduler.addTask(taskSendMessage);
73
- taskSendMessage.enable();
74
- }
75
-
76
- void loop() {
77
- // it will run the user scheduler as well
78
- mesh.update();
79
- }
1
+ //************************************************************
2
+ // this is a simple example that uses the painlessMesh library
3
+ //
4
+ // 1. sends a silly message to every node on the mesh at a random time between 1
5
+ // and 5 seconds
6
+ // 2. prints anything it receives to Serial.print
7
+ // 3. has OTA support and can be updated remotely
8
+ //
9
+ //************************************************************
10
+ #include "painlessMesh.h"
11
+
12
+ #define MESH_PREFIX "whateverYouLike"
13
+ #define MESH_PASSWORD "somethingSneaky"
14
+ #define MESH_PORT 5555
15
+
16
+ Scheduler userScheduler; // to control your personal task
17
+ painlessMesh mesh;
18
+
19
+ // User stub
20
+ void sendMessage(); // Prototype so PlatformIO doesn't complain
21
+
22
+ Task taskSendMessage(TASK_SECOND * 1, TASK_FOREVER, &sendMessage);
23
+
24
+ void sendMessage() {
25
+ String msg = "Hello from node ";
26
+ msg += mesh.getNodeId();
27
+ mesh.sendBroadcast(msg);
28
+ taskSendMessage.setInterval(random(TASK_SECOND * 1, TASK_SECOND * 5));
29
+ }
30
+
31
+ // Needed for painless library
32
+ void receivedCallback(uint32_t from, String &msg) {
33
+ Serial.printf("startHere: Received from %u msg=%s\n", from, msg.c_str());
34
+ }
35
+
36
+ void newConnectionCallback(uint32_t nodeId) {
37
+ Serial.printf("--> startHere: New Connection, nodeId = %u\n", nodeId);
38
+ }
39
+
40
+ void changedConnectionCallback() { Serial.printf("Changed connections\n"); }
41
+
42
+ void nodeTimeAdjustedCallback(int32_t offset) {
43
+ Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
44
+ }
45
+
46
+ void setup() {
47
+ Serial.begin(115200);
48
+
49
+ // mesh.setDebugMsgTypes( ERROR | MESH_STATUS | CONNECTION | SYNC |
50
+ // COMMUNICATION | GENERAL | MSG_TYPES | REMOTE ); // all types on
51
+ mesh.setDebugMsgTypes(
52
+ ERROR | STARTUP |
53
+ DEBUG); // set before init() so that you can see startup messages
54
+
55
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
56
+ mesh.onReceive(&receivedCallback);
57
+ mesh.onNewConnection(&newConnectionCallback);
58
+ mesh.onChangedConnections(&changedConnectionCallback);
59
+ mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
60
+
61
+ // if you want your node to accept OTA firmware, simply include this line
62
+ // with whatever role you want your hardware to be. For instance, a
63
+ // mesh network may have a thermometer, rain detector, and bridge. Each of
64
+ // those may require different firmware, so different roles are preferrable.
65
+ //
66
+ // MAKE SURE YOUR UPLOADED OTA FIRMWARE INCLUDES OTA SUPPORT OR YOU WILL LOSE
67
+ // THE ABILITY TO UPLOAD MORE FIRMWARE OVER OTA. YOU ALSO WANT TO MAKE SURE
68
+ // THE ROLES ARE CORRECT
69
+ mesh.initOTAReceive("otareceiver");
70
+ mesh.setContainsRoot(true);
71
+
72
+ userScheduler.addTask(taskSendMessage);
73
+ taskSendMessage.enable();
74
+ }
75
+
76
+ void loop() {
77
+ // it will run the user scheduler as well
78
+ mesh.update();
79
+ }
@@ -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