PICO board updates + fix for array overflow

platformio.ini: buildenv updates for PICO board (reduced upload speed, added "V4" environment)
wled.h: allow wifi sleep for PICO board (to reduce heat output)
xml.cpp: increase buffer arrays to avoid array bounds violations (PM_NO_PIN = 255 i.e. 4 bytes per element needed)
This commit is contained in:
Frank
2023-02-22 17:22:44 +01:00
parent ea9f62c57a
commit f38196f4c9
3 changed files with 49 additions and 15 deletions

View File

@@ -48,8 +48,6 @@ default_envs =
esp32_16MB_all
esp8266_4MB_min
esp8266_4MB_max
esp32_4MB_PSRAM_max
esp32S3_8MB_max
wemos_shield_esp32_4MB_max
wemos_shield_esp32_4MB_ICS4343x_max
wemos_shield_esp32_4MB_SPM1423_max
@@ -60,7 +58,12 @@ default_envs =
wemos_shield_esp32_16MB_SPM1423_all
wemos_shield_esp32_16MB_LineIn_max
esp32_pico_4MB_max
esp32s2_tinyUF2_PSRAM_max
esp32_4MB_PSRAM_max
esp32S3_8MB_max
esp32s2_tinyUF2_PSRAM_max ;; experimental - only for adafruit -S2 boards with UF2 bootloader !!!
esp32c3dev_4MB_max ;; experimental
esp32_4MB_V4_min ;; experimental
esp32_16MB_V4_max ;; experimental
esp8266pro_16MB_min
esp01_1MB_min
@@ -1404,6 +1407,9 @@ board_build.partitions = ${Board_ESP32_16MB.board_build.partitions}
[env:esp32_pico_4MB_max]
extends = esp32_4MB_max_base
board = pico32
board_build.flash_mode = dout ;; (dout = dual out; more compatible than qio = quad i/o)
upload_speed = 256000 ;; or 115200 ;; or 460800 ; or 921600 (slower speeds are better when flashing without a soldered connection)
build_flags = ${esp32_4MB_max_base.build_flags}
-D WLED_RELEASE_NAME=esp32_pico_4MB_max
-D WLED_DISABLE_BROWNOUT_DET
@@ -1412,12 +1418,10 @@ build_flags = ${esp32_4MB_max_base.build_flags}
; -D WLED_DEBUG
; -D SR_DEBUG
-D LEDPIN=2
-D RLYPIN=-1
-D BTNPIN=-1
-D IRPIN=-1
-D RLYPIN=-1 -D BTNPIN=-1 -D IRPIN=-1
-D HW_PIN_SCL=22 -D HW_PIN_SDA=21
-D SR_DMTYPE=1 -D I2S_SDPIN=25 -D I2S_WSPIN=15 -D I2S_CKPIN=14
-D SR_SQUELCH=5 -D SR_GAIN=30 -D SR_FREQ_PROF=5 ; ICS-43434 specific
-D SR_SQUELCH=5 -D SR_GAIN=30 -D SR_FREQ_PROF=5 ; ICS-4343x specific
; -D MCLK_PIN=0
-D SR_ENABLE_DEFAULT ;; enable at first start - no need to manually set "enable", then reboot
; -D WLED_USE_MY_CONFIG
@@ -1427,5 +1431,35 @@ build_flags = ${esp32_4MB_max_base.build_flags}
; -D WLED_DISABLE_MQTT
; -D WLED_DISABLE_INFRARED
; -D WLED_ENABLE_DMX
; RAM: [== ] 24.4% (used 79804 bytes from 327680 bytes)
; Flash: [========= ] 88.6% (used 1394241 bytes from 1572864 bytes)
; RAM: [== ] 24.4% (used 79812 bytes from 327680 bytes)
; Flash: [========= ] 90.4% (used 1422581 bytes from 1572864 bytes)
;; experimental
;; PICO environment with ESP-IDF v4.4.1 / arduino-esp32 v2.0.4
[env:esp32_pico_4MB_V4_min]
extends = esp32_4MB_V4_min_base
board = pico32
;platform = espressif32@~5.2.0 ;; alternative platform, might help in case you experience bootloops due to corrupted flash filesystem
;platform_packages =
upload_speed = 256000 ;; or 115200 ;; or 460800 ; or 921600 (slower speeds are better when flashing without a soldered connection)
build_flags = ${esp32_4MB_V4_min_base.build_flags}
-D ARDUINO_USB_CDC_ON_BOOT=0 ; needed for arduino-esp32 >=2.0.4; avoids errors on startup
-D WLED_RELEASE_NAME=esp32_pico_4MB_V4_min
-D WLED_DISABLE_BROWNOUT_DET
-D SERVERNAME='"WLED-pico32-V4"'
-D WLED_WATCHDOG_TIMEOUT=0
; -D WLED_WATCHDOG_TIMEOUT=60
; -D WLED_DEBUG
; -D SR_DEBUG
-D LEDPIN=2
-D RLYPIN=-1 -D BTNPIN=-1 -D IRPIN=-1
-D HW_PIN_SCL=22 -D HW_PIN_SDA=21
-D SR_DMTYPE=1 -D I2S_SDPIN=25 -D I2S_WSPIN=15 -D I2S_CKPIN=14
-D SR_SQUELCH=5 -D SR_GAIN=30 -D SR_FREQ_PROF=5 ; ICS-4343x specific
; -D MCLK_PIN=0
-D SR_ENABLE_DEFAULT ;; enable audioreactive at first start - no need to manually set "enable", then reboot
; -D WLED_USE_MY_CONFIG
; RAM: [== ] 24.5% (used 80436 bytes from 327680 bytes)
; Flash: [========= ] 93.9% (used 1476341 bytes from 1572864 bytes)

View File

@@ -290,7 +290,7 @@ WLED_GLOBAL byte apBehavior _INIT(AP_BEHAVIOR_BOOT_NO_CONN); // access poi
WLED_GLOBAL IPAddress staticIP _INIT_N((( 0, 0, 0, 0))); // static IP of ESP
WLED_GLOBAL IPAddress staticGateway _INIT_N((( 0, 0, 0, 0))); // gateway (router) IP
WLED_GLOBAL IPAddress staticSubnet _INIT_N(((255, 255, 255, 0))); // most common subnet in home networks
#ifdef ARDUINO_ARCH_ESP32
#if defined(ARDUINO_ARCH_ESP32) && !defined(ARDUINO_ESP32_PICO)
WLED_GLOBAL bool noWifiSleep _INIT(true); // disabling modem sleep modes will increase heat output and power usage, but may help with connection issues
#else
WLED_GLOBAL bool noWifiSleep _INIT(false);

View File

@@ -274,16 +274,16 @@ void appendGPIOinfo() {
#endif
oappend(SET_F(";"));
char dt_pins[48]; // fix warning: output 45 bytes into a destination of size 30
char dt_pins[64] = { '\0' }; // fix warning: output 45 bytes into a destination of size 30
#if defined(ESP8266) && !defined(ARDUINO_ESP8266_ESP01)
sprintf(dt_pins, "d.dt_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", D0, D1, D2, D3, D4, D5, D6, D7, D8, hardwareRX, hardwareTX);
snprintf(dt_pins, 64, "d.dt_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", D0, D1, D2, D3, D4, D5, D6, D7, D8, hardwareRX, hardwareTX);
#else
sprintf(dt_pins, "d.dt_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, hardwareRX, hardwareTX);
snprintf(dt_pins, 64, "d.dt_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, PM_NO_PIN, hardwareRX, hardwareTX);
#endif
oappend(dt_pins);
char a_pins[48]; // fix warning: output 45 bytes into a destination of size 30
sprintf(a_pins, "d.a_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", pinManager.getADCPin(PM_ADC1, 0), pinManager.getADCPin(PM_ADC1, 1), pinManager.getADCPin(PM_ADC1, 2), pinManager.getADCPin(PM_ADC1, 3), pinManager.getADCPin(PM_ADC1, 4), pinManager.getADCPin(PM_ADC1, 5), pinManager.getADCPin(PM_ADC1, 6), pinManager.getADCPin(PM_ADC1, 7), pinManager.getADCPin(PM_ADC1, 8), pinManager.getADCPin(PM_ADC1, 9), pinManager.getADCPin(PM_ADC1, 10));
char a_pins[64] = { '\0' }; // fix warning: output 45 bytes into a destination of size 30
snprintf(a_pins, 64, "d.a_pins=[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d];", pinManager.getADCPin(PM_ADC1, 0), pinManager.getADCPin(PM_ADC1, 1), pinManager.getADCPin(PM_ADC1, 2), pinManager.getADCPin(PM_ADC1, 3), pinManager.getADCPin(PM_ADC1, 4), pinManager.getADCPin(PM_ADC1, 5), pinManager.getADCPin(PM_ADC1, 6), pinManager.getADCPin(PM_ADC1, 7), pinManager.getADCPin(PM_ADC1, 8), pinManager.getADCPin(PM_ADC1, 9), pinManager.getADCPin(PM_ADC1, 10));
oappend(a_pins);
}