MeshCore Platforms¶
VERGELIJKEN · KIEZEN · WAT DE CHIP BEPAALT
MeshCore draait op vier platformfamilies. Dezelfde broncode, hetzelfde protocol, dezelfde radio — en toch kan de ene node dingen die de andere niet kan. Dit hoofdstuk laat zien waarom het platform uitmaakt, hoe de vier zich verhouden, wat er te koop is en hoe je kiest. Wat er in de chip zit, staat in De vier platformfamilies.
[!NOTE] Bron. Deze pagina is geverifieerd tegen de firmware zelf:
MeshCorev1.16.0 (FIRMWARE_BUILD_DATE "6 Jun 2026"), commit03b6ef4, 28 juli 2026 —platformio.ini,variants/*/platformio.ini(79 mappen, 507 build-targets),boards/*.json(41 definities),examples/companion_radio/main.cpp,src/helpers/IdentityStore.hensrc/Utils.cpp. Alle tellingen in dit hoofdstuk zijn ook gecontroleerd op commita3a1aa5(19 juli 2026) en daar identiek. Reproduceren kan mettools/platform-overview.py.
Waarom het platform uitmaakt¶
Neem het scherpste voorbeeld: een companion die via Bluetooth met je
telefoon praat. Die bestaat als build-target op ESP32 en op nRF52840, en
op geen van beide andere families. Niet omdat de hardware het niet kan —
de Raspberry Pi Pico W heeft Bluetooth aan boord — maar omdat de firmware
er geen implementatie voor heeft. In
examples/companion_radio/main.cpp r.55-66 staan de WiFi- en BLE-takken
voor RP2040 uitgecommentarieerd, en elke RP2040-variant zet
lib_ignore = BLE.
Zelfde protocol, zelfde radio, ander gedrag. Het platform bepaalt welke transporten, opslag, displays en updatemethoden beschikbaar zijn.
Let op de woordkeuze. De firmware spreekt niet van microcontrollers maar
van platforms: de vier bouwdoelen heten ESP32_PLATFORM,
NRF52_PLATFORM, RP2040_PLATFORM en STM32_PLATFORM
(platformio.ini r.63, 90, 104, 113). En drie van de vier zijn strikt
genomen geen microcontroller maar een SoC: een chip met de radio erin.
Alleen de RP2040 is een kale microcontroller.
"MeshCore ondersteunt vier microcontrollers" is dus een dubbele
versimpeling. Het zijn vier platformbases in platformio.ini, met
minstens zeven verschillende SoC's en twee processorarchitecturen.
Wat een SoC precies onderscheidt van een MCU — en waarom elke SoC een MCU bevat maar niet andersom — staat in Hardware van een node.
De vier families in één oogopslag¶
| Familie | SoC's | Core | Klok | RAM | Flash voor de app | Radio | Varianten | Build-targets |
|---|---|---|---|---|---|---|---|---|
| ESP32 | ESP32, S3, C3, C6 | Xtensa LX6/LX7 + RISC-V | 160–240 MHz | 320 KB, tot 8 MB met PSRAM | 4–16 MB | extern, via SPI | 37 | 270 |
| nRF52 | nRF52840 | Cortex-M4F | 64 MHz | 230 KB | 792–796 KB | extern, via SPI | 34 | 199 |
| RP2040 | RP2040 | 2× Cortex-M0+ | 133 MHz * | 264 KB * | 2 MB * | extern, via SPI | 4 | 22 |
| STM32WL | STM32WLE5CCU | Cortex-M4 | 48 MHz | 64 KB | 224 KB | op de die (SubGHz) | 4 | 16 |
[!NOTE] * Deze drie RP2040-cijfers staan niet in de MeshCore-repo. De vier RP2040-borden gebruiken de ingebouwde bordendefinities van PlatformIO; er is geen
boards/*.jsonvoor. Bron voor kloksnelheid, RAM en flash is de RP2040 Datasheet van Raspberry Pi Ltd. Alle overige cijfers in deze tabel komen uitboards/*.jsonenvariants/*/platformio.iniin de firmware-repo.
Wat elke familie precies meebrengt — de SoC's onder de noemer, de cores, het powermanagement en wat de chip vraagt aan geheugen en energie — staat per familie uitgewerkt in De vier platformfamilies.
Vergelijking op zes assen¶
| As | ESP32 | nRF52840 | RP2040 | STM32WL |
|---|---|---|---|---|
| Rekenkracht | het hoogst, 160–240 MHz, S3 met vectorinstructies | 64 MHz met FPU | 133 MHz, twee cores, geen FPU | 48 MHz, het laagst |
| Geheugen | ruim; PSRAM mogelijk | ruim genoeg voor alle rollen | ruim genoeg voor alle rollen | krap: 64 KB RAM, 224 KB app-flash |
| Connectiviteit | BLE, WiFi, ESP-NOW, USB | BLE en USB | alleen USB | alleen USB |
| Opslag | SPIFFS op interne flash | InternalFS plus EXTRAFS |
LittleFS | LittleFS-port in arch/stm32/ |
| Energie | het hoogst; geen powermanagement in de firmware | het laagst; als enige actief ondersteund, maar op 5 van 19 borden | geen powermanagement in de firmware | zuinig van zichzelf; geen powermanagement in de firmware |
| Flashgemak | webflasher over USB | .uf2 slepen, of OTA via Bluetooth |
.uf2 slepen |
.hex met ST-Link of DFU |
[!NOTE] Geen verbruikscijfers. In dit hoofdstuk staat geen enkel getal in mA. Die staan nergens in de firmware-repo, en cijfers uit datasheets zeggen weinig over een node met radio, display en GPS erbij. Voor het enige platform waar de firmware er echt iets aan doet, is
docs/nrf52_power_management.mdde plek om te kijken.
Welke rollen draaien op welk platform¶
Harde telling van de [env:]-blokken in variants/*/platformio.ini. Een
getal is het aantal build-targets, niet het aantal borden — één bord
levert meestal vijf tot tien targets.
| Rol | ESP32 | nRF52 | RP2040 | STM32WL |
|---|---|---|---|---|
| companion BLE | 38 | 40 | 0 | 0 |
| companion WiFi | 17 | 0 | 0 | 0 |
| companion USB | 33 | 35 | 4 | 4 |
| companion serial | 3 | 0 | 0 | 0 |
| repeater | 83 | 42 | 6 | 5 |
| room server | 34 | 35 | 4 | 0 |
| sensor | 9 | 6 | 0 | 3 |
| KISS modem | 36 | 36 | 4 | 4 |
| terminal chat | 17 | 5 | 4 | 0 |
| totaal | 270 | 199 | 22 | 16 |
Twee gaten vallen op. STM32WL heeft geen enkele room server, en RP2040 geen enkele sensor-build. Dat is geen beperking van de chip maar een keuze in de varianten: niemand heeft ze aangemaakt.
Van de 270 ESP32-targets komen er zestien van de drie C6-varianten: vijf repeater, vijf companion BLE, drie KISS modem, twee room server en één companion USB.
Wat je vandaag kunt kopen en flashen¶
De firmware bouwt voor vier families. De web flasher — de weg die de meeste mensen nemen — biedt er twee. Op de opgeslagen pagina van 27 juli 2026 staan zestig apparaten:
| Familie | Apparaten in de flasher | Aandeel | Varianten in de repo |
|---|---|---|---|
| ESP32 | 32 | 53 % | 37 |
| nRF52840 | 27 | 45 % | 34 |
| RP2040 | 1, en niet via de webflasher te flashen | 2 % | 4 |
| STM32WL | 0 | 0 % | 4 |
Het enige RP2040-apparaat in de lijst, de Pico met een WaveShare
SX1262-module, krijgt geen platform-icoon maar een generieke glyph. In de
configuratie van de flasher staat de reden: "type": "noflash". Je krijgt
een link naar het .uf2-bestand en kopieert het zelf.
Voor STM32WL staat er niets. Wie zo'n node wil, compileert zelf en flasht met ST-Link of DFU. Binnen MeshCore is STM32WL geen consumentenplatform maar een bouwerplatform.
Binnen ESP32 is de S3 dominant: 27 van de 32 apparaten. Daarnaast vier met de klassieke ESP32 (Heltec v2, LilyGo LoRa32 V2.1_1.6 en de twee T-Beams) en één met een C3 (Seeed Xiao C3). Van de C6, het sub-SoC met het "experimenteel"-label, staat er geen enkel apparaat in de lijst.
[!NOTE] De flasherlijst is geen kopie van
variants/. Zeven ESP32-S3- apparaten in de lijst — de LilyGo T-Deck Max, T-Deck Pro, T-Display Pro, T-Lora Pager, T-Watch S3 Plus, T-Watch Ultra en T5 E-Paper S3 Pro — hebben geen variant in deze repo. Die draaien de gesloten Ripple GUI- of MeshOS-firmware. Andersom staan de vier STM32WL-varianten, drie van de vier RP2040-varianten, alle drie de C6-varianten en generieke doelen alsgeneric-e22enmeshtinyniet in de flasher.
Hoe MeshCore de verschillen opvangt¶
Eén API, vier cores¶
framework = arduino staat precies één keer in de hele repo:
platformio.ini r.17, in [arduino_base]. Alle vier de platformbases
erven daarvan, en geen van de 79 varianten overschrijft het.
Toch zijn het vier verschillende Arduino-cores: Arduino-ESP32 op ESP-IDF,
de Adafruit nRF52-core op de SoftDevice, de earlephilhower arduino-pico,
en STM32duino op de STM32 HAL. Dezelfde API, vier implementaties — vandaar
de #ifdef-ketens door de hele hulplaag.
Hoe scherp dat kan zijn, blijkt uit examples/companion_radio/main.cpp
r.5-6. Daar staat een eigen _atoi() met de opmerking dat de
standaard-C-functie op sommige platforms stuk is.
Een net voorbeeld van de omgekeerde beweging is
src/helpers/IdentityStore.h r.3-11, waar één macro vier gevallen
afdekt:
#if defined(ESP32) || defined(RP2040_PLATFORM)
#define FILESYSTEM fs::FS
#elif defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
#define FILESYSTEM Adafruit_LittleFS
#endif
Alles daarboven — identiteiten opslaan, contacten bewaren — hoeft niet meer te weten op welk platform het draait.
De kern is niet Arduino-afhankelijk¶
De Arduino-afhankelijkheid zit in src/helpers/ en examples/, niet in
de protocolkern. In src/Utils.cpp r.5-7 staat #include <Arduino.h>
achter #ifdef ARDUINO, en src/MeshCore.h r.25 en r.34 gebruiken
ARDUINO alleen om debug-uitvoer aan of uit te zetten.
Het bewijs staat onderaan platformio.ini: [env:native] (r.158-168)
bouwt tegen googletest, met platform = native, mocks uit test/mocks/
en zonder ook maar één regel Arduino. Daarom kan er een Zephyr-port van
MeshCore bestaan die precies hetzelfde protocol spreekt.
Vier flashartefacten¶
| Platform | Buildscript | Resultaat | Hoe het op de node komt |
|---|---|---|---|
| ESP32 | merge-bin.py |
één .bin |
esptool of de webflasher |
| nRF52 | create-uf2.py |
.uf2 |
slepen naar de USB-schijf, of OTA via Bluetooth |
| RP2040 | upload_protocol = picotool |
.uf2 |
slepen naar de UF2-bootloader |
| STM32 | arch/stm32/build_hex.py |
.hex via objcopy -O ihex |
ST-Link of DFU |
Dat is meteen de verklaring voor de flashertabel hierboven. Alleen ESP32 en nRF52 hebben een artefact dat een webpagina rechtstreeks naar het apparaat kan schrijven.
Kiezen¶
In woorden:
- Koppeling met een telefoon nodig? Dan ESP32 of nRF52840; de andere twee hebben geen BLE-companion.
- Draait het op een batterij of zonnepaneel? nRF52840 — maar
controleer eerst of jouw bord in de tabel van
docs/nrf52_power_management.mdop "Implemented" staat. - WiFi, OTA of ESP-NOW nodig? Alleen ESP32.
- Kleine, zuinige repeater zonder telefoon, en je bouwt zelf? STM32WL. Reken op 64 KB RAM en op flashen met ST-Link of DFU.
- RP2040 is de keuze voor wie al een Pico heeft liggen en een repeater of USB-companion wil. Geen BLE, geen WiFi, geen display.
Welk concreet bord daarbij past, staat in Hardware Overzicht.
Bronnen¶
Firmware: meshcore-dev/MeshCore,
branch main, commit 03b6ef4, 28 juli 2026, v1.16.0.
platformio.ini— r.16-53[arduino_base]metframework = arduinoop r.17; r.67-70[esp32_ota]; r.158-168[env:native]variants/— 79 mappen met samen 507[env:]-blokkenboards/— 41 borddefinities metmcu,f_cpu,maximum_ram_sizeenmaximum_sizeexamples/companion_radio/main.cpp— r.5-6 de eigen_atoi()src/helpers/IdentityStore.h— r.3-11 deFILESYSTEM-abstractiesrc/Utils.cpp— r.5-7#ifdef ARDUINOmerge-bin.py,create-uf2.pyenarch/stm32/build_hex.py— de drie buildscripts die de flashartefacten maken
Apparatenlijst: opgeslagen pagina van de MeshCore web flasher, 27 juli 2026, zestig apparaten.
Niet uit de firmware-repo:
- RP2040 Datasheet, Raspberry Pi Ltd — kloksnelheid, SRAM en flash van de RP2040
Narekenen: tools/platform-overview.py
genereert tabel 1, 3 en 4 uit een kloon van de firmware-repo en een
opgeslagen flasherpagina.