MeshCore firmware architectuur
Technische uitleg van de MeshCore firmware: modules, componenten en interne architectuur voor developers
MeshCore firmware: hoe werkt het?
De MeshCore firmware is de software die draait op ESP32, nRF52 en STM32 chipsets. Het is geschreven in C/C++ en bestaat uit meerdere modulaire componenten die samenwerken om het mesh-netwerk te laten functioneren.
De firmware architectuur is ontworpen met modulariteit en hardware abstraction in gedachten. Dit maakt het mogelijk om dezelfde codebase te gebruiken voor verschillende hardware platformen zonder grote aanpassingen.
Deze pagina legt uit hoe de firmware intern is gestructureerd, welke modules er zijn, en hoe ze samenwerken.
Core firmware modules
De MeshCore firmware bestaat uit 5 hoofd modules:
1. Radio module (LoRa driver)
Beheert de LoRa radio chip (SX1262, SX1276, etc). Zorgt voor transmissie, receptie, frequency hopping en power management.
2. Mesh routing module
Implementeert het mesh routing algoritme. Bepaalt welke berichten doorgestuurd moeten worden, houdt een neighbor list bij, en beheert de routing table.
3. Protocol module
Implementeert het MeshCore protocol: packet encoding/decoding, message types, encryption/decryption met AES-256.
4. Application module
Bevat de applicatie logica: tekstberichten, GPS, telemetrie, node info. Dit is wat de gebruiker ziet en gebruikt.
5. Interface module
Beheert communicatie met externe interfaces: Bluetooth (smartphone), Serial (CLI), Screen (OLED/TFT), Buttons.
System architectuur
De modules werken samen in een event-driven architectuur:
Event loop
De firmware draait een main event loop die continu checkt voor events: inkomend radio packet, Bluetooth bericht, button press, timer expired. Elk event triggert de juiste module.
Interrupt-driven radio
De LoRa chip triggert een hardware interrupt wanneer een packet wordt ontvangen. De radio module plaatst het packet in een queue, die in de event loop wordt verwerkt.
Non-blocking design
Alle operaties zijn non-blocking. Lange taken (zoals encryptie of GPS fix) gebruiken background tasks of worden gesplitst in kleinere stappen om de event loop responsive te houden.
Hardware Abstraction Layer (HAL)
De HAL maakt het mogelijk om dezelfde firmware te draaien op verschillende hardware:
GPIO abstraction
Buttons, LEDs en andere GPIO pins worden via een HAL interface aangestuurd. Elke hardware variant heeft een config file met pin mappings.
SPI/I2C abstraction
Communicatie met LoRa chip (SPI) en displays (I2C/SPI) gaat via HAL functies die per platform verschillend zijn geïmplementeerd.
Power management
Deep sleep, CPU frequency scaling en peripheral power control zijn platform-specifiek en worden via HAL geabstraheerd.
File system
Configuratie en berichten worden opgeslagen in flash. ESP32 gebruikt LittleFS, nRF52 gebruikt een andere implementatie, maar dezelfde HAL API.
Voordelen van deze architectuur
Modulariteit
Modules zijn los gekoppeld. Je kunt de routing module updaten zonder de radio module te raken.
Multi-platform
Dankzij HAL werkt dezelfde codebase op ESP32, nRF52 en STM32.
Uitbreidbaarheid
Nieuwe features zijn makkelijk toe te voegen als extra modules.
Testbaarheid
Modules kunnen afzonderlijk worden getest. Unit tests per module.
Performance
Event-driven en non-blocking design zorgt voor lage latency en goede responsiviteit.
Open source
De hele firmware is open source. Je kunt de code lezen, aanpassen en bijdragen.
Veelgestelde vragen
In welke programmeertaal is de firmware geschreven?
De MeshCore firmware is geschreven in C++ (voor de meeste modules) en C (voor low-level HAL). Het gebruikt de Arduino framework voor ESP32 en Nordic SDK voor nRF52.
Hoeveel geheugen gebruikt de firmware?
Op ESP32 gebruikt de firmware ~200-300 KB flash en ~40-60 KB RAM. Dit laat genoeg ruimte over voor berichten opslag en toekomstige features.
Kan ik eigen modules toevoegen?
Ja, de modulaire architectuur maakt het makkelijk om eigen modules toe te voegen. Bijvoorbeeld: een extra sensor module, custom routing logica, of een nieuwe interface.
Hoe vaak komt de firmware update?
MeshCore heeft een actieve ontwikkeling met releases elke 2-3 maanden. Bugfixes komen sneller, nieuwe features in major releases.
Is de firmware backwards compatible?
Ja, het protocol is backwards compatible binnen major versies. Een v2.3 node kan communiceren met v2.1 nodes. Bij een major update (v3.0) kan dit veranderen.
Duik in de MeshCore firmware
Nu je de firmware architectuur begrijpt, kun je de source code verkennen, bijdragen aan development, of eigen modificaties maken.