{"id":9543,"date":"2018-01-12T05:05:57","date_gmt":"2018-01-12T04:05:57","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=9543"},"modified":"2024-03-15T09:30:17","modified_gmt":"2024-03-15T08:30:17","slug":"gpio-schnittstelle-mit-wiringpi-in-15-minuten-auf-die-gpio-ports-des-raspberry-pi-zugreifen-teil-3","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=9543","title":{"rendered":"GPIO Schnittstelle: Mit WiringPi in 15 Minuten auf die GPIO Ports des Raspberry Pi zugreifen &#8211; Teil 3"},"content":{"rendered":"<p>Mit der wiringpi kann man leicht auf die GPIO Ports des Raspberry Pi zugreifen. Mit den Pins kann man dann leicht Hardware steuern. Auf dem <a href=\"https:\/\/developer-blog.net\/raspberry-pi-gpio-schnittstelle-teil-1\/\" rel=\"noopener\" target=\"_blank\">Blog<\/a> gibt es eine gute ausf\u00fchrliche Anleitung. Das will ich nicht wiederholen, sondern hier geht es darum wie man mit C++ auf die GPIO zugreifen kann. Obwohl man auch in 15 Minuten nach Installation der wiringpi Api die GPIO \u00fcber Bash Scripte oder Python ansprechen kann.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung.png\" alt=\"\" width=\"2732\" height=\"2048\" class=\"aligncenter size-full wp-image-9549\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung.png 2732w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung-300x225.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung-768x576.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Gpio-Programmierung-1024x768.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Hier nun die n\u00f6tigen Vorarbeiten um C++ mit wiringpi machen zu k\u00f6nnen. Es sind dort auch einige <strong>C<\/strong> Beispiele im Repo. Dazu aber sp\u00e4ter mehr.<\/p>\n<p>Entweder man installiert das Package mit<\/p>\n<pre class=\"lang:default decode:true \" >sudo apt-get install wiringpi<\/pre>\n<p>oder wie hier nun beschrieben \u00fcber <strong>Git<\/strong> die neueste Version und compiliert es selber mit dem Ausf\u00fchren des build Scriptes. Das ist hier beschrieben da wir das als API f\u00fcr die C++ Programmierung brauchen.<br \/>\n<!--more--><\/p>\n<pre class=\"lang:default decode:true \" >\r\n\r\n# das Repo aus Git holen\r\ngit clone git:\/\/git.drogon.net\/wiringPi\r\ncd wiringPi\r\n# Ausf\u00fchren des Build und install Script\r\n.\/build\r\n\r\n# es dauert ca. eine Minuten\r\n#\r\nwiringPi Build script\r\n=====================\r\n\r\n\r\nWiringPi Library\r\n[UnInstall]\r\n[Compile] wiringPi.c\r\n[Compile] wiringSerial.c\r\n[Compile] wiringShift.c\r\n[Compile] piHiPri.c\r\n[Compile] piThread.c\r\n[Compile] wiringPiSPI.c\r\n[Compile] wiringPiI2C.c\r\n[Compile] softPwm.c\r\n[Compile] softTone.c\r\n[Compile] mcp23008.c\r\n[Compile] mcp23016.c\r\n[Compile] mcp23017.c\r\nwiringPi.c:1248:21: warning: \u2018digitalWrite8Dummy\u2019 defined but not used [-Wunused-function]\r\n static         void digitalWrite8Dummy       (UNU struct wiringPiNodeStruct *node, UNU int pin, UNU int value) { return ; }\r\n                     ^~~~~~~~~~~~~~~~~~\r\nwiringPi.c:1247:21: warning: \u2018digitalRead8Dummy\u2019 defined but not used [-Wunused-function]\r\n static unsigned int digitalRead8Dummy        (UNU struct wiringPiNodeStruct *node, UNU int UNU pin)            { return 0 ; }\r\n                     ^~~~~~~~~~~~~~~~~\r\n[Compile] mcp23s08.c\r\n[Compile] mcp23s17.c\r\n[Compile] sr595.c\r\n[Compile] pcf8574.c\r\n[Compile] pcf8591.c\r\n[Compile] mcp3002.c\r\n[Compile] mcp3004.c\r\n[Compile] mcp4802.c\r\n[Compile] max31855.c\r\n[Compile] mcp3422.c\r\n[Compile] max5322.c\r\n[Compile] ads1115.c\r\n[Compile] sn3218.c\r\n[Compile] bmp180.c\r\n[Compile] htu21d.c\r\n[Compile] ds18b20.c\r\n[Compile] rht03.c\r\n[Compile] drcSerial.c\r\n[Compile] drcNet.c\r\n[Compile] pseudoPins.c\r\n[Compile] wpiExtensions.c\r\n[Link (Dynamic)]\r\n[Install Headers]\r\n[Install Dynamic Lib]\r\n\r\nWiringPi Devices Library\r\n[UnInstall]\r\n[Compile] ds1302.c\r\n[Compile] piNes.c\r\n[Compile] maxdetect.c\r\n[Compile] gertboard.c\r\n[Compile] piFace.c\r\n[Compile] lcd128x64.c\r\n[Compile] lcd.c\r\n[Compile] scrollPhat.c\r\n[Compile] piGlow.c\r\n[Link (Dynamic)]\r\n[Install Headers]\r\n[Install Dynamic Lib]\r\n\r\nGPIO Utility\r\n[Compile] gpio.c\r\n[Compile] readall.c\r\n[Compile] pins.c\r\n[Link]\r\n[Install]\r\n\r\nAll Done.\r\n\r\nNOTE: To compile programs with wiringPi, you need to add:\r\n    -lwiringPi\r\n  to your compile line(s) To use the Gertboard, MaxDetect, etc.\r\n  code (the devLib), you need to also add:\r\n    -lwiringPiDev\r\n  to your compile line(s).\r\n\r\n# Nun Testen wir ob alles l\u00e4uft mit\r\ngpio -v\r\n# Ausgabe alles OK:\r\ngpio version: 2.44\r\nCopyright (c) 2012-2017 Gordon Henderson\r\nThis is free software with ABSOLUTELY NO WARRANTY.\r\nFor details type: gpio -warranty\r\n\r\nRaspberry Pi Details:\r\n  Type: Pi Zero-W, Revision: 01, Memory: 512MB, Maker: Sony\r\n  * Device tree is enabled.\r\n  *--> Raspberry Pi Zero W Rev 1.1\r\n  * This Raspberry Pi supports user-level GPIO access.\r\n\r\n<\/pre>\n<p>Nun ein erster echter Test, wir lesen alle Daten der GPIO Schnittstelle mit:<\/p>\n<pre class=\"lang:default decode:true \" >gpio readall<\/pre>\n<p>und schon haben wir alle Date in einer \u00fcbersichtlichen Tabelle angezeigt, aus der wir auch die Pin Belegungen usw. entnehmen k\u00f6nnen:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Bildschirmfoto-2018-01-11-um-20.17.21.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Bildschirmfoto-2018-01-11-um-20.17.21.png\" alt=\"\" width=\"882\" height=\"582\" class=\"aligncenter size-full wp-image-9544\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Bildschirmfoto-2018-01-11-um-20.17.21.png 882w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Bildschirmfoto-2018-01-11-um-20.17.21-300x198.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/Bildschirmfoto-2018-01-11-um-20.17.21-768x507.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Jetzt compilieren wir noch die Beispiele, dazu gehen wir in das <strong>~\/wiringPi\/examples<\/strong> Verzeichnis und starten mit:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nmake really-all\r\n<\/pre>\n<p>Jetzt k\u00f6nnen wir aus dem Verzeichnis das Testprogramm <code>blink<\/code> starten, oder mein <code>tw-blink.sh<\/code> Script ausf\u00fchren das alle 5 Sekunden an und aus schaltet:<\/p>\n<p><script src=\"https:\/\/gist.github.com\/IT-Berater\/ef88dd0f8d1c4f674fa0aeff46e29250.js\"><\/script><\/p>\n<p>Schon kann man \u00fcber Pin 11 und 12 das Blinken messen, <\/p>\n<p><strong>An 3,12 Volt<\/strong><br \/>\n<a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/an-e1515700864765.jpeg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/an-e1515700864765.jpeg\" alt=\"\" width=\"3024\" height=\"4032\" class=\"aligncenter size-full wp-image-9545\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/an-e1515700864765.jpeg 3024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/an-e1515700864765-225x300.jpeg 225w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/an-e1515700864765-768x1024.jpeg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><br \/>\nund<br \/>\n<strong>Aus 0 Volt<\/strong><br \/>\n<a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/aus-e1515700912939.jpeg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/aus-e1515700912939.jpeg\" alt=\"\" width=\"3024\" height=\"4032\" class=\"aligncenter size-full wp-image-9546\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/aus-e1515700912939.jpeg 3024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/aus-e1515700912939-225x300.jpeg 225w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2018\/01\/aus-e1515700912939-768x1024.jpeg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>und auf der Konsole<\/p>\n<pre class=\"lang:default decode:true \" >pi@pi-zero:~\/wiringPi\/examples $ .\/tw-blink.sh\r\nStarte endloses Blinken zwischen Pin 11 und 12. Beenden mit CTRL-C\r\nAus\r\nAn\r\nAus\r\nAn\r\nAus\r\nAn\r\nAus\r\nAn\r\nAus...\r\n<\/pre>\n<p>In einem n\u00e4chsten Teil dann zum C++ eigentlichen Zugriff.<\/p>\n<p>Was bisher geschah im C++ Kurs:<\/p>\n<ul>\n<li>In 15 Minuten zum eigenen C++ Programm auf dem Raspberry Pi Zero W \u2013 <a href=\"http:\/\/blog.wenzlaff.de\/?p=9520\" rel=\"noopener\" target=\"_blank\">Teil 1<\/a><\/li>\n<li>In 15 Minuten zum eigenen C++ Programm zum ausgeben der Systemtemperatur des Raspberry Pi Zero W \u2013 <a href=\"http:\/\/blog.wenzlaff.de\/?p=9537\" rel=\"noopener\" target=\"_blank\">Teil 2<\/a><\/li>\n<li>GPIO Schnittstelle: Mit WiringPi in 15 Minuten auf die GPIO Ports des Raspberry Pi zugreifen &#8211; <a href=\"http:\/\/blog.wenzlaff.de\/?p=9543\" rel=\"noopener\" target=\"_blank\">Teil 3<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Mit der wiringpi kann man leicht auf die GPIO Ports des Raspberry Pi zugreifen. Mit den Pins kann man dann leicht Hardware steuern. Auf dem Blog gibt es eine gute ausf\u00fchrliche Anleitung. Das will ich nicht wiederholen, sondern hier geht es darum wie man mit C++ auf die GPIO zugreifen kann. Obwohl man auch in &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=9543\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eGPIO Schnittstelle: Mit WiringPi in 15 Minuten auf die GPIO Ports des Raspberry Pi zugreifen &#8211; Teil 3\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":[220,3107,2874,538,1023,2752],"tags":[1995,3117,2190,717,3115,3116,3118,3119],"class_list":["post-9543","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-c-programmierung","category-c","category-elektronik","category-raspberry-pi","category-raspberry-pi-zero-w","tag-gpio","tag-gpio-ports","tag-raspberry-pi","tag-schnittstelle","tag-teil-1","tag-wiring-pi","tag-wiringpi","tag-zugreifen"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/9543","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=9543"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/9543\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9543"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}