Skip to content

[Suggestions] Optimizations for ESP8266#9

Open
FredericMa wants to merge 9 commits into
martijnrenkema:mainfrom
FredericMa:optimizations
Open

[Suggestions] Optimizations for ESP8266#9
FredericMa wants to merge 9 commits into
martijnrenkema:mainfrom
FredericMa:optimizations

Conversation

@FredericMa

@FredericMa FredericMa commented Feb 15, 2026

Copy link
Copy Markdown

Hi,

I did some vibe coding with Claude and this is a PR with the changes it made.

  • It did some memory optimizations like eliminating the NeoPixelBus and replacing it with a self written minimal driver.
  • Removing the ArduinoOTA since it isn't needed. OTA via the web UI of course still works.
  • I've also asked it to check for any bugs and it came up with some improvements.
  • I've also added a uptime sensor to MQTT to monitor for any unexpected reboots.
  • Only read the needed page of the RFID.

I've no ESP32 version available so I can't check if it still works correctly but the esp32dev environment still builds.

This is the memory consumption with these changes:

RAM:   [======    ]  57.6% (used 47184 bytes from 81920 bytes)
Flash: [====      ]  41.5% (used 433697 bytes from 1044464 bytes)

NOTE: I did need to reconfigure the diffuser via the AP after uploading the firmware. Probably because of some memory address changes. I also needed to reconfigure MQTT afterwards.

Feel free to include anything you like in your own codebase.

This is the Copilot generated summary:

This pull request introduces significant optimizations for ESP8266 builds, refactors LED handling on ESP8266 to use a minimal WS2812 driver, and removes OTA handler support from the codebase. It also improves resource management, adds MQTT uptime reporting, and fixes potential issues in button handling and fan RPM calculations.

ESP8266 optimizations and refactoring:

  • platformio.ini, src/logger.h, src/logger.cpp: Optimize build flags for ESP8266, reduces RAM usage (smaller log buffer), and removes unused libraries. Also switches ESP8266 LED handling to a minimal WS2812 driver, replacing NeoPixelBus for improved stability and lower memory usage.

  • data_src/script.js: Adds logic to pause polling when the browser tab is hidden, reducing unnecessary network usage and memory consumption.

OTA handler removal:

  • src/main.cpp: Removes all references and callbacks related to the OTA handler, including initialization, loop, and state change handlers. [1] [2] [3] [4] [5]

MQTT improvements:

  • src/mqtt_handler.cpp: Adds uptime sensor discovery and reporting to MQTT, with a new state machine step and periodic uptime counter updates. Also fixes a race condition in state publishing. [1] [2] [3] [4] [5]

Fan controller and button handler fixes:

  • src/fan_controller.cpp: Fixes potential overflow in RPM calculation by using 64-bit arithmetic, and ensures LED status is updated after fan calibration events. [1] [2] [3] [4] [5]
  • src/button_handler.cpp: Initializes button press times on startup to prevent false long-press detection if a button is held during boot.

General improvements:

  • src/main.cpp: Ensures night mode brightness is always set correctly on the first call after NTP sync.

These changes collectively improve memory usage, stability, and functionality, especially for ESP8266 builds.

@FredericMa

Copy link
Copy Markdown
Author

I've pushed some more changes and alignment to reduce duplication.
The RAM and flash consumption are now as follows:

RAM:   [======    ]  58.4% (used 47872 bytes from 81920 bytes)
Flash: [====      ]  41.5% (used 433681 bytes from 1044464 bytes)

@FredericMa

Copy link
Copy Markdown
Author

It looks like I might have broken other OTA upload methods now that I went over the readme again.
If you want to keep it, you might need to revert those changes. I assumed that using serial connection or uploading via the UI would be enough.

martijnrenkema added a commit that referenced this pull request Feb 18, 2026
Major memory optimization targeting the ESP8266 reboot loop (issue #8):
- Refactor all MQTT discovery/state publishing from String concatenation
  to snprintf with static buffers, eliminating ~70 temporary heap
  allocations per MQTT connect cycle
- Convert RFID scent lookup from 39+ String objects to char array
  comparison with zero heap allocations
- Add heap guards for logger JSON export and update checker
- Limit GitHub API response to 4KB on ESP8266, reject chunked responses

Cherry-picked bug fixes from PR #9 (FredericMa):
- WiFi manager String-to-char[] conversion to reduce fragmentation
- RPM calculation overflow fix with 64-bit intermediate
- Web server action processing race condition fix
- MQTT input validation and race condition fix
- Button press time initialization to prevent false long-press at boot
- ESP8266 RFID minimal page read (page 4 only vs full 45-page dump)
- Browser tab visibility polling pause in web UI

Additional fixes:
- Fix boot path where OTA and NTP were skipped after SDK auto-reconnect
- Fix ESP8266 GPIO16 INPUT_PULLUP (not supported, use INPUT)
- Fix duplicate scent hex code "0426C6" (Black Oudh vs Cotton Blossom)
- Reduce RFID PCD_Init frequency from every 1s to every ~3s
- Enable update checker on ESP8266 with proper heap guards
- Add null-dereference checks for LED and RFID allocations
- Fix CSS :has() selector crash on older browsers
- Night mode start==end edge case handling
martijnrenkema added a commit that referenced this pull request Feb 18, 2026
- Add v1.9.5 changelog with heap fragmentation fixes
- Credit @FredericMa for ESP8266 optimization contributions (PR #9)
- Update version badge to 1.9.5
- Update ESP8266 stability notice
- Trim older changelog entries for readability
- Rebuild gzipped script.js with :has() try-catch fix
@martijnrenkema

Copy link
Copy Markdown
Owner

Thanks for the optimization suggestions @FredericMa! Several of your ideas have been incorporated into v1.9.5, including the WiFi manager String-to-char conversion, fan RPM overflow fix, and web server race condition fix. The MQTT handler has also been fully rewritten with snprintf and static buffers following the same approach.

Release: https://github.com/martijnrenkema/Rituals-diffuser/releases/tag/v1.9.5

@FredericMa

Copy link
Copy Markdown
Author

Hi Martijn,
I gave the new version a shot but it crashes when I try to connect to the AP.
Have you considered using the minimal LED driver that is in this branch? It also saved a significant amount of RAM.
Maybe you can also consider disabling the Arduino OTA functionality for ESP8266 users? I think it is acceptable to only allow flashing via serial or OTA via the web UI.

This is the log:
crashlog.log

@FredericMa

Copy link
Copy Markdown
Author

Hi @martijnrenkema,
Did you have any chance to check the crash log? There are still some possible optimizations in this PR you can experiment with if you want.

@martijnrenkema

Copy link
Copy Markdown
Owner

Hi @FredericMa, good suggestion on disabling ArduinoOTA for ESP8266 - this is now implemented in v1.9.7! The ArduinoOTA background UDP service has been removed on ESP8266 to free up RAM. OTA updates still work via the web-based Safe Update mode. ESP32 and ESP32-C3 keep ArduinoOTA since they have plenty of RAM.

Regarding the minimal LED driver: I appreciate the idea and the RAM savings it brings, but I'm a bit cautious about switching to a custom implementation since NeoPixelBus is well-tested across many ESP8266 setups and edge cases. For now I'd rather stick with the proven library to keep things stable, especially since ESP8266 stability is already a challenge.

Thanks again for all your contributions and ideas - really appreciate you helping improve this project!

Release: https://github.com/martijnrenkema/Rituals-diffuser/releases/tag/v1.9.7

@FredericMa

Copy link
Copy Markdown
Author

Hi Martjin,

I've tested the latest version but it still crashes the ESP8266.
This is the crash log:

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Unhandled C++ exception: OOM

>>>stack>>>

ctx: sys
sp: 3fffeba0 end: 3fffffb0 offset: 0010
3fffebb0:  00000000 00000003 00000060 4022a078  
3fffebc0:  00000005 00000001 3fffec6c 4021532b  
3fffebd0:  3fffb9c0 3fffb97c 00000005 40102784  
3fffebe0:  3ffef495 40105a1b 3fff2e80 40228efd  
3fffebf0:  00000000 3fff2e80 3fff9e60 3fffecb0  
3fffec00:  00007fff 3fff7f64 3fff37b4 00000000  
3fffec10:  00000000 0000002f 00000000 3fff89b0  
3fffec20:  3fffb164 00000010 00000020 00000001  
3fffec30:  3fffbad4 3fff8998 3fffeca0 40226911  
3fffec40:  00000000 00004908 00000020 40100e30  
3fffec50:  3ffefd40 00000004 00000008 3fff89b0  
3fffec60:  3fffb164 00000001 3fffeccc 4022920e  
3fffec70:  3fffbad4 00000001 00000000 40228efd  
3fffec80:  3fff896c 3fffbe10 3fffeca0 40226963  
3fffec90:  3fff896c 3fff896c 3fffed1c 40219fcb  
3fffeca0:  000041d0 0000083a 3ffe8978 40100aae  
3fffecb0:  3fffbcfc 00000010 00000020 3fff89b0  
3fffecc0:  3fffbcfc 00000020 3fffbad4 3fffbad4  
3fffecd0:  000f000f 80000000 3fffed1c 40228d75  
3fffece0:  3fffbcfc 3fff8998 3ffe90fd 4022900c  
3fffecf0:  3fffbcfc 3fff896c 3fffed1c 3fff89b0  
3fffed00:  3fffbcfc 3fff896c 00000000 4021a1b4  
3fffed10:  00000000 000c000f 00000000 3fffb164  
3fffed20:  000c000f 80000000 3fffed80 00000000  
3fffed30:  00000000 00000020 3fffb164 40100dfc  
3fffed40:  3fffbad4 3fffbd30 3fffbd30 00000002  
3fffed50:  00000001 3fff896c 3fffbcfc 4021a254  
3fffed60:  3fffb18c 3fffbd30 3fffbd30 4022909a  
3fffed70:  3fff806c 3fffbcfc 3fff7cbc 4021ebd8  
3fffed80:  00000000 000d000f 00000000 00000000  
3fffed90:  00000000 3fffbf6c 3fffbcfc 4021bf80  
3fffeda0:  00000000 00000001 3fffbd30 4022920e  
3fffedb0:  00000000 3fffbf6c 00000000 40100374  
3fffedc0:  3fffbf6c 3fff63e8 3fffae90 00000002  
3fffedd0:  00000002 3fffbf6c 3fffbcfc 4021c0b2  
3fffede0:  00000014 3fffae8c 000000ff 00000000  
3fffedf0:  00000001 00000020 3fffb00c 40100dfc  
3fffee00:  3fffbd30 00000000 9e353f7c 01a833b6  
3fffee10:  3fff63e8 3fffbcfc 3fffbb2c 3fffbe44  
3fffee20:  3fffee70 3fffbb2c 3fffaf4c 4022d304  
3fffee30:  000000e4 3fffbe8a 3fffbb2c 3fffbcfc  
3fffee40:  00000000 0000083b 3ffe8978 40100aae  
3fffee50:  3fff0000 3fff806c 3fffaf4c 00000000  
3fffee60:  3fffbe44 3fffaf4c 3fffbb2c 4022d364  
3fffee70:  3fffbce8 3fffbcdc 00000000 3fff63e8  
3fffee80:  3fff6610 3fff63e8 3fffbe44 3fff6658  
3fffee90:  3fffaf4c 3fff665c 3fff665d 402631e5  
3fffeea0:  402644a0 402a1b48 00000020 40100e30  
3fffeeb0:  00000018 00000000 00016f37 4025fc4d  
3fffeec0:  00000000 00000016 3ffe8978 3fff63e8  
3fffeed0:  3fff6610 3fffbe62 3fffbe44 40268149  
3fffeee0:  00000014 3fff63e8 00000000 4025fc4d  
3fffeef0:  00000000 00000838 3ffe8978 40100aae  
3fffef00:  40297e58 3fffbac4 3fff7a3c 3fff7bd4  
3fffef10:  3fff63e8 00000008 3fffbe44 4025f30d  
3fffef20:  3fffdc90 3fff7a3c 3fffbac4 4025f120  
3fffef30:  4029b029 3fff7a3c 3fffbac4 4029b03b  
3fffef40:  3fffbe54 3fffbe44 00000000 3fffdcb0  
3fffef50:  3fff4680 00000000 3fffbac4 4029c35f  
3fffef60:  40000f49 3fffdab0 3fffdab0 40000f49  
3fffef70:  40000e19 000b81bd bff00000 0000bfff  
3fffef80:  00000005 aa55aa55 00000049 40105b1d  
3fffef90:  40105b23 bff00000 0000bfff f8b1c24d  
3fffefa0:  4010000d bff00000 000b81bd 401000ab  
3fffefb0:  4028c9cc 3fffef4c 4028c97d 3fffff48  
3fffefc0:  3fffffd0 00000000 00000000 feefeffe  
3fffefd0:  feefeffe feefeffe feefeffe feefeffe  
3fffefe0:  feefeffe feefeffe feefeffe feefeffe  
3fffeff0:  feefeffe feefeffe feefeffe feefeffe  
3ffff000:  feefeffe feefeffe feefeffe feefeffe  
3ffff010:  feefeffe feefeffe feefeffe feefeffe  
3ffff020:  feefeffe feefeffe feefeffe feefeffe  
3ffff030:  feefeffe feefeffe feefeffe feefeffe  
3ffff040:  feefeffe feefeffe feefeffe feefeffe  
3ffff050:  feefeffe feefeffe feefeffe feefeffe  
3ffff060:  feefeffe feefeffe feefeffe feefeffe  
3ffff070:  feefeffe feefeffe feefeffe feefeffe  
3ffff080:  feefeffe feefeffe feefeffe feefeffe  
3ffff090:  feefeffe feefeffe feefeffe feefeffe  
3ffff0a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff0f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff100:  feefeffe feefeffe feefeffe feefeffe  
3ffff110:  feefeffe feefeffe feefeffe feefeffe  
3ffff120:  feefeffe feefeffe feefeffe feefeffe  
3ffff130:  feefeffe feefeffe feefeffe feefeffe  
3ffff140:  feefeffe feefeffe feefeffe feefeffe  
3ffff150:  feefeffe feefeffe feefeffe feefeffe  
3ffff160:  feefeffe feefeffe feefeffe feefeffe  
3ffff170:  feefeffe feefeffe feefeffe feefeffe  
3ffff180:  feefeffe feefeffe feefeffe feefeffe  
3ffff190:  feefeffe feefeffe feefeffe feefeffe  
3ffff1a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff1f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff200:  feefeffe feefeffe feefeffe feefeffe  
3ffff210:  feefeffe feefeffe feefeffe feefeffe  
3ffff220:  feefeffe feefeffe feefeffe feefeffe  
3ffff230:  feefeffe feefeffe feefeffe feefeffe  
3ffff240:  feefeffe feefeffe feefeffe feefeffe  
3ffff250:  feefeffe feefeffe feefeffe feefeffe  
3ffff260:  feefeffe feefeffe feefeffe feefeffe  
3ffff270:  feefeffe feefeffe feefeffe feefeffe  
3ffff280:  feefeffe feefeffe feefeffe feefeffe  
3ffff290:  feefeffe feefeffe feefeffe feefeffe  
3ffff2a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff2f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff300:  feefeffe feefeffe feefeffe feefeffe  
3ffff310:  feefeffe feefeffe feefeffe feefeffe  
3ffff320:  feefeffe feefeffe feefeffe feefeffe  
3ffff330:  feefeffe feefeffe feefeffe feefeffe  
3ffff340:  feefeffe feefeffe feefeffe feefeffe  
3ffff350:  feefeffe feefeffe feefeffe feefeffe  
3ffff360:  feefeffe feefeffe feefeffe feefeffe  
3ffff370:  feefeffe feefeffe feefeffe feefeffe  
3ffff380:  feefeffe feefeffe feefeffe feefeffe  
3ffff390:  feefeffe feefeffe feefeffe feefeffe  
3ffff3a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff3f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff400:  feefeffe feefeffe feefeffe feefeffe  
3ffff410:  feefeffe feefeffe feefeffe feefeffe  
3ffff420:  feefeffe feefeffe feefeffe feefeffe  
3ffff430:  feefeffe feefeffe feefeffe feefeffe  
3ffff440:  feefeffe feefeffe feefeffe feefeffe  
3ffff450:  feefeffe feefeffe feefeffe feefeffe  
3ffff460:  feefeffe feefeffe feefeffe feefeffe  
3ffff470:  feefeffe feefeffe feefeffe feefeffe  
3ffff480:  feefeffe feefeffe feefeffe feefeffe  
3ffff490:  feefeffe feefeffe feefeffe feefeffe  
3ffff4a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff4f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff500:  feefeffe feefeffe feefeffe feefeffe  
3ffff510:  feefeffe feefeffe feefeffe feefeffe  
3ffff520:  feefeffe feefeffe feefeffe feefeffe  
3ffff530:  feefeffe feefeffe feefeffe feefeffe  
3ffff540:  feefeffe feefeffe feefeffe feefeffe  
3ffff550:  feefeffe feefeffe feefeffe feefeffe  
3ffff560:  feefeffe feefeffe feefeffe feefeffe  
3ffff570:  feefeffe feefeffe feefeffe feefeffe  
3ffff580:  feefeffe feefeffe feefeffe feefeffe  
3ffff590:  feefeffe feefeffe feefeffe feefeffe  
3ffff5a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff5f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff600:  feefeffe feefeffe feefeffe feefeffe  
3ffff610:  feefeffe feefeffe feefeffe feefeffe  
3ffff620:  feefeffe feefeffe feefeffe feefeffe  
3ffff630:  feefeffe feefeffe feefeffe feefeffe  
3ffff640:  feefeffe feefeffe feefeffe feefeffe  
3ffff650:  feefeffe feefeffe feefeffe feefeffe  
3ffff660:  feefeffe feefeffe feefeffe feefeffe  
3ffff670:  feefeffe feefeffe feefeffe feefeffe  
3ffff680:  feefeffe feefeffe feefeffe feefeffe  
3ffff690:  feefeffe feefeffe feefeffe feefeffe  
3ffff6a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff6f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff700:  feefeffe feefeffe feefeffe feefeffe  
3ffff710:  feefeffe feefeffe feefeffe feefeffe  
3ffff720:  feefeffe feefeffe feefeffe feefeffe  
3ffff730:  feefeffe feefeffe feefeffe feefeffe  
3ffff740:  feefeffe feefeffe feefeffe feefeffe  
3ffff750:  feefeffe feefeffe feefeffe feefeffe  
3ffff760:  feefeffe feefeffe feefeffe feefeffe  
3ffff770:  feefeffe feefeffe feefeffe feefeffe  
3ffff780:  feefeffe feefeffe feefeffe feefeffe  
3ffff790:  feefeffe feefeffe feefeffe feefeffe  
3ffff7a0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7b0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7c0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7d0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7e0:  feefeffe feefeffe feefeffe feefeffe  
3ffff7f0:  feefeffe feefeffe feefeffe feefeffe  
3ffff800:  00000005 00000000 00000020 40100374  
3ffff810:  feefeffe feefeffe 00000005 40102784  
3ffff820:  3ffef495 40105a1b 3fff2ef8 feefeffe  
3ffff830:  4010330f 3fff2ef8 feefeffe feefeffe  
3ffff840:  3ffef495 40105a1b 3fff2e80 401034ec  
3ffff850:  4010330f 3fff2e80 00000000 feefeffe  
3ffff860:  fffffff7 001af55e 3fff37b4 401034ec  
3ffff870:  3ffefd4c 00000000 00000000 00000001  
3ffff880:  fffffff7 001af55e 401039a6 00000100  
3ffff890:  3ffefd4c 7fffffff 53000000 00000001  
3ffff8a0:  00000001 00000040 4000050c 3fffc278  
3ffff8b0:  3ffefd4c 3fffc200 00000022 001af55e  
3ffff8c0:  4000b570 2c9f0300 4000050c 3fffc278  
3ffff8d0:  00000000 00000000 00000000 00000000  
3ffff8e0:  00000000 00000000 00000000 00000000  
3ffff8f0:  00000000 00000000 00000000 00000000  
3ffff900:  00000000 00000000 00000000 00000000  
3ffff910:  d9d42642 d5aa3fe7 0afb99a7 e7d1b36e  
3ffff920:  f08f7451 465ccbc7 b0885c03 b2ab5036  
3ffff930:  24aa4b0e 77c38de9 3e3973f7 d006892b  
3ffff940:  4000b5f9 00000008 00000038 3ffffa20  
3ffff950:  00000008 3ffffa20 44c58abe cda0e9f8  
3ffff960:  9e26de16 4f136dab 592da5ce 3eb79168  
3ffff970:  d35a3060 ce3c01fb ad661d27 98a8e768  
3ffff980:  03945925 160a7c07 d16d28f8 d12bf45c  
3ffff990:  f66d2658 220e0289 c0c86a01 91fd7e99  
3ffff9a0:  84d8ec7f 70738dcf 789b7d18 250241fd  
3ffff9b0:  095c7bf3 a075d6b3 c37717e9 7a1b8b3e  
3ffff9c0:  daa2ce0a d1cf83dd d9bb6a23 baa6a91d  
3ffff9d0:  4000b62e 69b8c523 c8980102 58d304ab  
3ffff9e0:  4000b6c4 3ffffa20 3ffffbb0 ffffffff  
3ffff9f0:  4000b72e 3ffffa00 00000008 ccd0ebb7  
3ffffa00:  00000000 00000000 4000a333 3ffffb28  
3ffffa10:  3ffffbb0 3ffffb08 3fff8724 41c701fa  
3ffffa20:  00000000 00000000 00000000 00000000  
3ffffa30:  00000000 00000000 00000000 00000000  
3ffffa40:  00000000 00000000 00000000 00000000  
3ffffa50:  00000000 00000000 00000000 00000000  
3ffffa60:  00000000 00000000 00000000 00000000  
3ffffa70:  00000000 00000000 00000000 3ffffb00  
3ffffa80:  4000ba18 3ffffb00 00000003 00000020  
3ffffa90:  3ffffbb0 00000000 00000000 00000000  
3ffffaa0:  00000000 00000000 00000000 00000000  
3ffffab0:  00000000 00000000 00000000 00000000  
3ffffac0:  abd1539d 7f0e5695 49491605 cfd3318a  
3ffffad0:  5ecac84d 26444027 c46482a7 c1185f4b  
3ffffae0:  00000000 400042db 5c5c5c5c 5c5c5c5c  
3ffffaf0:  40004b31 3fff82ac 00000040 001ea800  
3ffffb00:  40106e70 3fff82ac 00000040 001ea100  
3ffffb10:  00000000 400042db 00000040 001ea800  
3ffffb20:  40004b31 3fff82ac 00000040 001ea840  
3ffffb30:  40106e70 5c5c5c5c 3fff82ac 40226735  
3ffffb40:  00000000 400042db 00000040 001ea840  
3ffffb50:  00000000 00000000 0000001f 40100374  
3ffffb60:  40106e70 400042db 3fffc228 401062b5  
3ffffb70:  4000050c 00000000 00000040 001ea880  
3ffffb80:  402875d6 00000030 00000008 ffffffff  
3ffffb90:  4027dc7b 3fffa5b4 00000000 00000000  
3ffffba0:  00000000 00000000 00000033 3fffafbc  
3ffffbb0:  00000033 00000000 00000020 3fffa5b4  
3ffffbc0:  3fffa42c 00000001 3fff8b2c 00000030  
3ffffbd0:  40004b31 3fff82ac 00000040 001f6500  
3ffffbe0:  00000005 00000000 00000020 40100374  
3ffffbf0:  00000000 00000000 00000005 40102784  
3ffffc00:  3ffef495 40105a1b 3fff2e58 40102784  
3ffffc10:  4010330f 3fff2e58 3fff7c7c 40100374  
3ffffc20:  00007fff 0539d1b3 3fff37b4 401034ec  
3ffffc30:  00000002 00000000 00000020 40100374  
3ffffc40:  00000000 00000000 00000020 40100374  
3ffffc50:  00000005 00000000 00000000 40102784  
3ffffc60:  3ffef490 40105a03 3fff7c7c 40102784  
3ffffc70:  0000000c 00000000 00000020 40100374  
3ffffc80:  4010504f 3fff2ed0 0000000c 40102784  
3ffffc90:  3ffef49c 401020ce 04000000 00040000  
3ffffca0:  00000001 00000004 40100541 00000000  
3ffffcb0:  00000000 00000000 00000000 401036ae  
3ffffcc0:  40103725 00000000 0000001f 40100374  
3ffffcd0:  40104b17 0000007f 3fffc228 401062b5  
3ffffce0:  4000050c 2c9f0300 4000050c 3fffc278  
3ffffcf0:  401036c8 3fffc200 00000022 ffffffff  
3ffffd00:  40100541 00000030 00000020 ffffffff  
3ffffd10:  40213778 00000000 00000001 60000140  
3ffffd20:  60000120 00000000 00000000 fffffffe  
3ffffd30:  40101678 3fffc6fc 00000000 00000000  
3ffffd40:  3fffa344 00000044 00016e1c 00000030  
3ffffd50:  00000000 00000000 00000000 fffffffe  
3ffffd60:  4021319c 3fffc6fc 00000000 3fff5cb4  
3ffffd70:  3fffa344 00000008 00016a4d 00000030  
3ffffd80:  ffffffff 3fffc6fc 00000001 3fffa344  
3ffffd90:  3fffaf7c 3fffff10 000156bc 00000030  
3ffffda0:  40104913 00040000 00000000 3fffaf7c  
3ffffdb0:  3fffaf7c 3fffa3b0 3fff63e8 00000001  
3ffffdc0:  3fffa344 3fff5cb4 3fff5cb4 0000001a  
3ffffdd0:  00000087 3fffa344 3fff5cb4 00000001  
3ffffde0:  3fffa344 3fff5cb4 3fff5cb4 0000001a  
3ffffdf0:  00000087 3fffa344 3fff5cb4 00016e35  
3ffffe00:  00000008 3fffa344 3fff5cb4 40213420  
3ffffe10:  003d0900 00000001 00000000 40100554  
3ffffe20:  00000000 3fffa344 3fff5cb4 40213778  
3ffffe30:  3fffff10 00010001 4022a3da 00016e35  
3ffffe40:  3fffff10 3fffff2c 3fffa344 40213be7  
3ffffe50:  00000001 00000007 00000000 0000001c  
3ffffe60:  00000030 00000000 00000000 3ffffee0  
3ffffe70:  00000001 00000007 00000000 40100554  
3ffffe80:  3ffffee2 3fffa344 3fff5cb4 00016df8  
3ffffe90:  3fffff10 3fffa344 3fffff2c 40213d10  
3ffffea0:  3fffff2c 3ffffed0 00000000 00000000  
3ffffeb0:  3fffff10 3fffa344 3fffff2c 40214058  
3ffffec0:  00000000 00000000 000007d0 00016df8  
3ffffed0:  00000000 00016eb8 43126e97 01a8050d  
3ffffee0:  00000000 00016eb8 3db22d0e 3fff5f80  
3ffffef0:  3fffdad0 3fff4b20 3fff5674 402097c1  
3fffff00:  3fff554c 3fff5824 3fff556c 40208a1d  
3fffff10:  3fff8567 01bf4988 0000001c 4026018e  
3fffff20:  00000e0c 00000031 00000000 3fff8544  
3fffff30:  401063f9 01bf93bb 3fff5f58 00000000  
3fffff40:  3fff4660 3fff5f58 3ffe8974 3fff5f58  
3fffff50:  00016eb8 00000014 4022a328 3fffefb0  
3fffff60:  3fff5f58 00016eb8 00000014 4022a47d  
3fffff70:  00016eb8 00000014 00016eb8 4022a4f3  
3fffff80:  00000000 00016eb8 46a7ef9d 01a80511  
3fffff90:  3fffdad0 3fff5f80 4022a3da 3fff5f80  
3fffffa0:  3fffdad0 00016eb8 00000014 4022ab44  
<<<stack<<<

last failed alloc call: 4021532B(96)

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

I think you have now implemented almost all changes except the LED driver in your repo so I don't know what you can do to further save RAM. I guess the only solution is to disable the RFID on the ESP8266.
Personally, if the only choice is to either have "RFID with minimal led driver" or "no RFID with NeoPixelBus", I would go for RFID with minimal LED driver. The UI will be the same for both ESP32 and ESP8266 users except for the upgrade logic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants