GPIO Schnittstelle: In 15 Minuten mit C++ die Temperatur des Raspberry Pi ausgeben – Teil 4

Bevor wir auf die GPIO Schnittstelle des Pi zugreifen, geben wir erst einmal die Temperatur aus.

GPIO Schnittstelle: In 15 Minuten mit C++ die Temperatur des Raspberry Pi ausgeben – Teil 4

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.:

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

// Temperatur.h

#ifndef __TEMPERATUR_INCLUDE__
#define __TEMPERATUR_INCLUDE__
class Temperatur{
	public:
		int ausgeben();
};
#endif

und eine Temperatur.cpp Klasse mit der Implementierung:

#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:

#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?

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.

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 ausführt wir wenn man make eingibt.

#
# Makefile für den CPP-Lehrgang
#
# Thomas Wenzlaff http://www.wenzlaff.de 
#

# 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: start-prog

start-prog: $(OBJS)
	$(CXX) $(LDFLAGS) -o start-prog $(OBJS) $(LDLIBS) 

start-prog.o: Temperatur.cpp Temperatur.h programm-4.cpp

# für das Löschen mit make clean
clean:
	$(RM) start-prog

distclean: clean

Ein make clean löscht übrigens das erzeugt Programm wieder. So dann mal weiter zum nächsten Teil …

Ähnliche Artikel:

  1. In 15 Minuten zum eigenen C++ Programm zum ausgeben der Systemtemperatur des Raspberry Pi Zero W – Teil 2
  2. GPIO Schnittstelle: Mit WiringPi in 15 Minuten auf die GPIO Ports des Raspberry Pi zugreifen – Teil 3
  3. In 15 Minuten zum eigenen C++ Programm auf dem Raspberry Pi Zero W – Teil 1

wallpaper-1019588
[Comic] Batman: City of Madness
wallpaper-1019588
Hyakushō Kizoku: Anime erhält eine dritte Staffel
wallpaper-1019588
Arcanadea: Figuren-Franchise erhält einen TV-Anime
wallpaper-1019588
Gintama: Neuer Teaser zum Spin-Off-Anime veröffentlicht