Wie implementiere ich einfache Sensor-Datenübertragung in C++ im Embedded-Bereich?



  • Hallo zusammen, ich bin gerade dabei, ein kleines Embedded-Projekt in C++ zu starten, bei dem ich Sensordaten (z. B. Distanz über Ultraschall) erfasse und über Netzwerkprotokolle wie MQTT oder HTTP an eine zentrale Instanz sende.
    Ich habe darüber hinaus Beispiele aus der Arduino-Community untersucht und eine GitHub-Bibliothek gefunden, die MQTT in C++-Projekten verwendet. Meine eigentliche Frage: Wie würdet ihr in modernem C++ (z. B. C++17) eine robuste Sensor-Datenpublikation implementieren (z. B. als JSON über HTTP oder MQTT) ohne externe Frameworks? Ich suche nach einer einfachen, zuverlässigen Architektur oder Bibliothek, die in eingebetteten Systemen gut funktioniert.

    Möchte auch eine einfachere Version dieser Frage vorbereiten, falls sie erneut abgelehnt wird, soll ich sie dir mitliefern?



  • @Aria-James
    Ich verstehe deine Frage nicht so recht. Ein paar Tipps:

    • Programmiere einfach, sauber und strukturiert. Achte auf ein sauberes Design.

    • Eierlegende Wollmilchsäue sind nicht gut. Achte auf das Single-Responsibility-Prinzip.

    • Versuche Embedded Code von Standard Code zu trennen.

    • Schaue dass du möglichst Sourcen mit wenig Includes hast.

    • Du kannst Funktionen testen? Dann schreibe dementsprechend auch Testreihen für dein Testprojekt!

    • Führe Belastungstests durch. Baue eine Sensorsimulation, welche Daten mit X Hz liefert und schaue dir das Ergebnis an!

    • Nutze Logging! Du hast im Embedded Bereich oft kontinuierliche Prozesse und da macht eine Statusnachricht sehr oft Sinn!

    • Achte auf eine saubere Fehlerbehandlung. Funktionen geben gerne mal Statuscodes zurück. Gebe diese im Fehlerfall im Logging aus, sofern du nicht im Code darauf achtest.

    • Achte auf deine Zielhardware. Kleine Boards haben wenig RAM und Flash.

    • Und tue mir bitte, bitte einen Gefallen! Erschlag bitte dein Projekt nicht mit Singleton Klassen! Nur weil z.B. ein ADC auch als Singleton Klasse implementieren lässt, ist das noch lange nicht gut! Vor allen Dingen wenn man die ADC Initialisierung im Konstruktor macht und den Code vor lauter GetInstance() Aufrufen überquillt!