Getting VA5 to build meant two separate fights with two libraries, and both failed in ways that pointed somewhere other than the cause.
TFT_eSPI, on the display v2.5.43 crashed on tft.init() with StoreProhibited — inside a global constructor, before setup() was entered at all. I re-checked every pin, swapped the display, tried both SPI ports. It crashed regardless of port, and when it didn't crash outright it threw a heap assertion out of fragmented internal RAM.
That fragmentation is the clue. On an ESP32-S3 the WiFi and TLS stack has already claimed a large slice of internal SRAM before the display driver initialises, and TFT_eSPI's allocation pattern doesn't survive it. I switched to Arduino_GFX_Library by moononournation — same pins, same hardware, no changes beyond the constructor. Worked first try, stable since.
qrcode.h, on the info screen In v0.7 the Arduino IDE build started failing with 'QRCode' was not declared in this scope, while PlatformIO built the same source fine. arduino-esp32 3.x ships its own qrcode.h, which shadowed the ricmoo/QRCode library I had installed. The error named a symbol, not the collision.
Fixed by deleting the dependency instead of fighting it — the board package already bundles an esp_qrcode API that does the job. One less library to install, and the Arduino IDE build now works out of the box.
Worth naming the pattern: neither of these was a logic bug. One was an allocation-order problem and one was a header collision, and both produced errors that pointed at the wrong file. When an embedded error makes no sense in the file it names, suspect the environment before the code.
This is the very first commit that had the GFX fix. Still in my private repo:

Full source: https://github.com/iollama/Voice-Assistant-5
Udi Tirosh
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.