{"id":9618,"date":"2018-02-01T02:22:07","date_gmt":"2018-02-01T01:22:07","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=9618"},"modified":"2018-11-04T11:56:36","modified_gmt":"2018-11-04T10:56:36","slug":"gpio-schnittstelle-in-15-minuten-mit-c-die-temperatur-des-raspberry-pi-ausgeben-teil-4","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=9618","title":{"rendered":"GPIO Schnittstelle: In 15 Minuten mit C++ die Temperatur des Raspberry Pi ausgeben \u2013 Teil 4"},"content":{"rendered":"<p>Bevor wir auf die GPIO Schnittstelle des Pi zugreifen, geben wir erst einmal die Temperatur aus. <\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung.png\" alt=\"\" width=\"2732\" height=\"2048\" class=\"aligncenter size-full wp-image-9540\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung.png 2732w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung-300x225.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung-768x576.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Cool-Programmierung-1024x768.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Der Raspi speichert die Systemtemperatur in der Datei <strong>\/sys\/class\/thermal\/thermal_zone*\/temp<\/strong>. Wenn wir also die Datei mit dem Systemkommando <strong>cat<\/strong> ausgeben, haben wir die Temperatur ausgelesen.<br \/>\nZ.b.:<\/p>\n<pre class=\"lang:default decode:true \" >\r\ncat \/sys\/class\/thermal\/thermal_zone*\/temp\r\n# Ergebnis\r\n35780<\/pre>\n<p><\/strong><br \/>\nDaf\u00fcr erstellen wir uns zu erst eine neue Klasse <strong>Temperatur<\/strong> mit der Methode <strong>int ausgeben()<\/strong>. So k\u00f6nnen wir auch sehen, wie mehrere Klassen zusammenspielen. Also eine <strong>Temperatur.h<\/strong> Datei mit der Definition<br \/>\n<!--more--><\/p>\n<pre class=\"lang:c++ decode:true \" >\r\n\/\/ Temperatur.h\r\n\r\n#ifndef __TEMPERATUR_INCLUDE__\r\n#define __TEMPERATUR_INCLUDE__\r\nclass Temperatur{\r\n\tpublic:\r\n\t\tint ausgeben();\r\n};\r\n#endif<\/pre>\n<p>und eine <strong>Temperatur.cpp<\/strong> Klasse mit der Implementierung:<\/p>\n<pre class=\"lang:c++ decode:true \" >\r\n#include &lt;iostream&gt;\r\n#include &lt;fstream&gt;\r\n#include &lt;cstdlib&gt;\r\n\r\nusing namespace std;\r\n\/\/ (c) 2018 Thomas Wenzlaff\r\nclass Temperatur\r\n{\r\npublic:\r\n\t\tTemperatur();\r\n\t\t~Temperatur();\r\n\r\n\t\tint ausgeben();\r\n};\r\n\r\nTemperatur::Temperatur(){\r\n}\r\nTemperatur::~Temperatur(){\r\n}\r\nint Temperatur::ausgeben(){\r\n\r\nsystem(\"cat \/sys\/class\/thermal\/thermal_zone*\/temp &gt;temp.txt\");\r\ncout &lt;&lt;  ifstream(\"temp.txt\").rdbuf();\r\n\r\nreturn 0;\r\n}<\/pre>\n<p>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 <strong>programm-4.cpp<\/strong>, das die Temperatur Klasse instanziiert und die Methode ausf\u00fchrt:<\/p>\n<pre class=\"lang:c++ decode:true \" >\r\n#include &lt;iostream&gt;\r\n#include \"Temperatur.h\"\r\n\r\nusing namespace std;\r\n\r\n\/\/ (c) 2018 Thomas Wenzlaff\r\n\/\/ programm-4.cpp\r\n\r\n#define PROGRAMM_VERSION 4\r\n\r\nint main()\r\n{\r\n\tcout &lt;&lt; \"www.wenzlaff.de\" &lt;&lt; endl;\r\n\tcout &lt;&lt; \"Programm Version \" &lt;&lt; PROGRAMM_VERSION &lt;&lt; endl;\r\n\r\n\tTemperatur temperatur;\r\n\tcout &lt;&lt; \"Raspberry Pi Temperatur \" &lt;&lt; temperatur.ausgeben() &lt;&lt; \" Grad Celsius\";\r\n\r\n\treturn 0;\r\n}<\/pre>\n<p>Wie werden nun die beiden Programme compiliert?<\/p>\n<pre class=\"lang:default decode:true \" >\r\ng++ -Wall -ansi -o start-prg-4 Temperatur.cpp programm-4.cpp\r\n<\/pre>\n<p>Wir compilieren jetzt immer mit <strong>-Wall<\/strong> um m\u00f6glichst viele Warnungen zu sehen und mit <strong>-ansi<\/strong> um den Standard auszugeben. Mit <strong>-o<\/strong> geben wir den Namen des outputfile an. Also in diesem Fall start-prg-4. Weitere Parameter k\u00f6nnen auf den <a href=\"https:\/\/linux.die.net\/man\/1\/gcc\">man Pages<\/a> nachgelesen werden.<\/p>\n<p>Nun k\u00f6nnen wir das compilierte Programm ausf\u00fchren mit <strong>.\/start-prg-4<\/strong> und das Ergebnis, ist die Temperatur. <\/p>\n<pre class=\"lang:default decode:true \" >www.wenzlaff.de\r\nProgramm Version 4\r\nRaspberry Pi Temperatur 35780\r\n<\/pre>\n<p>Die Temperatur muss noch durch 1000 geteilt werden. Wie geht das? Hausaufgabe! Ergebnis gern als Kommentar oder Pull Request.<\/p>\n<p>Den ganzen Quellcode gibt es kostenlos auf <a href=\"https:\/\/github.com\/IT-Berater\/CPP-Lehrgang\/tree\/master\/Lektion-4\" rel=\"noopener\" target=\"_blank\">GitHub<\/a> zum download.<\/p>\n<p>Jetzt will ich noch f\u00fcr diese Kommandozeile ein Makefile schreiben, das automatisch ausgef\u00fchrt wir wenn man <strong>make<\/strong> eingibt.<\/p>\n<pre class=\"lang:c++ decode:true \" >\r\n#\r\n# Makefile f\u00fcr den CPP-Lehrgang\r\n#\r\n# Thomas Wenzlaff http:\/\/www.wenzlaff.de \r\n#\r\n\r\n# Der Programm Name\r\nPRGNAME=start-prog\r\n# Der CPP Compiler\r\nCXX=g++\r\n# Flags\r\nLDFLAGS=-Wall -ansi\r\n# Die Quellcode Dateien\r\nSRCS=programm-4.cpp Temperatur.cpp\r\nOBJS=$(subst .cc,.o,$(SRCS))\r\n# Der Programmname der erzeugt wird\r\nall: $(PRGNAME)\r\n\r\nstart-prog: $(OBJS)\r\n\t$(CXX) $(LDFLAGS) -o $(PRGNAME) $(OBJS) $(LDLIBS) \r\n\r\n# f\u00fcr das L\u00f6schen mit make clean\r\nclean:\r\n\t$(RM) $(PRGNAME)\r\n\r\ndistclean: clean\r\n<\/pre>\n<p>Ein <strong>make clean<\/strong> l\u00f6scht \u00fcbrigens das erzeugt Programm wieder. Und der Zeile 20 und 24 muss ein <strong>TAB<\/strong> am Anfang sein, und keine Leerzeichen!<br \/>\nSo dann mal weiter zum n\u00e4chsten Teil &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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.: cat \/sys\/class\/thermal\/thermal_zone*\/temp # Ergebnis 35780 Daf\u00fcr erstellen wir uns zu erst eine neue Klasse &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=9618\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eGPIO Schnittstelle: In 15 Minuten mit C++ die Temperatur des Raspberry Pi ausgeben \u2013 Teil 4\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1995,1025],"class_list":["post-9618","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-gpio","tag-pi"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/9618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9618"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/9618\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9618"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}