Listing 2 zeigt Teile des Quellcodes des Testprogramms (Abbildung 3), mit dem Sie den Sensor auslesen. Die vollständige Version finden Sie auf der Heft-DVD. Listing 3 zeigt, wie Sie den Quellcode kompilieren.

Abbildung 3: Das kleine GTK+-Programm informiert Sie übersichtlich über die erhobenen Daten des Gyro-Sensors.
Die main()-Funktion aus Listing 2 erzeugt nach dem Initialisieren der I2C-Verbindung und des Fensters ein sogenanntes Grid. Dabei handelt es sich um ein tabellenähnliches Layoutelement, mit dem sich sehr einfach kleine Programme erstellen lassen. Ein Blick in die GTK+-Dokumentation [5] zu diesem Thema lohnt sich. Der restliche Teil von main() übernimmt überwiegend den Aufbau des Grids.
Die Funktion refresh() erledigt das Auslesen der Sensorwerte und setzt sie in die entsprechenden Labels. Die Zeile 70 in Listing 2 sorgt dafür, dass das alle 100 Millisekunden erfolgt. Die vorliegende Variante liest jedoch nur die High-Bytes aus. Benötigen Sie die volle Genauigkeit der Sensoren, müssen Sie das Programm entsprechend anpassen.
Bewegen Sie nach dem Start der Software den Sensor in alle Richtungen, um ein Gefühl dafür zu bekommen, wie sich die einzelnen Werte bei Bewegung verändern. Um das Programm wieder zu beenden, klicken Sie auf den Button Exit.
Listing 2
01 #include <gtk/gtk.h>
02 #include <wiringPiI2C.h>
03 int handle;
[...]
07 void my_exit(GtkWidget *widget, gpointer data)
08 {
09 gtk_main_quit();
10 }
11 gchar *i2c_communicate(int reg)
[...]
17 gboolean refresh(gpointer data)
18 {
19 wiringPiI2CWriteReg8 (handle, 0x6b, 0x00);
20 gtk_label_set_text(GTK_LABEL(label_gyro_x), i2c_communicate(0x3b) );
[...]
26 gtk_label_set_text(GTK_LABEL(label_temp), i2c_communicate(0x41));
27 return TRUE;
28 }
29 int main(int argc, char *argv[])
30 {
31 handle = wiringPiI2CSetup(0x68);
32 GtkWidget *window, *button_exit, *grid_main;
33 gtk_init(&argc,&argv);
34 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
3 gtk_window_set_title(GTK_WINDOW(window),"MPU6050");
[...]
52 gtk_grid_attach(GTK_GRID(grid_main),gtk_label_new("Temp:"),0,7,1,1);
53 gtk_grid_attach(GTK_GRID(grid_main),button_exit,0,8,3,1);
54 label_gyro_x=gtk_label_new("");
59 gtk_grid_attach(GTK_GRID(grid_main),label_gyro_x,2,1,1,1);
[...]
70 g_timeout_add(100,refresh,NULL);
71 gtk_main();
72 return 0;
73 }
Listing 3
$ gcc MPU6050.c `pkg-config --cflags gtk+-3.0 --libs` -lwiringPi -o MPU6050 $ ./MPU6050
Fazit
Der MPU6050 ist ein interessanter Sensor für all diejenigen, deren Projekte sich in irgendeiner Art bewegen oder auf Bewegungen reagieren sollen. Aufgrund der Komplexität des Chips konnte dieser Artikel aber nur oberflächlich in das Thema einsteigen. Viele weitere Details finden Sie in der 98 Seiten umfassenden Dokumentation zum MPU6050. Allerdings zeigt das Testprogramm, wie einfach sich der Sensor in der Praxis verwenden lässt. Es sollte Ihnen also kaum Probleme bereiten, das Programm zu erweitern und eigene kleine Projekte mit dem MPU6050 zu realisieren.
GTK+ installieren
Mit GTK+ erstellen Sie komponentenorientierte Benutzeroberflächen. Das Toolkit enthält viele Steuerelemente, die es erlauben, leicht eigene grafische Anwendungen zu entwickeln. Das Framework kooperiert mit dem RasPi ab Version 3 und lässt sich einfach mit Bordmitteln einrichten (Listing 4, Zeile 1 bis 3). Als Nächstes installieren Sie das Terminalprogramm Xterm (Zeile 4). Auf einem Unix-PC läuft normalerweise immer ein X-Server, der das Darstellen der grafischen Oberfläche übernimmt.
Um die Display-Ausgabe des Raspberry Pi auf einen PC umzuleiten, gibt es mehrere Möglichkeiten. Die einfachste und sicherste Methode besteht im Aufbau einer SSH-Verbindung zum RasPi mit aktivierter X-Window-Weiterleitung. Dazu erweitern Sie den Ssh-Aufruf um den Parameter -X:
$ ssh pi@RasPi-IP -X
Um zu testen, ob die Verbindung funktioniert, starten Sie nun Xterm und legen es mit & in den Hintergrund, damit sich die SSH-Sitzung weiter nutzen lässt:
$ xterm &
Nach einigen Sekunden öffnet sich ein Terminalfenster, in dem Sie auf dem Raspberry Pi arbeiten. Jetzt wissen Sie, dass das Weiterleiten der Anfragen an den X-Server funktioniert – die Voraussetzung dafür, mit der GTK+-Programmierung zu starten.
Listing 4
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install libgtk-3-dev $ sudo apt-get install xterm
Infos
- MPU6050 bei Amazon: https://www.amazon.de/MPU-6050-Modul-3-Achsen-analoge-Gyro-Sensor-Beschleunigungssensor-Modul-6050/dp/B00D1K5Z5Q
- Datenblatt MPU6050: https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
- Register MPU6050: https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf
- I2C-Testaufbau: Martin Mohr, “Durchgestuft”, RPG 04/2016, S. 80, http://www.raspi-geek.de/37019
- GTK+: https://www.gtk.org





