@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,151 +1,160 @@
|
|
|
1
|
-
//************************************************************
|
|
2
|
-
// this is an example that uses the painlessmesh library to
|
|
3
|
-
// upload firmware to another node on the network.
|
|
4
|
-
// This will upload to an ESP device running the otaReceiver.ino
|
|
5
|
-
//
|
|
6
|
-
// The naming convetions should be as follows for bin files
|
|
7
|
-
// firmware_<hardware>_<role>.bin
|
|
8
|
-
// To create your own binary files, export them and rename
|
|
9
|
-
// them to follow this format, where hardware will be
|
|
10
|
-
// "ESP8266" or "ESP32" (capitalized.)
|
|
11
|
-
// If sending to the otacreceiver sketch, role should be
|
|
12
|
-
// "otareceiver" (lowercase)
|
|
13
|
-
//
|
|
14
|
-
// This sketch assumes a Nodemcu-32s with an SD card
|
|
15
|
-
// connected as shown in the jpg included in the sketch folder
|
|
16
|
-
// This code may have to be reworked/hardware adjusted for
|
|
17
|
-
// other boards or ESP8266. The core code works well though
|
|
18
|
-
//
|
|
19
|
-
// MAKE SURE YOUR UPLOADED OTA FIRMWARE INCLUDES OTA SUPPORT
|
|
20
|
-
// OR YOU WILL LOSE THE ABILITY TO UPLOAD MORE FIRMWARE.
|
|
21
|
-
// THE INCLUDED .bin DOES NOT HAVE OTA SUPPORT SO THIS MUST BE
|
|
22
|
-
// REFLASHED
|
|
23
|
-
//************************************************************
|
|
24
|
-
|
|
25
|
-
#ifdef ESP32
|
|
26
|
-
#else
|
|
27
|
-
#define CS_PIN D8
|
|
28
|
-
#endif
|
|
29
|
-
|
|
30
|
-
#include "painlessMesh.h"
|
|
31
|
-
|
|
32
|
-
#include <FS.h>
|
|
33
|
-
#include "SD.h"
|
|
34
|
-
#include "SPI.h"
|
|
35
|
-
|
|
36
|
-
#define MESH_PREFIX "whateverYouLike"
|
|
37
|
-
#define MESH_PASSWORD "somethingSneaky"
|
|
38
|
-
#define MESH_PORT 5555
|
|
39
|
-
|
|
40
|
-
#define OTA_PART_SIZE 1024 //How many bytes to send per OTA data packet
|
|
41
|
-
|
|
42
|
-
painlessMesh mesh;
|
|
43
|
-
|
|
44
|
-
void setup() {
|
|
45
|
-
Serial.begin(115200);
|
|
46
|
-
delay(1000);
|
|
47
|
-
mesh.setDebugMsgTypes(
|
|
48
|
-
ERROR | STARTUP | CONNECTION |
|
|
49
|
-
DEBUG); // set before init() so that you can see startup messages
|
|
50
|
-
|
|
51
|
-
mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT);
|
|
52
|
-
|
|
53
|
-
// Bridge node, should (in most cases) be a root node. See [the
|
|
54
|
-
// wiki](https://gitlab.com/painlessMesh/painlessMesh/wikis/Possible-challenges-in-mesh-formation)
|
|
55
|
-
// for some background
|
|
56
|
-
mesh.setRoot(true);
|
|
57
|
-
// This node and all other nodes should ideally know the mesh contains a root,
|
|
58
|
-
// so call this on all nodes
|
|
59
|
-
mesh.setContainsRoot(true);
|
|
60
|
-
|
|
61
|
-
delay(1000);
|
|
62
|
-
#ifdef ESP32
|
|
63
|
-
if (!SD.begin()) {
|
|
64
|
-
#else
|
|
65
|
-
if (!SD.begin(CS_PIN)) {
|
|
66
|
-
#endif
|
|
67
|
-
rebootEspWithReason("Could not mount SD card, restarting");
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
File dir = SD.open("/");
|
|
71
|
-
while (true) {
|
|
72
|
-
File entry = dir.openNextFile();
|
|
73
|
-
if (!entry) { //End of files
|
|
74
|
-
rebootEspWithReason("Could not find valid firmware, please validate");
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
//This block of code parses the file name to make sure it is valid.
|
|
78
|
-
//It will also get the role and hardware the firmware is targeted at.
|
|
79
|
-
if (!entry.isDirectory()) {
|
|
80
|
-
TSTRING name = entry.name();
|
|
81
|
-
if (name.length() > 1 && name.indexOf('_') != -1 &&
|
|
82
|
-
name.indexOf('_') != name.lastIndexOf('_') &&
|
|
83
|
-
name.indexOf('.') != -1) {
|
|
84
|
-
TSTRING firmware = name.substring(1, name.indexOf('_'));
|
|
85
|
-
TSTRING hardware =
|
|
86
|
-
name.substring(name.indexOf('_') + 1, name.lastIndexOf('_'));
|
|
87
|
-
TSTRING role =
|
|
88
|
-
name.substring(name.lastIndexOf('_') + 1, name.indexOf('.'));
|
|
89
|
-
TSTRING extension =
|
|
90
|
-
name.substring(name.indexOf('.') + 1, name.length());
|
|
91
|
-
if (firmware.equals("firmware") &&
|
|
92
|
-
(hardware.equals("ESP8266") || hardware.equals("ESP32")) &&
|
|
93
|
-
extension.equals("bin")) {
|
|
94
|
-
|
|
95
|
-
Serial.println("OTA FIRMWARE FOUND, NOW BROADCASTING");
|
|
96
|
-
|
|
97
|
-
//This is the important bit for OTA, up to now was just getting the file.
|
|
98
|
-
//If you are using some other way to upload firmware, possibly from
|
|
99
|
-
//mqtt or something, this is what needs to be changed.
|
|
100
|
-
//This function could also be changed to support OTA of multiple files
|
|
101
|
-
//at the same time, potentially through using the pkg.md5 as a key in
|
|
102
|
-
//a map to determine which to send
|
|
103
|
-
mesh.initOTASend(
|
|
104
|
-
[&entry](painlessmesh::plugin::ota::DataRequest pkg,
|
|
105
|
-
char* buffer) {
|
|
106
|
-
|
|
107
|
-
//fill the buffer with the requested data packet from the node.
|
|
108
|
-
entry.seek(OTA_PART_SIZE * pkg.partNo);
|
|
109
|
-
entry.readBytes(buffer, OTA_PART_SIZE);
|
|
110
|
-
|
|
111
|
-
//The buffer can hold OTA_PART_SIZE bytes, but the last packet may
|
|
112
|
-
//not be that long. Return the actual size of the packet.
|
|
113
|
-
return min((unsigned)OTA_PART_SIZE,
|
|
114
|
-
entry.size() - (OTA_PART_SIZE * pkg.partNo));
|
|
115
|
-
},
|
|
116
|
-
OTA_PART_SIZE);
|
|
117
|
-
|
|
118
|
-
//Calculate the MD5 hash of the firmware we are trying to send. This will be used
|
|
119
|
-
//to validate the firmware as well as tell if a node needs this firmware.
|
|
120
|
-
MD5Builder md5;
|
|
121
|
-
md5.begin();
|
|
122
|
-
md5.addStream(entry, entry.size());
|
|
123
|
-
md5.calculate();
|
|
124
|
-
|
|
125
|
-
//Make it known to the network that there is OTA firmware available.
|
|
126
|
-
//This will send a message every minute for an hour letting nodes know
|
|
127
|
-
//that firmware is available.
|
|
128
|
-
//This returns a task that allows you to do things on disable or more,
|
|
129
|
-
//like closing your files or whatever.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
1
|
+
//************************************************************
|
|
2
|
+
// this is an example that uses the painlessmesh library to
|
|
3
|
+
// upload firmware to another node on the network.
|
|
4
|
+
// This will upload to an ESP device running the otaReceiver.ino
|
|
5
|
+
//
|
|
6
|
+
// The naming convetions should be as follows for bin files
|
|
7
|
+
// firmware_<hardware>_<role>.bin
|
|
8
|
+
// To create your own binary files, export them and rename
|
|
9
|
+
// them to follow this format, where hardware will be
|
|
10
|
+
// "ESP8266" or "ESP32" (capitalized.)
|
|
11
|
+
// If sending to the otacreceiver sketch, role should be
|
|
12
|
+
// "otareceiver" (lowercase)
|
|
13
|
+
//
|
|
14
|
+
// This sketch assumes a Nodemcu-32s with an SD card
|
|
15
|
+
// connected as shown in the jpg included in the sketch folder
|
|
16
|
+
// This code may have to be reworked/hardware adjusted for
|
|
17
|
+
// other boards or ESP8266. The core code works well though
|
|
18
|
+
//
|
|
19
|
+
// MAKE SURE YOUR UPLOADED OTA FIRMWARE INCLUDES OTA SUPPORT
|
|
20
|
+
// OR YOU WILL LOSE THE ABILITY TO UPLOAD MORE FIRMWARE.
|
|
21
|
+
// THE INCLUDED .bin DOES NOT HAVE OTA SUPPORT SO THIS MUST BE
|
|
22
|
+
// REFLASHED
|
|
23
|
+
//************************************************************
|
|
24
|
+
|
|
25
|
+
#ifdef ESP32
|
|
26
|
+
#else
|
|
27
|
+
#define CS_PIN D8
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#include "painlessMesh.h"
|
|
31
|
+
|
|
32
|
+
#include <FS.h>
|
|
33
|
+
#include "SD.h"
|
|
34
|
+
#include "SPI.h"
|
|
35
|
+
|
|
36
|
+
#define MESH_PREFIX "whateverYouLike"
|
|
37
|
+
#define MESH_PASSWORD "somethingSneaky"
|
|
38
|
+
#define MESH_PORT 5555
|
|
39
|
+
|
|
40
|
+
#define OTA_PART_SIZE 1024 //How many bytes to send per OTA data packet
|
|
41
|
+
|
|
42
|
+
painlessMesh mesh;
|
|
43
|
+
|
|
44
|
+
void setup() {
|
|
45
|
+
Serial.begin(115200);
|
|
46
|
+
delay(1000);
|
|
47
|
+
mesh.setDebugMsgTypes(
|
|
48
|
+
ERROR | STARTUP | CONNECTION |
|
|
49
|
+
DEBUG); // set before init() so that you can see startup messages
|
|
50
|
+
|
|
51
|
+
mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT);
|
|
52
|
+
|
|
53
|
+
// Bridge node, should (in most cases) be a root node. See [the
|
|
54
|
+
// wiki](https://gitlab.com/painlessMesh/painlessMesh/wikis/Possible-challenges-in-mesh-formation)
|
|
55
|
+
// for some background
|
|
56
|
+
mesh.setRoot(true);
|
|
57
|
+
// This node and all other nodes should ideally know the mesh contains a root,
|
|
58
|
+
// so call this on all nodes
|
|
59
|
+
mesh.setContainsRoot(true);
|
|
60
|
+
|
|
61
|
+
delay(1000);
|
|
62
|
+
#ifdef ESP32
|
|
63
|
+
if (!SD.begin()) {
|
|
64
|
+
#else
|
|
65
|
+
if (!SD.begin(CS_PIN)) {
|
|
66
|
+
#endif
|
|
67
|
+
rebootEspWithReason("Could not mount SD card, restarting");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
File dir = SD.open("/");
|
|
71
|
+
while (true) {
|
|
72
|
+
File entry = dir.openNextFile();
|
|
73
|
+
if (!entry) { //End of files
|
|
74
|
+
rebootEspWithReason("Could not find valid firmware, please validate");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//This block of code parses the file name to make sure it is valid.
|
|
78
|
+
//It will also get the role and hardware the firmware is targeted at.
|
|
79
|
+
if (!entry.isDirectory()) {
|
|
80
|
+
TSTRING name = entry.name();
|
|
81
|
+
if (name.length() > 1 && name.indexOf('_') != -1 &&
|
|
82
|
+
name.indexOf('_') != name.lastIndexOf('_') &&
|
|
83
|
+
name.indexOf('.') != -1) {
|
|
84
|
+
TSTRING firmware = name.substring(1, name.indexOf('_'));
|
|
85
|
+
TSTRING hardware =
|
|
86
|
+
name.substring(name.indexOf('_') + 1, name.lastIndexOf('_'));
|
|
87
|
+
TSTRING role =
|
|
88
|
+
name.substring(name.lastIndexOf('_') + 1, name.indexOf('.'));
|
|
89
|
+
TSTRING extension =
|
|
90
|
+
name.substring(name.indexOf('.') + 1, name.length());
|
|
91
|
+
if (firmware.equals("firmware") &&
|
|
92
|
+
(hardware.equals("ESP8266") || hardware.equals("ESP32")) &&
|
|
93
|
+
extension.equals("bin")) {
|
|
94
|
+
|
|
95
|
+
Serial.println("OTA FIRMWARE FOUND, NOW BROADCASTING");
|
|
96
|
+
|
|
97
|
+
//This is the important bit for OTA, up to now was just getting the file.
|
|
98
|
+
//If you are using some other way to upload firmware, possibly from
|
|
99
|
+
//mqtt or something, this is what needs to be changed.
|
|
100
|
+
//This function could also be changed to support OTA of multiple files
|
|
101
|
+
//at the same time, potentially through using the pkg.md5 as a key in
|
|
102
|
+
//a map to determine which to send
|
|
103
|
+
mesh.initOTASend(
|
|
104
|
+
[&entry](painlessmesh::plugin::ota::DataRequest pkg,
|
|
105
|
+
char* buffer) {
|
|
106
|
+
|
|
107
|
+
//fill the buffer with the requested data packet from the node.
|
|
108
|
+
entry.seek(OTA_PART_SIZE * pkg.partNo);
|
|
109
|
+
entry.readBytes(buffer, OTA_PART_SIZE);
|
|
110
|
+
|
|
111
|
+
//The buffer can hold OTA_PART_SIZE bytes, but the last packet may
|
|
112
|
+
//not be that long. Return the actual size of the packet.
|
|
113
|
+
return min((unsigned)OTA_PART_SIZE,
|
|
114
|
+
entry.size() - (OTA_PART_SIZE * pkg.partNo));
|
|
115
|
+
},
|
|
116
|
+
OTA_PART_SIZE);
|
|
117
|
+
|
|
118
|
+
//Calculate the MD5 hash of the firmware we are trying to send. This will be used
|
|
119
|
+
//to validate the firmware as well as tell if a node needs this firmware.
|
|
120
|
+
MD5Builder md5;
|
|
121
|
+
md5.begin();
|
|
122
|
+
md5.addStream(entry, entry.size());
|
|
123
|
+
md5.calculate();
|
|
124
|
+
|
|
125
|
+
//Make it known to the network that there is OTA firmware available.
|
|
126
|
+
//This will send a message every minute for an hour letting nodes know
|
|
127
|
+
//that firmware is available.
|
|
128
|
+
//This returns a task that allows you to do things on disable or more,
|
|
129
|
+
//like closing your files or whatever.
|
|
130
|
+
|
|
131
|
+
// Phase 1 Enhancement: To enable compressed OTA (40-60% bandwidth reduction),
|
|
132
|
+
// add two additional parameters: broadcasted and compressed flags:
|
|
133
|
+
// mesh.offerOTA(role, hardware, md5.toString(),
|
|
134
|
+
// ceil(((float)entry.size()) / OTA_PART_SIZE),
|
|
135
|
+
// false, // forced
|
|
136
|
+
// false, // broadcasted (Phase 2 feature)
|
|
137
|
+
// true); // compressed (Phase 1 feature - 40-60% savings!)
|
|
138
|
+
|
|
139
|
+
mesh.offerOTA(role, hardware, md5.toString(),
|
|
140
|
+
ceil(((float)entry.size()) / OTA_PART_SIZE), false);
|
|
141
|
+
|
|
142
|
+
while (true) {
|
|
143
|
+
//This program will not reach loop() so we dont have to worry about
|
|
144
|
+
//file scope.
|
|
145
|
+
mesh.update();
|
|
146
|
+
delay(1000);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
void rebootEspWithReason(String reason) {
|
|
155
|
+
Serial.println(reason);
|
|
156
|
+
delay(1000);
|
|
157
|
+
ESP.restart();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
void loop(){};
|
|
@@ -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@^2.0.0 ; 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@^2.0.0 ; 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,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 = ../../ ; Load the local copy of painlessmesh. For your own example add painlessmesh to the lib_deps
|
|
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 = ../../ ; Load the local copy of painlessmesh. For your own example add painlessmesh to the lib_deps
|
|
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 = ../../ ; Load the local copy of painlessmesh. For your own example add painlessmesh to the lib_deps
|
|
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 = ../../ ; Load the local copy of painlessmesh. For your own example add painlessmesh to the lib_deps
|
|
23
|
+
lib_deps =
|
|
24
|
+
${env.lib_deps} ; Inherit common dependencies
|
|
25
|
+
esp32async/AsyncTCP
|