Firmware development

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.

radio.init(868MHz, SF9, BW125, CR4_5); radio.send(packet, size); radio.receive(callback);

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.

routing.handlePacket(packet); routing.addNeighbor(nodeId, rssi, snr); routing.findRoute(destination);

3. Protocol module

Implementeert het MeshCore protocol: packet encoding/decoding, message types, encryption/decryption met AES-256.

protocol.encodePacket(message, dest); protocol.decodePacket(rawData); protocol.encrypt(payload, key);

4. Application module

Bevat de applicatie logica: tekstberichten, GPS, telemetrie, node info. Dit is wat de gebruiker ziet en gebruikt.

app.sendMessage("Hallo", userId); app.updatePosition(lat, lon, alt); app.getTelemetry();

5. Interface module

Beheert communicatie met externe interfaces: Bluetooth (smartphone), Serial (CLI), Screen (OLED/TFT), Buttons.

bluetooth.init(); bluetooth.sendToApp(message); screen.display(text);

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.

hal_gpio_write(LED_PIN, HIGH);

SPI/I2C abstraction

Communicatie met LoRa chip (SPI) en displays (I2C/SPI) gaat via HAL functies die per platform verschillend zijn geïmplementeerd.

hal_spi_transfer(data, size);

Power management

Deep sleep, CPU frequency scaling en peripheral power control zijn platform-specifiek en worden via HAL geabstraheerd.

hal_enter_deep_sleep(seconds);

File system

Configuratie en berichten worden opgeslagen in flash. ESP32 gebruikt LittleFS, nRF52 gebruikt een andere implementatie, maar dezelfde HAL API.

hal_fs_write("config.json", data);

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.