Bevor wir auf die GPIO Schnittstelle des Pi zugreifen, geben wir erst einmal die Temperatur aus.
Der Raspi speichert die Systemtemperatur in der Datei /sys/class/thermal/thermal_zone*/temp. Wenn wir also die Datei mit dem Systemkommando cat ausgeben, haben wir die Temperatur ausgelesen.
Z.b.:
1 2 3 |
cat /sys/class/thermal/thermal_zone*/temp # Ergebnis 35780 |
Dafür erstellen wir uns zu erst eine neue Klasse Temperatur mit der Methode int ausgeben(). So können wir auch sehen, wie mehrere Klassen zusammenspielen. Also eine Temperatur.h Datei mit der Definition
1 2 3 4 5 6 7 8 9 |
// Temperatur.h #ifndef __TEMPERATUR_INCLUDE__ #define __TEMPERATUR_INCLUDE__ class Temperatur{ public: int ausgeben(); }; #endif |
und eine Temperatur.cpp Klasse mit der Implementierung:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> #include <fstream> #include <cstdlib> using namespace std; // (c) 2018 Thomas Wenzlaff class Temperatur { public: Temperatur(); ~Temperatur(); int ausgeben(); }; Temperatur::Temperatur(){ } Temperatur::~Temperatur(){ } int Temperatur::ausgeben(){ system("cat /sys/class/thermal/thermal_zone*/temp >temp.txt"); cout << ifstream("temp.txt").rdbuf(); return 0; } |
Die ausgeben Methode ruft einfach ein System Kommando auf, schreibt das Ergebnis in eine eigene temp.txt Datei und gibt das Ergebniss auf der Konsole aus. Jetzt brauchen wir noch ein kurzes Testprogramm mit Namen programm-4.cpp, das die Temperatur Klasse instanziiert und die Methode ausführt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include "Temperatur.h" using namespace std; // (c) 2018 Thomas Wenzlaff // programm-4.cpp #define PROGRAMM_VERSION 4 int main() { cout << "www.wenzlaff.de" << endl; cout << "Programm Version " << PROGRAMM_VERSION << endl; Temperatur temperatur; cout << "Raspberry Pi Temperatur " << temperatur.ausgeben() << " Grad Celsius"; return 0; } |
Wie werden nun die beiden Programme compiliert?
1 |
g++ -Wall -ansi -o start-prg-4 Temperatur.cpp programm-4.cpp |
Wir compilieren jetzt immer mit -Wall um möglichst viele Warnungen zu sehen und mit -ansi um den Standard auszugeben. Mit -o geben wir den Namen des outputfile an. Also in diesem Fall start-prg-4. Weitere Parameter können auf den man Pages nachgelesen werden.
Nun können wir das compilierte Programm ausführen mit ./start-prg-4 und das Ergebnis, ist die Temperatur.
1 2 3 |
www.wenzlaff.de Programm Version 4 Raspberry Pi Temperatur 35780 |
Die Temperatur muss noch durch 1000 geteilt werden. Wie geht das? Hausaufgabe! Ergebnis gern als Kommentar oder Pull Request.
Den ganzen Quellcode gibt es kostenlos auf GitHub zum download.
Jetzt will ich noch für diese Kommandozeile ein Makefile schreiben, das automatisch ausgeführt wir wenn man make eingibt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# # Makefile für den CPP-Lehrgang # # Thomas Wenzlaff http://www.wenzlaff.de # # Der Programm Name PRGNAME=start-prog # Der CPP Compiler CXX=g++ # Flags LDFLAGS=-Wall -ansi # Die Quellcode Dateien SRCS=programm-4.cpp Temperatur.cpp OBJS=$(subst .cc,.o,$(SRCS)) # Der Programmname der erzeugt wird all: $(PRGNAME) start-prog: $(OBJS) $(CXX) $(LDFLAGS) -o $(PRGNAME) $(OBJS) $(LDLIBS) # für das Löschen mit make clean clean: $(RM) $(PRGNAME) distclean: clean |
Ein make clean löscht übrigens das erzeugt Programm wieder. Und der Zeile 20 und 24 muss ein TAB am Anfang sein, und keine Leerzeichen!
So dann mal weiter zum nächsten Teil …