From 503a709f2810fa75d85f6e4624b440b768d357d5 Mon Sep 17 00:00:00 2001 From: Stargazer2026 <258677952+Stargazer2026@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:59:00 +0100 Subject: [PATCH] Add WiFi on/off build presets and size compare script --- platformio_override.sample.ini | 44 ++++++++++++++++++++++++++++++++++ tools/compare_wifioff_size.sh | 38 +++++++++++++++++++++++++++++ wled00/my_config_sample.h | 1 + wled00/wled.cpp | 17 +++++++++++++ wled00/wled.h | 2 ++ 5 files changed, 102 insertions(+) create mode 100755 tools/compare_wifioff_size.sh diff --git a/platformio_override.sample.ini b/platformio_override.sample.ini index 2fc9aacfb4..ea60f412cb 100644 --- a/platformio_override.sample.ini +++ b/platformio_override.sample.ini @@ -191,6 +191,50 @@ build_flags = ${common.build_flags} ${esp8266.build_flags} ; -D HW_PIN_MISOSPI=9 + +# ------------------------------------------------------------------------------ +# SLWF-09 example: build two variants side-by-side for binary size comparison +# ------------------------------------------------------------------------------ +# Usage: +# 1) copy this file to platformio_override.ini +# 2) set [platformio] default_envs to one or both envs below, OR call pio with -e +# 3) build both and compare with: ./tools/compare_wifioff_size.sh slwf09_eth_wifi_on slwf09_eth_wifi_off + +[env:slwf09_eth_wifi_on] +extends = env:esp32dev_16M +build_flags = + ${env:esp32dev_16M.build_flags} + -D SERVERNAME="\"A1-SLWF-09\"" + -D WLED_BRAND="\"A1-SLWF-09\"" + -D MDNS_NAME="\"A1-SLWF-09\"" + -D BTNPIN=39,34,36,38 + -D BTNTYPE=BTN_TYPE_PUSH,BTN_TYPE_PUSH,BTN_TYPE_PUSH_ACT_HIGH,BTN_TYPE_PUSH + -D ABL_MILLIAMPS_DEFAULT=3000 + -D DEFAULT_LED_PIN=4 + -D DATA_PINS=4 + -D DEFAULT_LED_EFFECT=157 + -D DEFAULT_LED_COUNT=300 + -D DEFAULT_LED_TYPE=TYPE_WS2812_RGB + -D RLYPIN=33 + -D RLYMDE=0 + -D WLED_USE_ETHERNET + -D WLED_ETH_DEFAULT=WLED_ETH_WT32_ETH01 + -D UM_AUDIOREACTIVE_ENABLE + -D I2S_SDPIN=32 + -D I2S_WSPIN=15 + -D I2S_CKPIN=14 + -D SR_SQUELCH=10 + -D SR_GAIN=60 + -D SR_DMTYPE=1 + -D USERMOD_AUTO_SAVE + -D AUTOSAVE_AFTER_SEC=10 + -D AUTOSAVE_PRESET_NUM=100 + -D USERMOD_AUTO_SAVE_ON_BOOT=true + +[env:slwf09_eth_wifi_off] +extends = env:slwf09_eth_wifi_on +build_flags = ${env:slwf09_eth_wifi_on.build_flags} -D WLED_FORCE_WIFI_OFF + # ------------------------------------------------------------------------------ # Optional: build flags for speed, instead of optimising for size. # Example of usage: see [env:esp32S3_PSRAM_HUB75] diff --git a/tools/compare_wifioff_size.sh b/tools/compare_wifioff_size.sh new file mode 100755 index 0000000000..52d6e6cda9 --- /dev/null +++ b/tools/compare_wifioff_size.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -euo pipefail + +ENV_ON="${1:-slwf09_eth_wifi_on}" +ENV_OFF="${2:-slwf09_eth_wifi_off}" + +echo "==> Building $ENV_ON" +pio run -e "$ENV_ON" +echo "==> Building $ENV_OFF" +pio run -e "$ENV_OFF" + +BIN_ON=".pio/build/${ENV_ON}/firmware.bin" +BIN_OFF=".pio/build/${ENV_OFF}/firmware.bin" + +if [[ ! -f "$BIN_ON" || ! -f "$BIN_OFF" ]]; then + echo "Binary missing. Expected:" + echo " $BIN_ON" + echo " $BIN_OFF" + exit 2 +fi + +SIZE_ON=$(stat -c '%s' "$BIN_ON") +SIZE_OFF=$(stat -c '%s' "$BIN_OFF") +DELTA=$((SIZE_OFF - SIZE_ON)) + +echo +echo "Firmware binaries:" +echo " WiFi ON : $BIN_ON" +echo " WiFi OFF: $BIN_OFF" +echo +echo "Sizes (bytes):" +printf ' %-10s %12d\n' "WiFi ON" "$SIZE_ON" +printf ' %-10s %12d\n' "WiFi OFF" "$SIZE_OFF" +printf ' %-10s %12d\n' "Delta" "$DELTA" +echo + +echo "SHA256:" +sha256sum "$BIN_ON" "$BIN_OFF" diff --git a/wled00/my_config_sample.h b/wled00/my_config_sample.h index 000793deb6..16f0abeb76 100644 --- a/wled00/my_config_sample.h +++ b/wled00/my_config_sample.h @@ -22,5 +22,6 @@ #define CLIENT_PASS "Your_Password" */ +//#define WLED_FORCE_WIFI_OFF // Hard disable WiFi radio (WIFI_OFF): no STA and no AP. //#define MAX_LEDS 1500 // Maximum total LEDs. More than 1500 might create a low memory situation on ESP8266. //#define MDNS_NAME "wled" // mDNS hostname, ie: *.local diff --git a/wled00/wled.cpp b/wled00/wled.cpp index d67f784078..72f029ccb2 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -511,8 +511,13 @@ void WLED::setup() WiFi.persistent(false); // on ES8266 using NVM for wifi config has no benefit of faster connection #endif WiFi.onEvent(WiFiEvent); +#ifdef WLED_FORCE_WIFI_OFF + DEBUG_PRINTLN(F("WLED_FORCE_WIFI_OFF: forcing WiFi OFF.")); + WiFi.mode(WIFI_OFF); +#else WiFi.mode(WIFI_STA); // enable scanning findWiFi(true); // start scanning for available WiFi-s +#endif // all GPIOs are allocated at this point serialCanRX = !PinManager::isPinAllocated(hardwareRX); // Serial RX pin (GPIO 3 on ESP32 and ESP8266) @@ -633,6 +638,10 @@ void WLED::beginStrip() void WLED::initAP(bool resetAP) { +#ifdef WLED_FORCE_WIFI_OFF + return; +#endif + if (apBehavior == AP_BEHAVIOR_BUTTON_ONLY && !resetAP) return; @@ -673,6 +682,14 @@ void WLED::initAP(bool resetAP) void WLED::initConnection() { DEBUG_PRINTF_P(PSTR("initConnection() called @ %lus.\n"), millis()/1000); +#ifdef WLED_FORCE_WIFI_OFF + DEBUG_PRINTLN(F("WLED_FORCE_WIFI_OFF active. Skipping WiFi/AP init.")); + lastReconnectAttempt = millis(); + WiFi.disconnect(true); + WiFi.mode(WIFI_OFF); + return; +#endif + #ifdef WLED_ENABLE_WEBSOCKETS ws.onEvent(wsEvent); #endif diff --git a/wled00/wled.h b/wled00/wled.h index 21b340d94c..cfa686eaa1 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -21,6 +21,8 @@ // You are required to disable over-the-air updates: //#define WLED_DISABLE_OTA // saves 14kb +// hard-disable WiFi radio entirely (WIFI_OFF). AP/STA will not start. +//#define WLED_FORCE_WIFI_OFF #ifdef WLED_ENABLE_AOTA #if defined(WLED_DISABLE_OTA) #warning WLED_DISABLE_OTA was defined but it will be ignored due to WLED_ENABLE_AOTA.