diff --git a/.github/workflows/pre_release.yml b/.github/workflows/pre_release.yml
index 0f5e8d914..fbb8c27d1 100644
--- a/.github/workflows/pre_release.yml
+++ b/.github/workflows/pre_release.yml
@@ -48,6 +48,10 @@ jobs:
run: |
platformio run -e ci_s3
+ - name: Build E32V2 firmware
+ run: |
+ platformio run -e ci_16M
+
- name: Create a GH Release
id: 'automatic_releases'
uses: 'marvinpinto/action-automatic-releases@latest'
diff --git a/interface/package.json b/interface/package.json
index 9d4fd882e..42bf1ffe8 100644
--- a/interface/package.json
+++ b/interface/package.json
@@ -23,7 +23,7 @@
},
"dependencies": {
"@alova/adapter-xhr": "^1.0.3",
- "@babel/core": "^7.23.9",
+ "@babel/core": "^7.24.0",
"@emotion/react": "^11.11.4",
"@emotion/styled": "^11.11.0",
"@mui/icons-material": "^5.15.11",
diff --git a/interface/src/framework/network/NetworkSettingsForm.tsx b/interface/src/framework/network/NetworkSettingsForm.tsx
index 20387fcf6..cf97b3d03 100644
--- a/interface/src/framework/network/NetworkSettingsForm.tsx
+++ b/interface/src/framework/network/NetworkSettingsForm.tsx
@@ -216,6 +216,8 @@ const WiFiSettingsForm: FC = () => {
+
+
}
@@ -257,10 +259,12 @@ const WiFiSettingsForm: FC = () => {
margin="normal"
/>
)}
- }
- label={LL.NETWORK_ENABLE_IPV6()}
- />
+ {data.enableIPv6 !== undefined && (
+ }
+ label={LL.NETWORK_ENABLE_IPV6()}
+ />
+ )}
}
label={LL.NETWORK_FIXED_IP()}
diff --git a/interface/src/types/network.ts b/interface/src/types/network.ts
index 8740eb9b4..c5d8795df 100644
--- a/interface/src/types/network.ts
+++ b/interface/src/types/network.ts
@@ -42,7 +42,7 @@ export interface NetworkSettings {
password: string;
hostname: string;
static_ip_config: boolean;
- enableIPv6: boolean;
+ enableIPv6?: boolean;
bandwidth20: boolean;
nosleep: boolean;
tx_power: number;
diff --git a/interface/yarn.lock b/interface/yarn.lock
index 2ac16ce8b..7c97a10e6 100644
--- a/interface/yarn.lock
+++ b/interface/yarn.lock
@@ -86,26 +86,26 @@ __metadata:
languageName: node
linkType: hard
-"@babel/core@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/core@npm:7.23.9"
+"@babel/core@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/core@npm:7.24.0"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.23.5"
"@babel/generator": "npm:^7.23.6"
"@babel/helper-compilation-targets": "npm:^7.23.6"
"@babel/helper-module-transforms": "npm:^7.23.3"
- "@babel/helpers": "npm:^7.23.9"
- "@babel/parser": "npm:^7.23.9"
- "@babel/template": "npm:^7.23.9"
- "@babel/traverse": "npm:^7.23.9"
- "@babel/types": "npm:^7.23.9"
+ "@babel/helpers": "npm:^7.24.0"
+ "@babel/parser": "npm:^7.24.0"
+ "@babel/template": "npm:^7.24.0"
+ "@babel/traverse": "npm:^7.24.0"
+ "@babel/types": "npm:^7.24.0"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
- checksum: 10/268cdbb86bef1b8ea5b1300f2f325e56a1740a5051360cb228ffeaa0f80282b6674f3a2b4d6466adb0691183759b88d4c37b4a4f77232c84a49ed771c84cdc27
+ checksum: 10/1e22215cc89e061e0cbfed72f265ad24d363f3e9b24b51e9c4cf3ccb9222260a29a1c1e62edb439cb7e2229a3fce924edd43300500416613236c13fc8d62a947
languageName: node
linkType: hard
@@ -304,14 +304,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/helpers@npm:7.23.9"
+"@babel/helpers@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/helpers@npm:7.24.0"
dependencies:
- "@babel/template": "npm:^7.23.9"
- "@babel/traverse": "npm:^7.23.9"
- "@babel/types": "npm:^7.23.9"
- checksum: 10/dd56daac8bbd7ed174bb00fd185926fd449e591d9a00edaceb7ac6edbdd7a8db57e2cb365b4fafda382201752789ced2f7ae010f667eab0f198a4571cda4d2c5
+ "@babel/template": "npm:^7.24.0"
+ "@babel/traverse": "npm:^7.24.0"
+ "@babel/types": "npm:^7.24.0"
+ checksum: 10/cc82012161b30185c2698da359c7311cf019f0932f8fcb805e985fec9e0053c354f0534dc9961f3170eee579df6724eecd34b0f5ffaa155cdd456af59fbff86e
languageName: node
linkType: hard
@@ -346,12 +346,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/parser@npm:7.23.9"
+"@babel/parser@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/parser@npm:7.24.0"
bin:
parser: ./bin/babel-parser.js
- checksum: 10/727a7a807100f6a26df859e2f009c4ddbd0d3363287b45daa50bd082ccd0d431d0c4d0e610a91f806e04a1918726cd0f5a0592c9b902a815337feed12e1cafd9
+ checksum: 10/3e5ebb903a6f71629a9d0226743e37fe3d961e79911d2698b243637f66c4df7e3e0a42c07838bc0e7cc9fcd585d9be8f4134a145b9459ee4a459420fb0d1360b
languageName: node
linkType: hard
@@ -421,14 +421,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/template@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/template@npm:7.23.9"
+"@babel/template@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/template@npm:7.24.0"
dependencies:
"@babel/code-frame": "npm:^7.23.5"
- "@babel/parser": "npm:^7.23.9"
- "@babel/types": "npm:^7.23.9"
- checksum: 10/1b011ba9354dc2e646561d54b6862e0df51760e6179faadd79be05825b0b6da04911e4e192df943f1766748da3037fd8493615b38707f7cadb0cf0c96601c170
+ "@babel/parser": "npm:^7.24.0"
+ "@babel/types": "npm:^7.24.0"
+ checksum: 10/8c538338c7de8fac8ada691a5a812bdcbd60bd4a4eb5adae2cc9ee19773e8fb1a724312a00af9e1ce49056ffd3c3475e7287b5668cf6360bfb3f8ac827a06ffe
languageName: node
linkType: hard
@@ -450,9 +450,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/traverse@npm:7.23.9"
+"@babel/traverse@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/traverse@npm:7.24.0"
dependencies:
"@babel/code-frame": "npm:^7.23.5"
"@babel/generator": "npm:^7.23.6"
@@ -460,11 +460,11 @@ __metadata:
"@babel/helper-function-name": "npm:^7.23.0"
"@babel/helper-hoist-variables": "npm:^7.22.5"
"@babel/helper-split-export-declaration": "npm:^7.22.6"
- "@babel/parser": "npm:^7.23.9"
- "@babel/types": "npm:^7.23.9"
+ "@babel/parser": "npm:^7.24.0"
+ "@babel/types": "npm:^7.24.0"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
- checksum: 10/e2bb845f7f229feb7c338f7e150f5f1abc5395dcd3a6a47f63a25242ec3ec6b165f04a6df7d4849468547faee34eb3cf52487eb0bd867a7d3c42fec2a648266f
+ checksum: 10/5cc482248ebb79adcbcf021aab4e0e95bafe2a1736ee4b46abe6f88b59848ad73e15e219db8f06c9a33a14c64257e5b47e53876601e998a8c596accb1b7f4996
languageName: node
linkType: hard
@@ -490,14 +490,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.23.9":
- version: 7.23.9
- resolution: "@babel/types@npm:7.23.9"
+"@babel/types@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/types@npm:7.24.0"
dependencies:
"@babel/helper-string-parser": "npm:^7.23.4"
"@babel/helper-validator-identifier": "npm:^7.22.20"
to-fast-properties: "npm:^2.0.0"
- checksum: 10/bed9634e5fd0f9dc63c84cfa83316c4cb617192db9fedfea464fca743affe93736d7bf2ebf418ee8358751a9d388e303af87a0c050cb5d87d5870c1b0154f6cb
+ checksum: 10/a0b4875ce2e132f9daff0d5b27c7f4c4fcc97f2b084bdc5834e92c9d32592778489029e65d99d00c406da612d87b72d7a236c0afccaa1435c028d0c94c9b6da4
languageName: node
linkType: hard
@@ -1848,7 +1848,7 @@ __metadata:
resolution: "EMS-ESP@workspace:."
dependencies:
"@alova/adapter-xhr": "npm:^1.0.3"
- "@babel/core": "npm:^7.23.9"
+ "@babel/core": "npm:^7.24.0"
"@emotion/react": "npm:^11.11.4"
"@emotion/styled": "npm:^11.11.0"
"@mui/icons-material": "npm:^5.15.11"
diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp
index 57d7f5313..7054faaf1 100644
--- a/lib/framework/MqttSettingsService.cpp
+++ b/lib/framework/MqttSettingsService.cpp
@@ -39,7 +39,7 @@ void MqttSettingsService::startClient() {
delete _mqttClient;
_mqttClient = nullptr;
}
-#if CONFIG_IDF_TARGET_ESP32S3
+#ifndef TASMOTA_SDK
if (_state.enableTLS) {
isSecure = true;
_mqttClient = new espMqttClientSecure(espMqttClientTypes::UseInternalTask::NO);
@@ -92,7 +92,7 @@ const char * MqttSettingsService::getClientId() {
}
void MqttSettingsService::setWill(const char * topic) {
-#if CONFIG_IDF_TARGET_ESP32S3
+#ifndef TASMOTA_SDK
if (_state.enableTLS) {
static_cast(_mqttClient)->setWill(topic, 1, true, "offline");
return;
@@ -178,7 +178,7 @@ bool MqttSettingsService::configureMqtt() {
// only connect if WiFi is connected and MQTT is enabled
if (_state.enabled && emsesp::EMSESP::system_.network_connected() && !_state.host.isEmpty()) {
_reconfigureMqtt = false;
-#if CONFIG_IDF_TARGET_ESP32S3
+#ifndef TASMOTA_SDK
if (_state.enableTLS) {
#if EMSESP_DEBUG
emsesp::EMSESP::logger().debug("Start secure MQTT with rootCA");
@@ -208,11 +208,9 @@ bool MqttSettingsService::configureMqtt() {
}
void MqttSettings::read(MqttSettings & settings, JsonObject root) {
-#if CONFIG_IDF_TARGET_ESP32S3
#ifndef TASMOTA_SDK
root["enableTLS"] = settings.enableTLS;
root["rootCA"] = settings.rootCA;
-#endif
#endif
root["enabled"] = settings.enabled;
root["host"] = settings.host;
@@ -247,11 +245,11 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings)
MqttSettings newSettings = {};
bool changed = false;
-#if CONFIG_IDF_TARGET_ESP32S3
#ifndef TASMOTA_SDK
newSettings.enableTLS = root["enableTLS"] | false;
newSettings.rootCA = root["rootCA"] | "";
-#endif
+#else
+ newSettings.enableTLS = false;
#endif
newSettings.enabled = root["enabled"] | FACTORY_MQTT_ENABLED;
newSettings.host = root["host"] | FACTORY_MQTT_HOST;
@@ -368,7 +366,7 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings)
emsesp::EMSESP::mqtt_.set_publish_time_heartbeat(newSettings.publish_time_heartbeat);
}
-#if CONFIG_IDF_TARGET_ESP32S3
+#ifndef TASMOTA_SDK
// strip down to certificate only
newSettings.rootCA.replace("\r", "");
newSettings.rootCA.replace("\n", "");
diff --git a/lib/framework/NetworkSettingsService.cpp b/lib/framework/NetworkSettingsService.cpp
index 90b25d396..eea7b5e43 100644
--- a/lib/framework/NetworkSettingsService.cpp
+++ b/lib/framework/NetworkSettingsService.cpp
@@ -70,6 +70,9 @@ void NetworkSettingsService::manageSTA() {
// Connect or reconnect as required
if ((WiFi.getMode() & WIFI_STA) == 0) {
+#ifdef TASMOTA_SDK
+ WiFi.enableIPv6(_state.enableIPv6);
+#endif
if (_state.staticIPConfig) {
WiFi.config(_state.localIP, _state.gatewayIP, _state.subnetMask, _state.dnsIP1, _state.dnsIP2); // configure for static IP
}
@@ -388,13 +391,15 @@ void NetworkSettings::read(NetworkSettings & settings, JsonObject root) {
root["password"] = settings.password;
root["hostname"] = settings.hostname;
root["static_ip_config"] = settings.staticIPConfig;
- root["enableIPv6"] = settings.enableIPv6;
root["bandwidth20"] = settings.bandwidth20;
root["nosleep"] = settings.nosleep;
root["enableMDNS"] = settings.enableMDNS;
root["enableCORS"] = settings.enableCORS;
root["CORSOrigin"] = settings.CORSOrigin;
root["tx_power"] = settings.tx_power;
+#ifndef TASMOTA_SDK
+ root["enableIPv6"] = settings.enableIPv6;
+#endif
// extended settings
JsonUtils::writeIP(root, "local_ip", settings.localIP);
@@ -416,14 +421,17 @@ StateUpdateResult NetworkSettings::update(JsonObject root, NetworkSettings & set
settings.password = root["password"] | FACTORY_WIFI_PASSWORD;
settings.hostname = root["hostname"] | FACTORY_WIFI_HOSTNAME;
settings.staticIPConfig = root["static_ip_config"] | false;
- settings.enableIPv6 = root["enableIPv6"] | false;
settings.bandwidth20 = root["bandwidth20"] | false;
settings.tx_power = static_cast(root["tx_power"] | 0);
settings.nosleep = root["nosleep"] | false;
settings.enableMDNS = root["enableMDNS"] | true;
settings.enableCORS = root["enableCORS"] | false;
settings.CORSOrigin = root["CORSOrigin"] | "*";
-
+#ifdef TASMOTA_SDK
+ settings.enableIPv6 = true;
+#else
+ settings.enableIPv6 = root["enableIPv6"] | false;
+#endif
// extended settings
JsonUtils::readIP(root, "local_ip", settings.localIP);
JsonUtils::readIP(root, "gateway_ip", settings.gatewayIP);
diff --git a/platformio.ini b/platformio.ini
index a61fb66ef..ac7f8a1a1 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -96,6 +96,16 @@ build_flags =
${espressi32_base.build_flags}
'-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"'
+[env:ci_16M]
+extends = espressi32_base
+extra_scripts = scripts/rename_fw.py
+board = esp32dev
+board_build.partitions = esp32_partition_16M.csv
+board_build.extra_flags = -DBOARD_HAS_PSRAM
+build_flags =
+ ${espressi32_base.build_flags}
+ '-DEMSESP_DEFAULT_BOARD_PROFILE="E32V2"'
+
[env:esp32_4M]
extends = espressi32_base_tasmota
board = esp32dev
@@ -111,7 +121,7 @@ board_upload.flash_size = 4MB
board_build.partitions = esp32_asym_partition_4M.csv
[env:esp32_16M]
-extends = espressi32_base_tasmota
+extends = espressi32_base
board = esp32dev
board_build.extra_flags = -DBOARD_HAS_PSRAM
board_upload.flash_size = 16MB