Raspberry Pi: C++ und MariaDB
Mithilfe eines Raspberry-Pi und C++ auf eine MariaDB-Datenbank zugreifen
Zuletzt aktualisiert am 16.03.2021In diesem Artikel wird beschrieben, wie man mit einem Raspberry-Pi und C++ auf eine MariaDB-Datenbank zugreift.
Die Datenbank kann dabei selber auf dem Raspberry-Pi laufen, sodass interessante IoT-Projekte möglich sind.
Wichtige Hinweise
- Alle Beschreibungen beziehen sich auf das Raspberry Pi OS Lite.
- Es wird eine SSH-Verbindung benötigt.
Der Artikel "Raspberry-Server" beschreibt unter anderem, wie man eine MariaDB-Datenbank auf einem Raspberry-Pi aufsetzt.
Meiner Meinung nach wäre es ziemlich mühselig, ein C++ Programm über die Konsole des Raspberry-Pi zu schreiben und zu kompilieren.
Glücklicherweise gibt es die Möglichkeit, diese Arbeit über die SSH-Schnittstelle aus der Ferne durchzuführen. Dazu verwende ich Microsoft Visual Studio Community.
Microsoft Visual Studio ist eine Entwicklungsumgebung, mit der unter andrem C++-Programme für Linux-Betriebssysteme und somit auch für den Raspberry-Pi entwickelt werden können. In der Community-Edition ist die Software kostenlos. Download Visual Studio.
Für unsere Zwecke reicht es aus, dass bei der Installation von Microsoft Visual Studio die Option "Linux Entwicklung mit C++" ausgewählt ist:
Beispielprojekt
Zunächst wird ein neues, leeres Projekt angelegt:
"Ort" gibt dem Pfad an, in dem später die Projektmappe auf dem Windows-Rechner abgelegt wird. Der Pfad auf dem Raspberry-Pi befindet sich später unter /home/USER/projects/ (Standardeinstellung).
Nun wurde das Projekt angelegt, allerdings ohne irgendeine Standardkurfiguration. Daher erstellen wir unter "Projekt" --> "Neues Element hinzufügen" --> "Visual C++" --> "C++-Datei (.cpp)" eine neue Datei mit dem Namen "main.cpp".
Diese Datei kann zum Testen so gefüllt werden:
#include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; while(1); }
SSH-Verbindung herstellen
Um das Programm nun auf dem Raspberry-Pi übertragen und kompilieren zu können, müssen wir zunächst die SSH-Verbindung einstellen.
Eine neue Verbindung kann unter "Extras" --> "Optionen" --> "Plattformübergreifend" --> "Verbindungs-Manager" hergestellt werden. In meinem Fall schaut es so aus:
Startet man den Debugging-Prozess, dann erscheint erwartungsgemäß "Hello World!" in der Konsole. Die grundlegende Konfiguration hat also funktioniert:
MariaDB Connector/C ist eine Bibliothek, welche den Zugriff auf eine MariaDB oder MySQL Datenbank über C/C++ ermöglicht.
Die grundlegende Installation lässt sich mit einem Befehl durchführen:
sudo apt-get install libmariadb3
Da wir später auch auf dem Raspberry-Pi kompilieren wollen, muss zusätzlich noch das Entwicklerpaket installiert werden:
sudo apt-get install libmariadb-dev -y
Unser Programm hat bisher keine Ahnung davon, wo sich die Dateien der installierten Bibliothek befinden. Diese Informationen müssen wir dem Compiler und dem Linker mitteilen.
Allerdings müssen wir dazu erst mal selbst wissen, welche Dinge eingebunden werden müssen. Dazu liefert die Bibliothek ein kleines Programm namens "mariadb_config" mit.
Dieses führen wir auf dem Raspberry-Pi wie folgt aus:
/usr/bin/mariadb_config
Die Ausgabe des Programms schaut in etwa so aus. Interessant sind für uns die Zeilen 6 und 7. Die notwendigen Informationen sind hervorgehoben:
Copyright 2011-2020 MariaDB Corporation AB Get compiler flags for using the MariaDB Connector/C. Usage: mariadb_config [OPTIONS] Compiler: GNU 8.3.0 --cflags [-I/usr/include/mariadb -I/usr/include/mariadb/mysql] --include [-I/usr/include/mariadb -I/usr/include/mariadb/mysql] --libs [-L/usr/lib/arm-linux-gnueabihf/ -lmariadb] --libs_r [-L/usr/lib/arm-linux-gnueabihf/ -lmariadb] --libs_sys [-ldl -lm -lpthread -lgnutls] --version [10.3.27] --cc_version [3.1.11] --socket [/var/run/mysqld/mysqld.sock] --port [3306] --plugindir [/usr/lib/arm-linux-gnueabihf/mariadb19/plugin] --tlsinfo [GnuTLS ] --variable=VAR VAR is one of: pkgincludedir [/usr/include/mariadb] pkglibdir [/usr/lib/arm-linux-gnueabihf] pkgplugindir [/usr/lib/arm-linux-gnueabihf/mariadb19/plugin]
Verzeichnisse einbinden
Die Verzeichnisse in den eckigen Klammern der Zeile 6 tragen wir in Microsoft Visual Studio unter "Debuggen" --> "Projektname: Debugeigenschaften" --> "Konfigurationseigenschaften" --> "VC++-Verzeichnisse" --> "Includeverzeichnisse" ein. Die Einzelnen Werte werden durch ein Semikolon getrennt:
/usr/include/mariadb;/usr/include/mariadb/mysql
Linker Optionen
Der Pfad in den eckigen Klammern der Zeile 7 wird in Microsoft Visual Studio unter "Debuggen" --> "Projektname: Debugeigenschaften" --> "Konfigurationseigenschaften" --> "Linker" --> "Allgemein" --> "Zusätzliche Bibliotheksverzeichnisse" eingetragen:
/usr/lib/arm-linux-gnueabihf/;%(Link.AdditionalLibraryDirectories)
Die Abhängigkeit des Linkers (Zweiter Teil in der eckigen Klammer der Zeile 7) wird in Microsoft Visual Studio unter "Debuggen" --> "Projektname: Debugeigenschaften" --> "Konfigurationseigenschaften" --> "Linker" --> "Eingabe" --> "Bibliotheksabhängigkeiten" eingetragen:
mariadb
Das nachfolgende Programm fragt alle Einträge einer Tabelle ab und gibt die Informationen in der Konsole aus. Auf eine detailliertere Beschreibung des Codes soll hier verzichtet werden.
Die Ausgabe in Microsoft Visual Studio sieht in diesem Beispiel wie folgt aus:
Programm über die Raspberry-Pi Konsole starten
Standardmäßig finden sich die über Microsoft Visual Studio erstellten Programme im Ordner "projects" des Benutzers auf dem Raspberry-Pi.
Bei diesem Beispiel kann das Programm wie folgt gestartet werden:
./projects/Datenbank/bin/ARM/Debug/Datenbank.out
Die Ausgabe in der Konsole ist wie erwartet:
Die Verbindung zur Datenbank "test" wurde erfolgreich hergestellt! ID - Name 1 - Klaus 2 - Helmut 3 - Anne Der Prozess wurde abgeschlossen.
Das Programm kann mit der Tastenkombination STRG+C beendet werden.