Libraries in MeshCore¶
LIB_DEPS · OVERERVING · VERSIEBEHEER · INVENTARIS
MeshCore is geen op zichzelf staand programma. De firmware leunt op tweeënvijftig externe libraries, die langs vier verschillende routes de build in komen, plus een handvol code die helemaal buiten het afhankelijkhedenmechanisme om wordt meegecompileerd. Dit hoofdstuk laat zien welke dat zijn, waar ze vandaan komen en waarom een build van vandaag niet dezelfde bytes oplevert als een build van een half jaar geleden.
[!NOTE] Bron. Deze pagina is geverifieerd tegen de firmware zelf:
MeshCorev1.16.0, commit03b6ef4, 28 juli 2026 — bestandenplatformio.ini, de negenenzeventigvariants/*/platformio.ini,lib/,arch/ensrc/helpers/sensors/.
Wat een lib_dep is¶
PlatformIO beschrijft een project in platformio.ini. Onder de sleutel
lib_deps staat per sectie welke libraries die sectie nodig heeft. Bij het
bouwen haalt PlatformIO die op — uit zijn eigen registry, van een URL of van
een pad op schijf — pakt ze uit in .pio/libdeps/<omgeving>/ en zet ze op
het includepad van de compiler.
MeshCore heeft tachtig van die bestanden: de platformio.ini in de
projectroot plus negenenzeventig in variants/. De root laadt ze allemaal
in via extra_configs:
platformio.ini r.11-14
[platformio]
extra_configs =
variants/*/platformio.ini
platformio.local.ini
Samen declareren die tachtig bestanden tweeënvijftig unieke libraries. De root noemt er achtentwintig; de rest komt uit de varianten.
De vier binnenhaalroutes¶
Registry met een versiebereik. De gewone vorm. De naam bestaat uit een
auteursprefix en een librarynaam, gevolgd door een bereik met ^ of ~.
platformio.ini r.22
jgromes/RadioLib @ ^7.6.0
Registry, exact vastgepind. Zonder ^ of ~ staat er precies één
versie. In de hele repo gebeurt dat bij vier libraries.
platformio.ini r.26
electroniccats/CayenneLPP @ 1.6.1
Git-tag of zip met een commit-hash. PlatformIO accepteert een URL. Achter
# staat een tag of commit; wat daar staat, bepaalt wat je krijgt.
platformio.ini r.95
https://github.com/oltaco/CustomLFS#0.2.2
In variants/ staan daarnaast vier URL-declaraties. Drie daarvan halen een
zip van een volledige commit-hash binnen: NMIoT/meshsolar en de twee forks
van heltec-eink-modules, van Quency-D en van todd-herbert. De vierde,
SoulOfNoob/GxEPD2, is een .git-URL zonder revisie erachter en ligt dus
niet vast.
Lokaal pad. Code die in de MeshCore-repo zelf staat, aangewezen met
file://. Er is geen upstream om vanaf te halen en geen versienummer om te
verhogen.
platformio.ini r.70
file://arch/esp32/AsyncElegantOTA
platformio.ini r.119
file://arch/stm32/Adafruit_LittleFS_stm32
Wat er buiten lib_deps om binnenkomt¶
Niet alle externe code loopt via lib_deps. PlatformIO compileert alles in
de map lib/ automatisch mee. MeshCore gebruikt dat voor twee dingen:
lib/ed25519— een C-implementatie van Ed25519, meegeleverd in de repo. Ziecore/crypto.md, waar hij naast de Ed25519 vanrweather/Cryptostaat.lib/nrf52— headers en de SoftDevice-APIs140_nrf52_7.3.0_APIvoor het nRF52-platform.
Daarnaast staat er een complete sensordriver gewoon in de broncode:
src/helpers/sensors/RAK12035_SoilMoisture.h en .cpp. Die komt in geen
enkele lib_deps-regel voor. Zie other/sensors.md.
Frameworklibraries¶
Twee regels in [arduino_base] hebben geen auteursprefix en geen versie:
platformio.ini r.20-21
SPI
Wire
Dat zijn geen registrypakketten maar frameworklibraries: ze zitten in het
frameworkpakket van het platform zelf. Op ESP32 komen ze uit Arduino-ESP32,
op nRF52 uit de Adafruit nRF52-core, op RP2040 uit arduino-pico en op STM32
uit STM32duino. De naam is hetzelfde, de implementatie niet. Hetzelfde geldt
voor SubGhz op r.120. Zie core/wire-spi.md en
core/subghz.md.
Overerving¶
[arduino_base] bevat zeven lib_deps-regels. Elke variant erft daarvan,
direct of via een platformsectie, en daarmee gelden die zeven voor alle 507
build-targets in de repo. Het achtste target, [env:native], is geen
Arduino-build en erft niets.
De platformsecties gaan daar op twee manieren mee om:
platformio.ini r.57-58
[esp32_base]
extends = arduino_base
platformio.ini r.93-95
lib_deps =
${arduino_base.lib_deps}
https://github.com/oltaco/CustomLFS#0.2.2
[esp32_base] definieert zelf helemaal geen lib_deps en houdt dus wat
extends hem geeft. [nrf52_base] (r.93) en [stm32_base] (r.118) hebben
wél een eigen lib_deps, en die vervangt de geërfde sleutel in plaats van
hem aan te vullen. Daarom moeten die twee ${arduino_base.lib_deps}
expliciet herhalen: zonder die regel zouden RadioLib, Crypto, RTClib,
RV3028 en CayenneLPP van het nRF52- en STM32-platform verdwijnen.
Zulke ${sectie.lib_deps}-verwijzingen komen 572 keer voor in de tachtig
bestanden. tools/library-overview.py lost ze bewust niet op, want dan zou
niet meer zichtbaar zijn welke variant van welke basis erft.
Wat ^ betekent¶
^7.6.0 staat voor: minimaal 7.6.0, maar onder 8.0.0. ~2.0.6 is nauwer —
minimaal 2.0.6, onder 2.1.0. 1.6.1 zonder teken is precies die versie.
Het gevolg is dat de meeste libraries in deze lijst niet vastliggen. Wie
vandaag bouwt met jgromes/RadioLib @ ^7.6.0 krijgt de nieuwste 7.x die op
dat moment in de registry staat; wie dat een half jaar geleden deed kreeg
een andere. De firmware is reproduceerbaar in gedrag, niet in bytes. Alleen
de vier exact vastgepinde libraries, de tagged git-URL en de twee lokale
paden leveren over de tijd hetzelfde resultaat.
Inventaris¶
Alle tweeënvijftig libraries, met de route waarlangs ze binnenkomen, in
hoeveel van de tachtig platformio.ini-bestanden ze gedeclareerd staan, en
het hoofdstuk waar ze behandeld worden. Een · achter de naam betekent: ook
in de root gedeclareerd.
De tweede tabel telt in hoeveel firmwarebronbestanden een library
daadwerkelijk genoemd wordt. Geteld wordt over de 590 bestanden met de
extensie .h, .hpp, .c, .cpp of .ino onder src/, examples/,
test/, arch/, lib/ en variants/; de kolom Token geeft het
zoekpatroon, zodat het cijfer na te rekenen is.
Gegenereerd met tools/library-overview.py tegen commit 03b6ef4.
| Library | Versie | Route | .ini |
Soort | Hoofdstuk |
|---|---|---|---|---|---|
adafruit/Adafruit AHTX0 · |
^2.0.5 |
registry, range | 3 | ondersteunend | other/sensors.md |
adafruit/Adafruit BME280 Library · |
^2.3.0 |
registry, range | 6 | ondersteunend | other/sensors.md |
adafruit/Adafruit BME680 Library · |
^2.0.4 |
registry, range | 1 | ondersteunend | other/sensors.md |
adafruit/Adafruit BMP085 Library · |
^1.2.4 |
registry, range | 1 | ondersteunend | other/sensors.md |
adafruit/Adafruit BMP280 Library · |
^2.6.8 |
registry, range | 2 | ondersteunend | other/sensors.md |
adafruit/Adafruit BusIO |
^1.17.2 |
registry, range | 1 | ondersteunend | other/displays.md |
adafruit/Adafruit EPD |
4.6.1 |
registry, pinned | 1 | ondersteunend | other/displays.md |
adafruit/Adafruit GFX Library |
^1.12.1 |
registry, range | 8 | ondersteunend | other/displays.md |
adafruit/Adafruit INA219 · |
^1.2.3 |
registry, range | 3 | ondersteunend | other/power.md |
adafruit/Adafruit INA260 Library · |
^1.5.3 |
registry, range | 1 | ondersteunend | other/power.md |
adafruit/Adafruit INA3221 Library · |
^1.0.1 |
registry, range | 3 | ondersteunend | other/power.md |
adafruit/Adafruit LIS3DH |
^1.2.4 |
registry, range | 1 | ondersteunend | other/peripherals.md |
adafruit/Adafruit MLX90614 Library · |
^2.1.5 |
registry, range | 1 | ondersteunend | other/sensors.md |
adafruit/Adafruit NeoPixel |
^1.10.0 · ^1.12.3 |
registry, range | 3 | ondersteunend | other/peripherals.md |
adafruit/Adafruit SH110X |
^2.1.13 · ~2.1.13 |
registry, range | 7 | ondersteunend | other/displays.md |
adafruit/Adafruit SHT4x Library |
^1.0.4 |
registry, range | 1 | ondersteunend | other/sensors.md |
adafruit/Adafruit SHTC3 Library · |
^1.0.1 |
registry, range | 1 | ondersteunend | other/sensors.md |
adafruit/Adafruit SSD1306 |
^2.5.13 |
registry, range | 23 | ondersteunend | other/displays.md |
adafruit/Adafruit ST7735 and ST7789 Library |
^1.11.0 |
registry, range | 6 | ondersteunend | other/displays.md |
file://arch/stm32/Adafruit_LittleFS_stm32 · |
— | local path | 1 | kern | core/littlefs-stm32.md |
adafruit/Adafruit_VL53L0X · |
^1.2.4 |
registry, range | 1 | ondersteunend | other/sensors.md |
arduino-libraries/Arduino_LPS22HB · |
^1.0.2 |
registry, range | 1 | ondersteunend | other/sensors.md |
file://arch/esp32/AsyncElegantOTA · |
— | local path | 1 | kern | core/asyncelegantota.md |
densaugeo/base64 |
~1.4.0 |
registry, range | 76 | ondersteunend | other/utilities.md |
finitespace/BME280 |
^3.0.0 |
registry, range | 1 | ondersteunend | other/sensors.md |
boschsensortec/BSEC Software Library |
^1.8.1492 |
registry, range | 2 | ondersteunend | other/sensors.md |
electroniccats/CayenneLPP · |
1.6.1 |
registry, pinned | 1 | kern | core/cayenne-lpp.md |
bakercp/CRC32 |
^2.0.0 |
registry, range | 15 | ondersteunend | other/utilities.md |
rweather/Crypto · |
^0.4.0 |
registry, range | 3 | kern | core/crypto.md |
oltaco/CustomLFS · |
0.2.2 |
git/zip URL | 1 | kern | core/custom-lfs.md |
ESP32Async/ESPAsyncWebServer · |
3.10.3 |
registry, pinned | 1 | kern | core/espasyncwebserver.md |
google/googletest · |
1.17.0 |
registry, pinned | 1 | ondersteunend | other/testing.md |
zinggjm/GxEPD2 |
1.6.2 |
registry, pinned | 5 | ondersteunend | other/displays.md |
SoulOfNoob/GxEPD2 |
— | git/zip URL | 1 | ondersteunend | other/displays.md |
Quency-D/heltec-eink-modules |
563dd41 |
git/zip URL | 2 | ondersteunend | other/displays.md |
todd-herbert/heltec-eink-modules |
9207eb6 |
git/zip URL | 1 | ondersteunend | other/displays.md |
robtillaart/INA226 · |
^0.6.4 |
registry, range | 1 | ondersteunend | other/power.md |
lovyan03/LovyanGFX |
^1.2.7 |
registry, range | 1 | ondersteunend | other/displays.md |
melopero/Melopero RV3028 · |
^1.1.0 |
registry, range | 1 | kern | core/rv3028.md |
NMIoT/meshsolar |
dfc5330 |
git/zip URL | 1 | ondersteunend | other/power.md |
stevemarple/MicroNMEA · |
^2.0.6 · ~2.0.6 |
registry, range | 20 | ondersteunend | other/gps.md |
end2endzone/NonBlockingRTTTL |
^1.3.0 |
registry, range | 17 | ondersteunend | other/peripherals.md |
maxpromer/PCA9557-arduino |
— | registry, no version | 1 | ondersteunend | other/peripherals.md |
jgromes/RadioLib · |
^7.6.0 |
registry, range | 1 | kern | core/radiolib.md |
adafruit/RTClib · |
^2.1.3 |
registry, range | 7 | kern | core/rtclib.md |
sensirion/Sensirion I2C SHT4x · |
^1.1.2 |
registry, range | 1 | ondersteunend | other/sensors.md |
sparkfun/SparkFun u-blox GNSS Arduino Library |
^2.2.27 |
registry, range | 6 | ondersteunend | other/gps.md |
SPI · |
— | framework package | 1 | kern | core/wire-spi.md |
SubGhz · |
— | framework package | 1 | kern | core/subghz.md |
olikraus/U8g2 |
^2.35.19 |
registry, range | 1 | ondersteunend | other/displays.md |
Wire · |
— | framework package | 1 | kern | core/wire-spi.md |
lewisxhe/XPowersLib |
^0.2.7 |
registry, range | 3 | ondersteunend | other/power.md |
| Library | Token | Bronbestanden |
|---|---|---|
RadioLib |
RadioLib |
94 |
Wire |
\bWire\b |
149 |
SPI |
\bSPI\b |
83 |
RTClib |
RTClib |
11 |
Melopero RV3028 |
RV3028 |
1 |
CayenneLPP |
CayenneLPP |
24 |
Crypto (rweather) |
<AES\.h>|<SHA256\.h>|<Ed25519\.h> |
5 |
ed25519 (vendored) |
ed25519_|ed_25519\.h |
8 |
CustomLFS |
CustomLFS |
2 |
SubGhz |
SubGhz|STM32WL |
11 |
ESPAsyncWebServer |
ESPAsyncWebServer|AsyncWebServer |
3 |
AsyncElegantOTA |
AsyncElegantOTA |
3 |
MicroNMEA |
MicroNMEA |
46 |
SparkFun u-blox GNSS |
SFE_UBLOX|u-blox_GNSS |
1 |
base64 |
base64\.hpp|decode_base64|encode_base64 |
1 |
CRC32 |
<CRC32\.h> |
3 |
NonBlockingRTTTL |
rtttl::|NonBlockingRtttl |
2 |
XPowersLib |
XPowers |
2 |
PCA9557-arduino |
PCA9557 |
4 |
googletest |
gtest/gtest\.h |
1 |