Firmware-Entwicklung

MeshCore Firmware-Architektur

Technische Erklärung der MeshCore Firmware: Module, Komponenten und interne Architektur für Entwickler

MeshCore Firmware: Wie funktioniert sie?

Die MeshCore Firmware ist die Software, die auf ESP32, nRF52 und STM32 Chipsets läuft. Sie ist in C/C++ geschrieben und besteht aus mehreren modularen Komponenten, die zusammenarbeiten, um das Mesh-Netzwerk funktionieren zu lassen.

Die Firmware-Architektur ist mit Modularität und Hardware-Abstraktion im Sinn konzipiert. Dies ermöglicht es, dieselbe Codebasis für verschiedene Hardware-Plattformen ohne große Anpassungen zu verwenden.

Diese Seite erklärt, wie die Firmware intern strukturiert ist, welche Module es gibt und wie sie zusammenarbeiten.

Kern-Firmware-Module

Die MeshCore Firmware besteht aus 5 Hauptmodulen:

1. Radio-Modul (LoRa-Treiber)

Verwaltet den LoRa-Funkchip (SX1262, SX1276, etc.). Zuständig für Übertragung, Empfang, Frequency Hopping und Power Management.

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

2. Mesh-Routing-Modul

Implementiert den Mesh-Routing-Algorithmus. Bestimmt, welche Nachrichten weitergeleitet werden sollen, führt eine Nachbarliste und verwaltet die Routing-Tabelle.

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

3. Protokoll-Modul

Implementiert das MeshCore-Protokoll: Paket-Encoding/Decoding, Nachrichtentypen, Verschlüsselung/Entschlüsselung mit AES-256.

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

4. Anwendungs-Modul

Enthält die Anwendungslogik: Textnachrichten, GPS, Telemetrie, Node-Info. Das ist es, was der Benutzer sieht und verwendet.

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

5. Interface-Modul

Verwaltet die Kommunikation mit externen Schnittstellen: Bluetooth (Smartphone), Serial (CLI), Screen (OLED/TFT), Buttons.

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

System-Architektur

Die Module arbeiten in einer ereignisgesteuerten Architektur zusammen:

Event Loop

Die Firmware führt eine Haupt-Event-Loop aus, die kontinuierlich auf Events prüft: eingehendes Radio-Paket, Bluetooth-Nachricht, Button-Druck, Timer abgelaufen. Jedes Event triggert das entsprechende Modul.

Interrupt-gesteuertes Radio

Der LoRa-Chip triggert einen Hardware-Interrupt, wenn ein Paket empfangen wird. Das Radio-Modul platziert das Paket in einer Queue, die in der Event Loop verarbeitet wird.

Non-Blocking Design

Alle Operationen sind non-blocking. Lange Aufgaben (wie Verschlüsselung oder GPS-Fix) verwenden Background-Tasks oder werden in kleinere Schritte aufgeteilt, um die Event Loop reaktionsfähig zu halten.

Hardware Abstraction Layer (HAL)

Die HAL ermöglicht es, dieselbe Firmware auf verschiedener Hardware auszuführen:

GPIO-Abstraktion

Buttons, LEDs und andere GPIO-Pins werden über eine HAL-Schnittstelle angesteuert. Jede Hardware-Variante hat eine Config-Datei mit Pin-Mappings.

hal_gpio_write(LED_PIN, HIGH);

SPI/I2C-Abstraktion

Kommunikation mit LoRa-Chip (SPI) und Displays (I2C/SPI) erfolgt über HAL-Funktionen, die pro Plattform unterschiedlich implementiert sind.

hal_spi_transfer(data, size);

Power Management

Deep Sleep, CPU-Frequenzskalierung und Peripheral Power Control sind plattformspezifisch und werden über HAL abstrahiert.

hal_enter_deep_sleep(seconds);

Dateisystem

Konfiguration und Nachrichten werden im Flash gespeichert. ESP32 verwendet LittleFS, nRF52 eine andere Implementierung, aber dieselbe HAL-API.

hal_fs_write("config.json", data);

Vorteile dieser Architektur

🔧

Modularität

Module sind lose gekoppelt. Sie können das Routing-Modul aktualisieren, ohne das Radio-Modul zu beeinflussen.

📱

Multi-Plattform

Dank HAL funktioniert dieselbe Codebasis auf ESP32, nRF52 und STM32.

🔄

Erweiterbarkeit

Neue Features können einfach als zusätzliche Module hinzugefügt werden.

🐛

Testbarkeit

Module können separat getestet werden. Unit-Tests pro Modul.

Performance

Ereignisgesteuertes und non-blocking Design sorgt für niedrige Latenz und gute Reaktionsfähigkeit.

🔓

Open Source

Die gesamte Firmware ist Open Source. Sie können den Code lesen, anpassen und beitragen.

Häufig gestellte Fragen

In welcher Programmiersprache ist die Firmware geschrieben?

Die MeshCore Firmware ist in C++ (für die meisten Module) und C (für Low-Level HAL) geschrieben. Sie verwendet das Arduino Framework für ESP32 und Nordic SDK für nRF52.

Wie viel Speicher verwendet die Firmware?

Auf ESP32 verwendet die Firmware ~200-300 KB Flash und ~40-60 KB RAM. Das lässt genug Platz für Nachrichtenspeicher und zukünftige Features.

Kann ich eigene Module hinzufügen?

Ja, die modulare Architektur macht es einfach, eigene Module hinzuzufügen. Zum Beispiel: ein zusätzliches Sensor-Modul, benutzerdefinierte Routing-Logik oder eine neue Schnittstelle.

Wie oft kommt ein Firmware-Update?

MeshCore wird aktiv entwickelt mit Releases alle 2-3 Monate. Bugfixes kommen schneller, neue Features in Major-Releases.

Ist die Firmware abwärtskompatibel?

Ja, das Protokoll ist innerhalb von Major-Versionen abwärtskompatibel. Ein v2.3 Node kann mit v2.1 Nodes kommunizieren. Bei einem Major-Update (v3.0) kann sich dies ändern.

Tauchen Sie ein in die MeshCore Firmware

Jetzt, da Sie die Firmware-Architektur verstehen, können Sie den Quellcode erkunden, zur Entwicklung beitragen oder eigene Modifikationen vornehmen.