Conversation

lucasssvaz

Description of Change

This pull request introduces support (ExtAdv still not implemented) for the NimBLE Bluetooth stack alongside the existing Bluedroid stack in the ESP32 BLE library. It includes updates to ensure compatibility with both stacks, adds new functionality, and improves documentation. Below is a summary of the most important changes grouped by theme.

Compatibility with NimBLE and Bluedroid

  • Updated conditional compilation macros in cores/esp32/esp32-hal-bt.c to support both CONFIG_BLUEDROID_ENABLED and CONFIG_NIMBLE_ENABLED. This ensures the Bluetooth stack is selected dynamically based on the configuration.
  • Modified BLE2901, BLE2902, and BLE2904 classes to work with both NimBLE and Bluedroid, including adding new NimBLE-specific logic for notifications and indications.

New Features and Improvements

  • Enhanced the BLE2902 class with NimBLE-specific methods for getting and setting notifications and indications, while marking the class as deprecated for NimBLE users since such descriptors are automatically managed.
  • Added default values and improved initialization for the BLE2904 class to ensure consistency across both stacks.

Documentation Updates

  • Updated the README.md to clarify the origins of the library, acknowledge contributions from h2zero (also added as co-author) for NimBLE, and provide guidance on where to raise issues.
  • Added warnings and errors in BLE5 examples to notify users when features are unsupported by NimBLE.

Example and Configuration Changes

  • Updated BLE5 examples (ci.json files) to require CONFIG_BLUEDROID_ENABLED for compatibility with features not yet supported by NimBLE.
  • Adjusted error handling in BLE5 examples to provide clear guidance on stack limitations.

Maintenance and Metadata

  • Changed the library maintainer in library.properties to lucasssvaz, reflecting updated project ownership.

These changes collectively improve the flexibility and usability of the ESP32 BLE library by supporting multiple Bluetooth stacks while maintaining backward compatibility.

Parts of the NimBLE implementation are based on older versions of NimBLE-Arduino. In future versions where breaking API changes are allowed, NimBLE-Arduino can be used as a submodule if optimal.

Tests scenarios

Examples successfully tested with NimBLE (mostly using ESP32-S3 and C6):

  • Beacon_Scanner
  • Client
  • EddystoneTLM_Beacon
  • EddystoneURL_Beacon
  • iBeacon
  • Notify
  • Scan
  • Server
  • Server_multiconnect
  • UART
  • Write

Related links

#9878
espressif/esp32-arduino-lib-builder#296

@lucasssvazlucasssvaz self-assigned this Jun 3, 2025
@lucasssvazlucasssvaz added Area: LibrariesIssue is related to Library support.Area: BLEIssues related to BLElabels Jun 3, 2025
@github-actionsGitHub Actions
Warnings
⚠️

Some issues found for the commit messages in this PR:

  • the commit message "feat(NimBLE): Add support for NimBLE":
    • scope/component should be lowercase without whitespace, allowed special characters are _ / . , * - .

Please fix these commit messages - here are some basic tips:

  • follow Conventional Commits style
  • correct format of commit message should be: <type/action>(<scope/component>): <summary>, for example fix(esp32): Fixed startup timeout issue
  • allowed types are: change,ci,docs,feat,fix,refactor,remove,revert,test
  • sufficiently descriptive message summary should be between 10 to 72 characters and start with upper case letter
  • avoid Jira references in commit messages (unavailable/irrelevant for our customers)

TIP: Install pre-commit hooks and run this check when committing (uses the Conventional Precommit Linter).

⚠️
	The **target branch** for this Pull Request **must be the default branch** of the project (`master`).

	If you would like to add this feature to a different branch, please state this in the PR description and we will consider it.
Messages
📖This PR seems to be quite large (total lines of code: 13111), you might consider splitting it into smaller PRs

👋 Hello lucasssvaz, we appreciate your contribution to this project!


📘 Please review the project's Contributions Guide for key guidelines on code, documentation, testing, and more.

🖊️ Please also make sure you have read and signed the Contributor License Agreement for this project.

Click to see more instructions ...


This automated output is generated by the PR linter DangerJS, which checks if your Pull Request meets the project's requirements and helps you fix potential issues.

DangerJS is triggered with each push event to a Pull Request and modify the contents of this comment.

Please consider the following:
- Danger mainly focuses on the PR structure and formatting and can't understand the meaning behind your code or changes.
- Danger is not a substitute for human code reviews; it's still important to request a code review from your colleagues.
- Resolve all warnings (⚠️) before requesting a review from human reviewers - they will appreciate it.
- Addressing info messages (📖) is strongly recommended; they're less critical but valuable.
- To manually retry these Danger checks, please navigate to the Actions tab and re-run last Danger workflow.

Review and merge process you can expect ...


We do welcome contributions in the form of bug reports, feature requests and pull requests.

1. An internal issue has been created for the PR, we assign it to the relevant engineer.
2. They review the PR and either approve it or ask you for changes or clarifications.
3. Once the PR is approved we do the final review, collect approvals from core owners and make sure all the automated tests are passing.
- At this point we may do some adjustments to the proposed change, or extend it by adding tests or documentation.
4. If the change is approved and passes the tests it is merged into the default branch.

Generated by 🚫 dangerJS against 6100cb5

@lucasssvazlucasssvaz added Status: In Progress ⚠️Issue is in progressStatus: Test neededIssue needs testinglabels Jun 3, 2025
@github-actionsGitHub Actions

Test Results

 76 files   76 suites   12m 45s ⏱️
 38 tests  38 ✅ 0 💤 0 ❌
241 runs  241 ✅ 0 💤 0 ❌

Results for commit 6100cb5.

♻️ This comment has been updated with latest results.

@github-actionsGitHub Actions

Memory usage test (comparing PR against master branch)

The table below shows the summary of memory usage change (decrease - increase) in bytes and percentage for each target.

MemoryFLASH [bytes]FLASH [%]RAM [bytes]RAM [%]
TargetDECINCDECINCDECINCDECINC
ESP32C5000.000.00000.000.00
ESP32P40‼️+15K0.00‼️+2.02💚 -96⚠️+256💚 -0.42⚠️+0.87
ESP32S30‼️+15K0.00‼️+1.29💚 -1448⚠️+128💚 -3.22⚠️+0.61
ESP32S20‼️+13K0.00‼️+1.26💚 -240⚠️+80💚 -0.76⚠️+0.53
ESP32C30‼️+17K0.00‼️+1.60💚 -1756⚠️+24💚 -4.86⚠️+0.20
ESP32C60‼️+13K0.00‼️+1.76💚 -1780⚠️+32💚 -4.18⚠️+0.24
ESP32H20‼️+7K0.00‼️+1.50💚 -1360⚠️+24💚 -3.64⚠️+0.18
ESP32💚 -531‼️+18K💚 -0.16‼️+1.73💚 -13400💚 -3.000.00
Click to expand the detailed deltas report [usage change in BYTES]
TargetESP32C5ESP32P4ESP32S3ESP32S2ESP32C3ESP32C6ESP32H2ESP32
ExampleFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAMFLASHRAM
ArduinoOTA/examples/BasicOTA--‼️+11K⚠️+192‼️+8K💚 -1440‼️+8K💚 -216‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1332
AsyncUDP/examples/AsyncUDPClient--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
AsyncUDP/examples/AsyncUDPMulticastServer--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
AsyncUDP/examples/AsyncUDPServer--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
BLE/examples/BLE5_extended_scan----‼️+5K💚 -1008--‼️+4K💚 -1296‼️+2K💚 -1304‼️+3K💚 -1352--
BLE/examples/BLE5_multi_advertising----‼️+5K💚 -1024--‼️+4K💚 -1280‼️+2K💚 -1304‼️+3K💚 -1352--
BLE/examples/BLE5_periodic_advertising----‼️+4K💚 -1008--‼️+4K💚 -1280‼️+2K💚 -1304‼️+3K💚 -1352--
BLE/examples/BLE5_periodic_sync----‼️+5K💚 -1008--‼️+5K💚 -1280‼️+2K💚 -1304‼️+3K💚 -1352--
BLE/examples/Beacon_Scanner----‼️+5K💚 -1008--‼️+4K💚 -1296‼️+2K💚 -1304‼️+3K💚 -1352‼️+6K💚 -1124
BLE/examples/Client----‼️+4K💚 -1008--‼️+5K💚 -1288‼️+2K💚 -1296‼️+3K💚 -1360‼️+6K💚 -1124
BLE/examples/EddystoneTLM_Beacon----‼️+5K💚 -976--‼️+4K💚 -1296‼️+2K💚 -1304‼️+4K💚 -1352‼️+7K💚 -1092
BLE/examples/EddystoneURL_Beacon----‼️+5K💚 -976--‼️+4K💚 -1288‼️+2K💚 -1296‼️+4K💚 -1360‼️+7K💚 -1092
BLE/examples/Notify----‼️+5K💚 -1008--‼️+5K💚 -1288‼️+3K💚 -1296‼️+4K💚 -1360‼️+6K💚 -1124
BLE/examples/Scan----‼️+5K💚 -1008--‼️+4K💚 -1296‼️+2K💚 -1304‼️+3K💚 -1352‼️+6K💚 -1124
BLE/examples/Server----‼️+4K💚 -1008--‼️+5K💚 -1288‼️+2K💚 -1296‼️+3K💚 -1360‼️+6K💚 -1124
BLE/examples/Server_multiconnect----‼️+5K💚 -1008--‼️+5K💚 -1288‼️+3K💚 -1296‼️+4K💚 -1360‼️+6K💚 -1124
BLE/examples/UART----‼️+5K💚 -1008--‼️+5K💚 -1288‼️+3K💚 -1296‼️+4K💚 -1360‼️+6K💚 -1124
BLE/examples/Write----‼️+4K💚 -1008--‼️+5K💚 -1288‼️+2K💚 -1296‼️+3K💚 -1360‼️+6K💚 -1124
BLE/examples/iBeacon----‼️+5K💚 -1008--‼️+5K💚 -1288‼️+2K💚 -1296‼️+3K💚 -1360‼️+6K💚 -1124
DNSServer/examples/CaptivePortal--‼️+11K⚠️+252‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
EEPROM/examples/eeprom_class--‼️+3K⚠️+168⚠️+1793⚠️+104⚠️+1213⚠️+48⚠️+1906💚 -4⚠️+1766💚 -28⚠️+1570⚠️+20⚠️+833💚 -68
EEPROM/examples/eeprom_extra--‼️+3K⚠️+152⚠️+1793⚠️+104⚠️+1213⚠️+48⚠️+1908💚 -4⚠️+1776💚 -28⚠️+1578⚠️+20⚠️+849💚 -68
EEPROM/examples/eeprom_write--‼️+3K⚠️+144⚠️+1777⚠️+88⚠️+1221⚠️+48⚠️+1912⚠️+4⚠️+1782💚 -20⚠️+1552⚠️+12⚠️+833💚 -84
ESP32/examples/AnalogOut/LEDCFade--‼️+3K⚠️+152⚠️+1789⚠️+88⚠️+1141⚠️+48⚠️+1922⚠️+12⚠️+1856💚 -20⚠️+1880⚠️+12⚠️+741💚 -84
ESP32/examples/AnalogOut/LEDCSingleChannel--‼️+3K⚠️+152⚠️+1665⚠️+96⚠️+1097⚠️+56⚠️+1798⚠️+12⚠️+1648💚 -20⚠️+1662⚠️+12⚠️+685💚 -92
ESP32/examples/AnalogOut/LEDCSoftwareFade--‼️+3K⚠️+152⚠️+1677⚠️+96⚠️+1105⚠️+56⚠️+1804⚠️+12⚠️+1652💚 -20⚠️+1668⚠️+12⚠️+653💚 -92
ESP32/examples/AnalogOut/SigmaDelta--‼️+3K⚠️+160⚠️+1713⚠️+88⚠️+1121⚠️+48⚠️+1774⚠️+4⚠️+1660💚 -20⚠️+1450⚠️+4⚠️+761💚 -68
ESP32/examples/AnalogOut/ledcFrequency--‼️+3K⚠️+160⚠️+1697⚠️+96⚠️+1141⚠️+56⚠️+1790⚠️+4⚠️+1644💚 -28⚠️+1666⚠️+20⚠️+661💚 -92
ESP32/examples/AnalogOut/ledcWrite_RGB--‼️+3K⚠️+152⚠️+1725⚠️+88⚠️+1121⚠️+48⚠️+1862⚠️+12⚠️+1704💚 -20⚠️+1734⚠️+12⚠️+657💚 -84
ESP32/examples/AnalogRead--⚠️+1326⚠️+136‼️+2K⚠️+96⚠️+1613⚠️+56⚠️+182⚠️+24⚠️+1412⚠️+32⚠️+920⚠️+1305💚 -92
ESP32/examples/AnalogReadContinuous--⚠️+1396⚠️+136⚠️+1365⚠️+104⚠️+153⚠️+32⚠️+294⚠️+16⚠️+1348⚠️+24⚠️+540💚 -531💚 -84
ESP32/examples/ArduinoStackSize--‼️+3K⚠️+168⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1772⚠️+4⚠️+1652💚 -20⚠️+1438⚠️+12⚠️+769💚 -68
ESP32/examples/CI/CIBoardsTest--‼️+3K⚠️+136‼️+2K💚 -144‼️+2K💚 -120‼️+2K💚 -236‼️+2K💚 -260⚠️+2014💚 -228⚠️+949💚 -76
ESP32/examples/ChipID/GetChipID--‼️+3K⚠️+168⚠️+1777⚠️+88⚠️+1125⚠️+48⚠️+1852⚠️+4⚠️+1706💚 -12⚠️+1530⚠️+12⚠️+733💚 -84
ESP32/examples/DeepSleep/TimerWakeUp--‼️+2K⚠️+168⚠️+1797⚠️+104⚠️+1325⚠️+80⚠️+1902💚 -4⚠️+1696💚 -20--⚠️+1941💚 -36
ESP32/examples/FreeRTOS/BasicMultiThreading--‼️+4K⚠️+144⚠️+1757💚 -128⚠️+1261💚 -112‼️+2K💚 -232‼️+3K💚 -208‼️+3K💚 -224⚠️+501💚 -76
ESP32/examples/FreeRTOS/Mutex--‼️+3K⚠️+168⚠️+1701⚠️+104⚠️+1125⚠️+48⚠️+1774⚠️+4⚠️+1644💚 -20⚠️+1436⚠️+12⚠️+753💚 -84
ESP32/examples/FreeRTOS/Queue--‼️+3K⚠️+168⚠️+1701⚠️+88⚠️+1125⚠️+48⚠️+1772⚠️+4⚠️+1648💚 -20⚠️+1438⚠️+12⚠️+753💚 -68
ESP32/examples/FreeRTOS/Semaphore--‼️+3K⚠️+168⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1772⚠️+4⚠️+1654💚 -20⚠️+1442⚠️+12⚠️+769💚 -68
ESP32/examples/GPIO/BlinkRGB--‼️+3K⚠️+168⚠️+1777💚 -144⚠️+1593💚 -120⚠️+1880💚 -228⚠️+1710💚 -260⚠️+1490💚 -228⚠️+765💚 -76
ESP32/examples/GPIO/FunctionalInterrupt--‼️+3K⚠️+136⚠️+1937⚠️+88⚠️+1297⚠️+48⚠️+1862⚠️+12⚠️+1742💚 -20⚠️+1540⚠️+12⚠️+877💚 -68
ESP32/examples/GPIO/FunctionalInterruptStruct--‼️+3K⚠️+136⚠️+1929⚠️+88⚠️+1293⚠️+48⚠️+1834⚠️+12⚠️+1706💚 -20⚠️+1528⚠️+12⚠️+861💚 -68
ESP32/examples/GPIO/GPIOInterrupt--‼️+3K⚠️+136⚠️+1937⚠️+88⚠️+1297⚠️+48⚠️+1858⚠️+12⚠️+1730💚 -20⚠️+1542⚠️+12⚠️+877💚 -68
ESP32/examples/HWCDC_Events--‼️+3K⚠️+168‼️+3K💚 -36--⚠️+1996💚 -236⚠️+1856💚 -268⚠️+1656💚 -220--
ESP32/examples/MacAddress/GetMacAddress--‼️+3K⚠️+168⚠️+1725⚠️+88⚠️+1133⚠️+48⚠️+1780⚠️+4⚠️+1664💚 -20⚠️+1482⚠️+20⚠️+749💚 -84
ESP32/examples/RMT/Legacy_RMT_Driver_Compatible--‼️+3K⚠️+160⚠️+1737⚠️+104⚠️+1125⚠️+48⚠️+1782⚠️+4⚠️+1650💚 -20⚠️+1444⚠️+12⚠️+749💚 -72
ESP32/examples/RMT/RMTCallback--‼️+3K💚 -80⚠️+1777💚 -120⚠️+1569💚 -112⚠️+1876💚 -236⚠️+1704💚 -260⚠️+1486💚 -228⚠️+517💚 -248
ESP32/examples/RMT/RMTLoopback--‼️+3K💚 -80⚠️+1777💚 -120⚠️+1593💚 -112⚠️+1878💚 -236⚠️+1714💚 -260⚠️+1498💚 -228⚠️+517💚 -248
ESP32/examples/RMT/RMTReadXJT--‼️+3K💚 -96⚠️+1777💚 -136⚠️+1569💚 -112⚠️+1890💚 -236⚠️+1710💚 -260⚠️+1482💚 -228⚠️+501💚 -264
ESP32/examples/RMT/RMTWrite_RGB_LED--‼️+3K💚 -80⚠️+1805💚 -136⚠️+1617💚 -112⚠️+1906💚 -244⚠️+1764💚 -268⚠️+1558💚 -220⚠️+493💚 -264
ESP32/examples/RMT/RMT_CPUFreq_Test--‼️+3K💚 -80⚠️+1821💚 -120⚠️+1625💚 -112⚠️+1924💚 -228⚠️+1766💚 -252⚠️+1544💚 -236⚠️+509💚 -248
ESP32/examples/RMT/RMT_EndOfTransmissionState--‼️+3K💚 -80⚠️+1805💚 -136⚠️+1617💚 -112⚠️+1904💚 -244⚠️+1754💚 -268⚠️+1558💚 -220⚠️+493💚 -264
ESP32/examples/RMT/RMT_LED_Blink--‼️+3K💚 -80⚠️+1805💚 -136⚠️+1625💚 -112⚠️+1908💚 -244⚠️+1780💚 -268⚠️+1572💚 -220⚠️+493💚 -264
ESP32/examples/ResetReason/ResetReason--‼️+2K⚠️+176⚠️+1805⚠️+104⚠️+1357⚠️+80⚠️+1894💚 -4⚠️+1698💚 -20⚠️+1438⚠️+12⚠️+1941💚 -36
ESP32/examples/ResetReason/ResetReason2--‼️+3K⚠️+168⚠️+1701⚠️+96⚠️+1125⚠️+56⚠️+1770⚠️+4⚠️+1636💚 -20⚠️+1450⚠️+12⚠️+753💚 -68
ESP32/examples/Serial/BaudRateDetect_Demo--‼️+3K⚠️+168⚠️+1701⚠️+88⚠️+1125⚠️+48⚠️+1772⚠️+4⚠️+1646💚 -20⚠️+1438⚠️+12⚠️+753💚 -68
ESP32/examples/Serial/OnReceiveError_BREAK_Demo--‼️+3K⚠️+160⚠️+1701⚠️+88⚠️+1129⚠️+48⚠️+1770⚠️+12⚠️+1640💚 -12⚠️+1428⚠️+4⚠️+753💚 -84
ESP32/examples/Serial/OnReceive_Demo--‼️+3K⚠️+160⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1780⚠️+12⚠️+1646💚 -12⚠️+1414⚠️+4⚠️+753💚 -84
ESP32/examples/Serial/RS485_Echo_Demo--‼️+3K⚠️+168⚠️+1689⚠️+88⚠️+1125⚠️+48⚠️+1780⚠️+4⚠️+1662💚 -20⚠️+1446⚠️+12⚠️+769💚 -68
ESP32/examples/Serial/RxFIFOFull_Demo--‼️+3K⚠️+160⚠️+1701⚠️+88⚠️+1125⚠️+48⚠️+1780⚠️+12⚠️+1652💚 -12⚠️+1418⚠️+4⚠️+737💚 -84
ESP32/examples/Serial/RxTimeout_Demo--‼️+3K⚠️+168⚠️+1701⚠️+104⚠️+1133⚠️+48⚠️+1772⚠️+4⚠️+1654💚 -20⚠️+1434⚠️+12⚠️+753💚 -84
ESP32/examples/Serial/Serial_All_CPU_Freqs--‼️+3K⚠️+168⚠️+1717⚠️+104⚠️+1125⚠️+48⚠️+1774⚠️+12⚠️+1626💚 -12⚠️+1434⚠️+4⚠️+737💚 -84
ESP32/examples/Serial/Serial_STD_Func_OnReceive--‼️+3K⚠️+160⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1782⚠️+12⚠️+1654💚 -12⚠️+1412⚠️+4⚠️+737💚 -84
ESP32/examples/Serial/onReceiveExample--‼️+3K⚠️+168⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1772⚠️+4⚠️+1638💚 -20⚠️+1430⚠️+12⚠️+769💚 -68
ESP32/examples/Template/ExampleTemplate--‼️+3K⚠️+168⚠️+1653⚠️+96⚠️+1097⚠️+56⚠️+1700⚠️+4⚠️+1592💚 -20⚠️+1390⚠️+12⚠️+765💚 -76
ESP32/examples/Time/SimpleTime--‼️+11K⚠️+172‼️+8K💚 -1204‼️+7K💚 -72‼️+8K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1340
ESP32/examples/Timer/RepeatTimer--‼️+3K⚠️+152⚠️+1825⚠️+96⚠️+1201⚠️+56⚠️+1950⚠️+12⚠️+1710💚 -20⚠️+1506⚠️+12⚠️+793💚 -76
ESP32/examples/Timer/WatchdogTimer--‼️+3K⚠️+152⚠️+1817⚠️+96⚠️+1193⚠️+56⚠️+1926⚠️+12⚠️+1702💚 -20⚠️+1506⚠️+12⚠️+793💚 -76
ESP32/examples/Utilities/HEXBuilder--‼️+3K⚠️+168⚠️+1685⚠️+88⚠️+1133⚠️+48⚠️+1772⚠️+4⚠️+1648💚 -20⚠️+1440⚠️+12⚠️+769💚 -68
ESP32/examples/Utilities/MD5Builder--‼️+3K⚠️+168⚠️+1701⚠️+88⚠️+1125⚠️+48⚠️+1770⚠️+4⚠️+1648💚 -20⚠️+1434⚠️+12⚠️+753💚 -68
ESP32/examples/Utilities/SHA1Builder--‼️+3K⚠️+168⚠️+1701⚠️+88⚠️+1121⚠️+48⚠️+1766⚠️+4⚠️+1648💚 -20⚠️+1434⚠️+12⚠️+753💚 -68
ESP_I2S/examples/ES8388_loopback--‼️+3K⚠️+132‼️+3K💚 -144‼️+2K💚 -120‼️+6K💚 -236‼️+6K💚 -260‼️+5K💚 -228⚠️+1989💚 -92
ESP_I2S/examples/Simple_tone--‼️+2K⚠️+140⚠️+1481⚠️+88⚠️+433⚠️+48‼️+4K⚠️+12‼️+4K⚠️+4‼️+4K⚠️+4⚠️+221💚 -68
ESP_NOW/examples/ESP_NOW_Broadcast_Master----‼️+8K💚 -1204‼️+7K💚 -64‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1340
ESP_NOW/examples/ESP_NOW_Broadcast_Slave----‼️+8K💚 -1204‼️+7K💚 -64‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1340
ESP_NOW/examples/ESP_NOW_Network----‼️+8K💚 -1204‼️+7K💚 -64‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1340
ESP_NOW/examples/ESP_NOW_Serial----‼️+8K💚 -1188‼️+7K💚 -64‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1340
ESPmDNS/examples/mDNS-SD_Extended--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+9K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1316
ESPmDNS/examples/mDNS_Web_Server--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+9K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1316
Ethernet/examples/ETH_W5500_Arduino_SPI--‼️+7K⚠️+120‼️+6K💚 -136‼️+6K💚 -112‼️+7K💚 -244‼️+7K💚 -252‼️+7K💚 -236‼️+5K💚 -76
Ethernet/examples/ETH_W5500_IDF_SPI--‼️+7K⚠️+120‼️+6K💚 -136‼️+6K💚 -112‼️+7K💚 -244‼️+7K💚 -252‼️+7K💚 -236‼️+5K💚 -76
Ethernet/examples/ETH_WIFI_BRIDGE--‼️+15K⚠️+180‼️+12K💚 -1448‼️+11K💚 -240‼️+13K💚 -1740‼️+13K💚 -1772--‼️+11K💚 -1316
FFat/examples/FFat_Test--‼️+3K⚠️+144‼️+2K⚠️+88⚠️+1381⚠️+64‼️+2K💚 -16‼️+2K💚 -40⚠️+1878⚠️+24⚠️+1257💚 -68
FFat/examples/FFat_time--‼️+11K⚠️+180‼️+9K💚 -1188‼️+8K💚 -64‼️+9K💚 -1500‼️+9K💚 -1524--‼️+8K💚 -1332
HTTPClient/examples/Authorization--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
HTTPClient/examples/BasicHttpClient--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
HTTPClient/examples/BasicHttpsClient--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -64‼️+9K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1332
HTTPClient/examples/HTTPClientEnterprise----‼️+9K💚 -1188‼️+8K💚 -64‼️+9K💚 -1516‼️+9K💚 -1516--‼️+8K💚 -1332
HTTPClient/examples/ReuseConnection--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
HTTPClient/examples/StreamHttpClient--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
HTTPUpdate/examples/httpUpdate--‼️+11K⚠️+200‼️+9K💚 -1448‼️+8K💚 -232‼️+9K💚 -1740‼️+9K💚 -1772--‼️+7K💚 -1340
HTTPUpdate/examples/httpUpdateSPIFFS--‼️+11K⚠️+200‼️+9K💚 -1448‼️+8K💚 -232‼️+9K💚 -1740‼️+9K💚 -1772--‼️+7K💚 -1340
HTTPUpdate/examples/httpUpdateSecure--‼️+12K⚠️+200‼️+8K💚 -1440‼️+7K💚 -232‼️+9K💚 -1748‼️+9K💚 -1748--‼️+7K💚 -1316
HTTPUpdateServer/examples/WebUpdater--‼️+11K⚠️+184‼️+8K💚 -1432‼️+7K💚 -216‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1340
LittleFS/examples/LITTLEFS_test--‼️+2K⚠️+152⚠️+1609⚠️+88⚠️+905⚠️+56⚠️+1722⚠️+4⚠️+1604💚 -28⚠️+1390⚠️+20⚠️+809💚 -68
LittleFS/examples/LITTLEFS_time--‼️+11K⚠️+184‼️+8K💚 -1204‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1340
NetBIOS/examples/ESP_NBNST--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
NetworkClientSecure/examples/WiFiClientInsecure--‼️+11K⚠️+180‼️+8K💚 -1204‼️+7K💚 -48‼️+8K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1332
NetworkClientSecure/examples/WiFiClientPSK--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -48‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1332
NetworkClientSecure/examples/WiFiClientSecure--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -48‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1332
NetworkClientSecure/examples/WiFiClientSecureEnterprise----‼️+9K💚 -1204‼️+7K💚 -64‼️+9K💚 -1516‼️+9K💚 -1524--‼️+8K💚 -1316
NetworkClientSecure/examples/WiFiClientSecureProtocolUpgrade--‼️+11K⚠️+180‼️+8K💚 -1204‼️+7K💚 -48‼️+8K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1332
NetworkClientSecure/examples/WiFiClientShowPeerCredentials--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -48‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
NetworkClientSecure/examples/WiFiClientTrustOnFirstUse--‼️+11K⚠️+180‼️+8K💚 -1204‼️+7K💚 -64‼️+9K💚 -1492‼️+8K💚 -1524--‼️+7K💚 -1316
OpenThread/examples/COAP/coap_lamp----------⚠️+1904💚 -400⚠️+1422💚 -388--
OpenThread/examples/COAP/coap_switch----------‼️+4K💚 -400‼️+3K💚 -388--
OpenThread/examples/SimpleCLI----------⚠️+1676💚 -132⚠️+1166💚 -132--
OpenThread/examples/SimpleNode----------‼️+3K💚 -156‼️+3K💚 -156--
OpenThread/examples/SimpleThreadNetwork/ExtendedRouterNode----------⚠️+1806💚 -148⚠️+1278💚 -164--
OpenThread/examples/SimpleThreadNetwork/LeaderNode----------⚠️+1752💚 -164⚠️+1240💚 -148--
OpenThread/examples/SimpleThreadNetwork/RouterNode----------⚠️+1754💚 -164⚠️+1240💚 -148--
OpenThread/examples/ThreadScan----------⚠️+1736💚 -132⚠️+1236💚 -132--
OpenThread/examples/onReceive----------⚠️+1668💚 -132⚠️+1168💚 -132--
PPP/examples/PPP_Basic--‼️+4K⚠️+128‼️+3K💚 -144‼️+2K💚 -112‼️+3K💚 -228‼️+3K💚 -268‼️+2K💚 -228⚠️+1717💚 -92
PPP/examples/PPP_WIFI_BRIDGE--‼️+11K⚠️+172‼️+8K💚 -1424‼️+8K💚 -232‼️+9K💚 -1756‼️+8K💚 -1764--‼️+7K💚 -1324
Preferences/examples/Prefs2Struct--‼️+3K⚠️+168⚠️+1777⚠️+88⚠️+1221⚠️+48⚠️+1908💚 -4⚠️+1786💚 -28⚠️+1570⚠️+20⚠️+849💚 -68
Preferences/examples/StartCounter--‼️+3K⚠️+168⚠️+1793⚠️+104⚠️+1213⚠️+48⚠️+1908💚 -4⚠️+1760💚 -28⚠️+1570⚠️+20⚠️+833💚 -68
SD/examples/SD_Test--‼️+3K⚠️+136⚠️+1877💚 -144⚠️+1609💚 -120⚠️+1974💚 -232⚠️+1822💚 -248⚠️+1610💚 -232⚠️+1017💚 -68
SD/examples/SD_time--‼️+11K⚠️+180‼️+8K💚 -1448‼️+7K💚 -232‼️+9K💚 -1740‼️+8K💚 -1772--‼️+7K💚 -1324
SPI/examples/SPI_Multiple_Buses--‼️+3K⚠️+152⚠️+1817💚 -144⚠️+1613💚 -120⚠️+1922💚 -228⚠️+1764💚 -260⚠️+1548💚 -228⚠️+737💚 -76
SPIFFS/examples/SPIFFS_Test--‼️+3K⚠️+152⚠️+1749⚠️+96⚠️+1129⚠️+48⚠️+1830💚 -4⚠️+1704💚 -20⚠️+1498⚠️+12⚠️+1025💚 -68
SPIFFS/examples/SPIFFS_time--‼️+11K⚠️+180‼️+8K💚 -1204‼️+7K💚 -64‼️+9K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1332
SimpleBLE/examples/SimpleBleDevice----‼️+4K💚 -1000--‼️+4K💚 -1304⚠️+1652💚 -1320‼️+3K💚 -1352‼️+5K💚 -1124
TFLiteMicro/examples/hello_world--‼️+3K⚠️+148⚠️+1669⚠️+112⚠️+1105⚠️+48⚠️+1700⚠️+4⚠️+1588💚 -20⚠️+1388⚠️+4⚠️+765💚 -76
Ticker/examples/Blinker--‼️+3K⚠️+144⚠️+1817💚 -144⚠️+1633💚 -120⚠️+1916💚 -236⚠️+1768💚 -268⚠️+1570💚 -220⚠️+737💚 -92
Ticker/examples/TickerBasic--‼️+3K⚠️+136⚠️+1817💚 -144⚠️+1633💚 -120⚠️+1926💚 -228⚠️+1778💚 -260⚠️+1556💚 -228⚠️+737💚 -92
Ticker/examples/TickerParameter--‼️+3K⚠️+136⚠️+1817💚 -144⚠️+1633💚 -120⚠️+1926💚 -228⚠️+1770💚 -260⚠️+1556💚 -228⚠️+737💚 -92
Update/examples/AWS_S3_OTA_Update--‼️+11K⚠️+176‼️+8K💚 -1416‼️+8K💚 -232‼️+9K💚 -1732‼️+8K💚 -1756--‼️+7K💚 -1340
Update/examples/HTTPS_OTA_Update--‼️+15K⚠️+200‼️+12K💚 -1188‼️+11K💚 -40‼️+13K💚 -1500‼️+12K💚 -1524--‼️+11K💚 -1316
Update/examples/HTTP_Client_AES_OTA_Update--‼️+11K⚠️+184‼️+8K💚 -1432‼️+7K💚 -232‼️+9K💚 -1732‼️+8K💚 -1780--‼️+7K💚 -1340
Update/examples/HTTP_Server_AES_OTA_Update--‼️+11K⚠️+184‼️+8K💚 -1416‼️+7K💚 -232‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1324
Update/examples/OTAWebUpdater--‼️+11K⚠️+184‼️+8K💚 -1440‼️+8K💚 -216‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1332
Update/examples/SD_Update--‼️+3K⚠️+128⚠️+1865💚 -136⚠️+1373💚 -112⚠️+1996💚 -232⚠️+1894💚 -248⚠️+1682💚 -232⚠️+1025💚 -68
WebServer/examples/AdvancedWebServer--‼️+11K⚠️+172‼️+8K💚 -1440‼️+7K💚 -232‼️+9K💚 -1732‼️+8K💚 -1756--‼️+7K💚 -1332
WebServer/examples/FSBrowser--‼️+12K⚠️+196‼️+9K💚 -1220‼️+8K💚 -72‼️+7K💚 -1516‼️+7K💚 -1540--‼️+8K💚 -1340
WebServer/examples/Filters--‼️+11K⚠️+236‼️+9K💚 -1424‼️+8K💚 -216‼️+9K💚 -1732‼️+8K💚 -1756--‼️+7K💚 -1316
WebServer/examples/HelloServer--‼️+11K⚠️+172‼️+9K💚 -1440‼️+7K💚 -232‼️+9K💚 -1732‼️+8K💚 -1756--‼️+7K💚 -1332
WebServer/examples/HttpAdvancedAuth--‼️+11K⚠️+176‼️+8K💚 -1424‼️+7K💚 -232‼️+9K💚 -1732‼️+8K💚 -1756--‼️+7K💚 -1316
WebServer/examples/HttpAuthCallback--‼️+11K⚠️+176‼️+8K💚 -1440‼️+7K💚 -216‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1332
WebServer/examples/HttpAuthCallbackInline--‼️+11K⚠️+176‼️+8K💚 -1440‼️+7K💚 -216‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1332
WebServer/examples/HttpBasicAuth--‼️+11K⚠️+240‼️+8K💚 -1424‼️+7K💚 -232‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1316
WebServer/examples/HttpBasicAuthSHA1--‼️+11K⚠️+176‼️+8K💚 -1424‼️+7K💚 -232‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1316
WebServer/examples/HttpBasicAuthSHA1orBearerToken--‼️+11K⚠️+256‼️+8K💚 -1424‼️+7K💚 -232‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1316
WebServer/examples/Middleware----‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1324
WebServer/examples/MultiHomedServers--‼️+11K⚠️+180‼️+8K💚 -1440‼️+8K💚 -232‼️+9K💚 -1724‼️+8K💚 -1748--‼️+7K💚 -1332
WebServer/examples/PathArgServer--‼️+11K⚠️+180‼️+8K💚 -1188‼️+7K💚 -72‼️+8K💚 -1492‼️+8K💚 -1532--‼️+7K💚 -1316
WebServer/examples/SDWebServer--‼️+11K⚠️+172‼️+8K💚 -1440‼️+7K💚 -216‼️+9K💚 -1748‼️+9K💚 -1756--‼️+7K💚 -1332
WebServer/examples/SimpleAuthentification--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1324
WebServer/examples/UploadHugeFile--‼️+11K⚠️+172‼️+8K💚 -1448‼️+7K💚 -216‼️+8K💚 -1732‼️+9K💚 -1764--‼️+7K💚 -1340
WebServer/examples/WebServer--‼️+11K⚠️+184‼️+8K💚 -1188‼️+7K💚 -64‼️+9K💚 -1508‼️+9K💚 -1532--‼️+8K💚 -1316
WebServer/examples/WebUpdate--‼️+11K⚠️+240‼️+8K💚 -1424‼️+8K💚 -232‼️+9K💚 -1740‼️+8K💚 -1764--‼️+7K💚 -1316
WiFi/examples/FTM/FTM_Initiator--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/FTM/FTM_Responder--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/SimpleWiFiServer--‼️+11K⚠️+172‼️+8K💚 -1432‼️+8K💚 -232‼️+9K💚 -1748‼️+8K💚 -1772--‼️+7K💚 -1340
WiFi/examples/WPS----‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1340
WiFi/examples/WiFiAccessPoint--‼️+11K⚠️+172‼️+8K💚 -1432‼️+8K💚 -232‼️+9K💚 -1748‼️+8K💚 -1772--‼️+7K💚 -1340
WiFi/examples/WiFiBlueToothSwitch----‼️+8K💚 -1204--‼️+9K💚 -1484‼️+5K💚 -1564--‼️+7K💚 -1324
WiFi/examples/WiFiClient--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -56‼️+8K💚 -1516‼️+8K💚 -1540--‼️+7K💚 -1340
WiFi/examples/WiFiClientBasic--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1324
WiFi/examples/WiFiClientConnect--‼️+11K⚠️+172‼️+8K💚 -1204‼️+7K💚 -72‼️+9K💚 -1500‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/WiFiClientEnterprise----‼️+8K💚 -1196‼️+7K💚 -64‼️+9K💚 -1492‼️+8K💚 -1516--‼️+7K💚 -1316
WiFi/examples/WiFiClientEvents--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/WiFiClientStaticIP--‼️+11K⚠️+172‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/WiFiExtender--‼️+11K⚠️+236‼️+8K💚 -1196‼️+7K💚 -56‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/WiFiIPv6--‼️+11K⚠️+244‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/WiFiMulti--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/WiFiMultiAdvanced--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -64‼️+8K💚 -1508‼️+8K💚 -1524--‼️+7K💚 -1332
WiFi/examples/WiFiScan--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+9K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/WiFiScanAsync--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/WiFiScanDualAntenna--‼️+11K⚠️+172‼️+8K💚 -1204‼️+7K💚 -40‼️+9K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1316
WiFi/examples/WiFiScanTime--‼️+11K⚠️+172‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1500‼️+8K💚 -1524--‼️+7K💚 -1324
WiFi/examples/WiFiSmartConfig----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1492‼️+8K💚 -1524--‼️+7K💚 -1340
WiFi/examples/WiFiTelnetToSerial--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -56‼️+8K💚 -1508‼️+8K💚 -1532--‼️+7K💚 -1340
WiFi/examples/WiFiUDPClient--‼️+11K⚠️+180‼️+8K💚 -1220‼️+7K💚 -72‼️+8K💚 -1516‼️+8K💚 -1540--‼️+7K💚 -1340
WiFiProv/examples/WiFiProv----‼️+11K💚 -1136‼️+8K💚 -48‼️+12K💚 -1400‼️+8K💚 -1464--‼️+12K💚 -1228
Wire/examples/WireMaster--‼️+3K⚠️+136‼️+2K⚠️+96⚠️+1925⚠️+56‼️+2K⚠️+4‼️+2K💚 -20⚠️+1890⚠️+12⚠️+937💚 -76
Wire/examples/WireScan--‼️+3K⚠️+136‼️+2K⚠️+96⚠️+1925⚠️+56‼️+2K⚠️+4‼️+2K💚 -20⚠️+1896⚠️+12⚠️+921💚 -76
Wire/examples/WireSlave--‼️+3K⚠️+136‼️+2K⚠️+96⚠️+1925⚠️+56‼️+2K⚠️+4‼️+2K💚 -20⚠️+1890⚠️+12⚠️+937💚 -76
ESP32/examples/DeepSleep/TouchWakeUp--‼️+4K⚠️+144‼️+3K⚠️+128⚠️+1993⚠️+64------‼️+3K💚 -36
ESP32/examples/TWAI/TWAIreceive--‼️+3K⚠️+168‼️+2K⚠️+112⚠️+1861⚠️+56‼️+2K💚 -4‼️+2K💚 -20‼️+2K⚠️+20⚠️+1669💚 -76
ESP32/examples/TWAI/TWAItransmit--‼️+4K⚠️+168‼️+3K⚠️+112‼️+2K⚠️+56‼️+3K💚 -4‼️+3K💚 -20‼️+2K⚠️+20⚠️+1905💚 -76
ESP32/examples/Touch/TouchInterrupt--‼️+5K⚠️+144‼️+2K⚠️+96⚠️+1893⚠️+48------⚠️+1669💚 -68
ESP32/examples/Touch/TouchRead--‼️+5K⚠️+152‼️+2K⚠️+96⚠️+1893⚠️+48------⚠️+1653💚 -68
ESP_I2S/examples/Record_to_WAV--‼️+3K⚠️+156‼️+2K⚠️+88--------⚠️+641💚 -60
Ethernet/examples/ETH_TLK110--‼️+9K⚠️+128----------‼️+3K💚 -60
SD_MMC/examples/SD2USBMSC--‼️+2K⚠️+152⚠️+1749💚 -144----------
SD_MMC/examples/SDMMC_Test--‼️+3K⚠️+160⚠️+1617⚠️+104--------⚠️+153💚 -76
SD_MMC/examples/SDMMC_time--‼️+11K⚠️+188‼️+8K💚 -1212--------‼️+7K💚 -1316
USB/examples/CompositeDevice--‼️+3K⚠️+144⚠️+1933💚 -152⚠️+1129⚠️+56--------
USB/examples/ConsumerControl--‼️+3K⚠️+136⚠️+1877💚 -128⚠️+1121⚠️+48--------
USB/examples/CustomHIDDevice--‼️+3K⚠️+136⚠️+1909💚 -136⚠️+1117⚠️+56--------
USB/examples/FirmwareMSC--‼️+3K⚠️+136⚠️+1929💚 -136⚠️+1141⚠️+56--------
USB/examples/Gamepad--‼️+3K⚠️+136⚠️+1909💚 -136⚠️+1125⚠️+56--------
USB/examples/HIDVendor--‼️+3K⚠️+144⚠️+1925💚 -136⚠️+1141⚠️+56--------
USB/examples/Keyboard/KeyboardLogout--‼️+3K⚠️+144⚠️+1877💚 -128⚠️+1121⚠️+48--------
USB/examples/Keyboard/KeyboardMessage--‼️+3K⚠️+136⚠️+1877💚 -128⚠️+1121⚠️+48--------
USB/examples/Keyboard/KeyboardReprogram--‼️+3K⚠️+136⚠️+1861💚 -128⚠️+1113⚠️+48--------
USB/examples/Keyboard/KeyboardSerial--‼️+3K⚠️+136⚠️+1925💚 -136⚠️+1125⚠️+56--------
USB/examples/KeyboardAndMouseControl--‼️+3K⚠️+160⚠️+1925💚 -136⚠️+1117⚠️+56--------
USB/examples/MIDI/MidiController--‼️+3K⚠️+136⚠️+1809💚 -144⚠️+721⚠️+40--------
USB/examples/MIDI/MidiInterface--‼️+3K⚠️+136⚠️+1925💚 -136⚠️+1117⚠️+56--------
USB/examples/MIDI/MidiMusicBox--‼️+3K⚠️+144⚠️+1909💚 -136⚠️+1121⚠️+56--------
USB/examples/MIDI/ReceiveMidi--‼️+3K⚠️+136⚠️+1925💚 -136⚠️+1117⚠️+56--------
USB/examples/Mouse/ButtonMouseControl--‼️+3K⚠️+160⚠️+1861💚 -144⚠️+1113⚠️+48--------
USB/examples/SystemControl--‼️+3K⚠️+136⚠️+1861💚 -128⚠️+1113⚠️+48--------
USB/examples/USBMSC--‼️+3K⚠️+136⚠️+1925💚 -136⚠️+1137⚠️+56--------
USB/examples/USBSerial--‼️+3K⚠️+136⚠️+1909💚 -152⚠️+1145⚠️+56--------
USB/examples/USBVendor--‼️+3K⚠️+144⚠️+1925💚 -152⚠️+1133⚠️+56--------
ESP32/examples/Camera/CameraWebServer (1)----‼️+10K💚 -1108‼️+10K💚 -48------‼️+18K💚 -1268
ESP32/examples/Camera/CameraWebServer (2)----‼️+9K💚 -1224‼️+8K💚 -72------‼️+8K💚 -1340
ESP32/examples/Camera/CameraWebServer (3)----‼️+9K💚 -1188----------
ESP32/examples/DeepSleep/ExternalWakeUp----⚠️+1741⚠️+104⚠️+1249⚠️+80------⚠️+1869💚 -36
ESP_SR/examples/Basic----‼️+4K💚 -36----------
Insights/examples/DiagnosticsSmokeTest----‼️+9K💚 -1220‼️+8K💚 -64‼️+9K💚 -1500‼️+9K💚 -1532--‼️+8K💚 -1332
Insights/examples/MinimalDiagnostics----‼️+9K💚 -1220‼️+8K💚 -72‼️+9K💚 -1500‼️+9K💚 -1532--‼️+8K💚 -1340
Matter/examples/MatterColorLight----‼️+8K💚 -1424‼️+8K💚 -240‼️+9K💚 -1740‼️+9K💚 -1764--‼️+8K💚 -1340
Matter/examples/MatterCommissionTest----‼️+8K💚 -1220‼️+7K💚 -56‼️+8K💚 -1500‼️+9K💚 -1524--‼️+8K💚 -1324
Matter/examples/MatterComposedLights----‼️+8K💚 -1204‼️+7K💚 -56‼️+9K💚 -1500‼️+9K💚 -1532--‼️+8K💚 -1340
Matter/examples/MatterContactSensor----‼️+8K💚 -1440‼️+8K💚 -224‼️+9K💚 -1740‼️+9K💚 -1764--‼️+7K💚 -1340
Matter/examples/MatterDimmableLight----‼️+9K💚 -1424‼️+8K💚 -240‼️+9K💚 -1740‼️+9K💚 -1764--‼️+8K💚 -1340
Matter/examples/MatterEnhancedColorLight----‼️+8K💚 -1424‼️+8K💚 -240‼️+9K💚 -1740‼️+9K💚 -1764--‼️+8K💚 -1340
Matter/examples/MatterFan----‼️+8K💚 -1448‼️+8K💚 -216‼️+9K💚 -1756‼️+10K💚 -1764--‼️+8K💚 -1340
Matter/examples/MatterHumiditySensor----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1492‼️+9K💚 -1524--‼️+7K💚 -1340
Matter/examples/MatterMinimum----‼️+8K💚 -1440‼️+8K💚 -224‼️+9K💚 -1740‼️+9K💚 -1764--‼️+7K💚 -1340
Matter/examples/MatterOccupancySensor----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1500‼️+9K💚 -1532--‼️+7K💚 -1340
Matter/examples/MatterOnIdentify----‼️+8K💚 -1440‼️+8K💚 -224‼️+9K💚 -1740‼️+9K💚 -1764--‼️+8K💚 -1340
Matter/examples/MatterOnOffLight----‼️+8K💚 -1440‼️+8K💚 -224‼️+9K💚 -1732‼️+9K💚 -1756--‼️+8K💚 -1340
Matter/examples/MatterOnOffPlugin----‼️+8K💚 -1440‼️+8K💚 -224‼️+9K💚 -1732‼️+9K💚 -1756--‼️+8K💚 -1340
Matter/examples/MatterPressureSensor----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1492‼️+9K💚 -1524--‼️+7K💚 -1340
Matter/examples/MatterSmartButon----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1500‼️+9K💚 -1532--‼️+7K💚 -1340
Matter/examples/MatterTemperatureLight----‼️+8K💚 -1424‼️+8K💚 -240‼️+9K💚 -1732‼️+9K💚 -1756--‼️+8K💚 -1340
Matter/examples/MatterTemperatureSensor----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1492‼️+9K💚 -1524--‼️+7K💚 -1340
Matter/examples/MatterThermostat----‼️+8K💚 -1204‼️+7K💚 -56‼️+8K💚 -1508‼️+9K💚 -1516--‼️+8K💚 -1340
Matter/examples/WiFiProvWithinMatter----‼️+11K💚 -1336‼️+9K💚 -232‼️+12K💚 -1640‼️+9K💚 -1696--‼️+11K💚 -1220
RainMaker/examples/RMakerCustom----‼️+14K💚 -1336‼️+13K💚 -240‼️+17K💚 -1640‼️+13K💚 -1680----
RainMaker/examples/RMakerCustomAirCooler----‼️+11K💚 -1348‼️+9K💚 -240‼️+13K💚 -1640‼️+9K💚 -1680----
RainMaker/examples/RMakerSonoffDualR3----‼️+15K💚 -1336‼️+13K💚 -240‼️+17K💚 -1632‼️+13K💚 -1688----
RainMaker/examples/RMakerSwitch----‼️+15K💚 -1352‼️+13K💚 -240‼️+17K💚 -1640‼️+13K💚 -1680----
Zigbee/examples/Zigbee_Analog_Input_Output----‼️+4K⚠️+104‼️+3K⚠️+48‼️+5K0‼️+6K⚠️+28‼️+5K⚠️+4‼️+3K💚 -76
Zigbee/examples/Zigbee_Color_Dimmer_Switch----‼️+4K⚠️+88‼️+4K⚠️+56‼️+4K⚠️+12‼️+5K⚠️+12‼️+4K💚 -4‼️+3K💚 -68
Zigbee/examples/Zigbee_Electrical_AC_Sensor----‼️+4K⚠️+104‼️+3K⚠️+48‼️+5K0‼️+6K⚠️+28‼️+5K⚠️+4‼️+3K💚 -76
Zigbee/examples/Zigbee_Electrical_AC_Sensor_MultiPhase----‼️+4K⚠️+104‼️+3K⚠️+48‼️+5K0‼️+6K⚠️+28‼️+5K⚠️+4‼️+3K💚 -76
Zigbee/examples/Zigbee_Gateway----‼️+10K💚 -1204‼️+9K💚 -64‼️+10K💚 -1500----‼️+9K💚 -1332
Zigbee/examples/Zigbee_On_Off_MultiSwitch----------‼️+5K⚠️+12‼️+4K⚠️+4--
Zigbee/examples/Zigbee_On_Off_Switch----‼️+4K⚠️+88‼️+4K⚠️+56‼️+4K⚠️+4‼️+5K⚠️+4‼️+4K⚠️+4‼️+3K💚 -68
Zigbee/examples/Zigbee_Power_Outlet----------‼️+5K💚 -224‼️+4K💚 -228--
Zigbee/examples/Zigbee_Range_Extender----‼️+4K💚 -136‼️+4K💚 -120‼️+4K💚 -228‼️+5K💚 -224‼️+4K💚 -228‼️+3K💚 -68
Zigbee/examples/Zigbee_Thermostat----‼️+4K⚠️+88‼️+4K⚠️+56‼️+4K0‼️+5K⚠️+16‼️+4K0‼️+4K💚 -68
Zigbee/examples/Zigbee_Binary_Input----------‼️+5K⚠️+4‼️+5K⚠️+4--
Zigbee/examples/Zigbee_CarbonDioxide_Sensor----------‼️+5K⚠️+20‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Color_Dimmable_Light----------‼️+5K💚 -224‼️+4K💚 -244--
Zigbee/examples/Zigbee_Contact_Switch----------‼️+5K⚠️+20‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Dimmable_Light----------‼️+5K💚 -224‼️+4K💚 -244--
Zigbee/examples/Zigbee_Electrical_DC_Sensor----------‼️+6K⚠️+12‼️+5K⚠️+4--
Zigbee/examples/Zigbee_Illuminance_Sensor----------‼️+6K⚠️+12‼️+5K⚠️+4--
Zigbee/examples/Zigbee_OTA_Client----------‼️+5K💚 -232‼️+4K💚 -236--
Zigbee/examples/Zigbee_Occupancy_Sensor----------‼️+5K⚠️+12‼️+4K💚 -4--
Zigbee/examples/Zigbee_On_Off_Light----------‼️+5K💚 -224‼️+4K💚 -244--
Zigbee/examples/Zigbee_PM25_Sensor----------‼️+5K⚠️+20‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Pressure_Flow_Sensor----------‼️+5K⚠️+20‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Scan_Networks----------‼️+5K⚠️+28‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Temp_Hum_Sensor_Sleepy----------‼️+5K⚠️+20‼️+5K⚠️+4--
Zigbee/examples/Zigbee_Temperature_Sensor----------‼️+5K⚠️+32‼️+4K⚠️+16--
Zigbee/examples/Zigbee_Vibration_Sensor----------‼️+5K⚠️+20‼️+4K⚠️+4--
Zigbee/examples/Zigbee_Wind_Speed_Sensor----------‼️+5K⚠️+12‼️+4K⚠️+12--
Zigbee/examples/Zigbee_Window_Covering----------‼️+5K⚠️+4‼️+4K⚠️+4--
BluetoothSerial/examples/DiscoverConnect--------------‼️+5K💚 -1108
BluetoothSerial/examples/GetLocalMAC--------------‼️+6K💚 -1108
BluetoothSerial/examples/SerialToSerialBT--------------‼️+6K💚 -1108
BluetoothSerial/examples/SerialToSerialBTM--------------‼️+6K💚 -1108
BluetoothSerial/examples/SerialToSerialBT_Legacy--------------‼️+6K💚 -1124
BluetoothSerial/examples/SerialToSerialBT_SSP--------------‼️+5K💚 -1124
BluetoothSerial/examples/bt_classic_device_discovery--------------‼️+6K💚 -1108
BluetoothSerial/examples/bt_remove_paired_devices--------------‼️+5K💚 -1108
ESP32/examples/DeepSleep/SmoothBlink_ULP_Code--------------⚠️+1917💚 -52
Ethernet/examples/ETH_LAN8720--------------‼️+3K💚 -60

@lucasssvazlucasssvaz added Status: Review neededIssue or PR is awaiting reviewand removed Status: In Progress ⚠️Issue is in progresslabels Jun 19, 2025
@lucasssvazlucasssvaz marked this pull request as ready for review June 19, 2025 18:06
@lucasssvazlucasssvaz requested review from SuGlider and a team as code owners June 19, 2025 18:06
@lucasssvazlucasssvaz force-pushed the refactoring/ble branch 2 times, most recently from 54b16c2 to 97650b0 Compare June 19, 2025 19:17

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for the NimBLE Bluetooth stack alongside the existing Bluedroid implementation in the ESP32 BLE library. The changes update conditional compilation macros, add NimBLE-specific includes and function implementations, and update documentation across multiple files.

  • Updated conditional compilation from CONFIG_BLUEDROID_ENABLED to include CONFIG_NIMBLE_ENABLED.
  • Introduced NimBLE-specific functions and macros in core BLE files (e.g., BLEValue, BLEUUID, BLEDescriptor, etc.).
  • Updated documentation headers and maintained backward compatibility with Bluedroid.

Reviewed Changes

Copilot reviewed 63 out of 72 changed files in this pull request and generated no comments.

Show a summary per file
FileDescription
libraries/BLE/src/BLEValue.h/.cppUpdated conditional macros and added common includes for NimBLE
libraries/BLE/src/BLEUUID.h/.cppAdded NimBLE-specific handling in UUID constructors and methods
libraries/BLE/src/BLEUtils.hModified includes and macros to support both stacks
libraries/BLE/src/BLEService*.h/.cppAdded NimBLE public declarations and adjusted error handling
libraries/BLE/src/BLEEddystone*.h/.cppUpdated headers and conditional compilation for NimBLE support
...Similar conditional updates and NimBLE function implementations in other BLE classes
Comments suppressed due to low confidence (2)

libraries/BLE/src/BLEDescriptor.cpp:172

  • Consider adding a more detailed comment or documentation note explaining that manual handle setting is not supported in NimBLE and that this behavior is intentional. This will help future maintainers understand why the request is ignored in NimBLE builds.
#endif

libraries/BLE/src/BLEHIDDevice.cpp:75

  • [nitpick] In BLEHIDDevice.cpp, the battery level descriptor is added only in the Bluedroid branch. Consider either adding equivalent descriptor registration for NimBLE or clarifying in comments that NimBLE handles battery level notifications internally. This will avoid potential confusion about unsupported functionality in NimBLE builds.
#endif

Sign up for free to join this conversation on . Already have an account? Sign in to comment
Area: BLEIssues related to BLEArea: LibrariesIssue is related to Library support.Status: Review neededIssue or PR is awaiting reviewStatus: Test neededIssue needs testing
Status: In Progress

Successfully merging this pull request may close these issues.

@lucasssvaz