{"id":2932,"date":"2017-07-21T15:53:10","date_gmt":"2017-07-21T15:53:10","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=2932"},"modified":"2017-07-21T15:53:10","modified_gmt":"2017-07-21T15:53:10","slug":"schalten-und-walten-auf-dem-rpi","status":"publish","type":"post","link":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/","title":{"rendered":"Schalten und Walten auf dem RPi"},"content":{"rendered":"<p>Fr\u00fcher oder sp\u00e4ter wird man auf einem RPi die GPIO-Pins f\u00fcr die Ansteuerung von externen Ger\u00e4ten nutzen wollen. Einige kleine Fallstricke warten hier (vor allem in Python). \u00dcblich ist der Einsatz von <strong>RPi.GPIO<\/strong> unter Python respektive das sehr m\u00e4chtige und komfortable <strong>WiringPi <\/strong>f\u00fcr C. Zusammen mit Kommandozeilentools wie <strong>gpio<\/strong> hat man (fast) alles was man brauchen wird.<\/p>\n<p>&nbsp;<\/p>\n<h4>Python auf dem RPi &#8211; Zahlen und Pins<\/h4>\n<p>Die grosse Verwirrung um die Pin-Bezeichnungen auf dem Raspberry pi kl\u00e4rt <a href=\"http:\/\/pinout.xyz\" target=\"_blank\" rel=\"noopener\">pinout.xyz<\/a> auf:<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-2946\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg\" alt=\"\" width=\"753\" height=\"430\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg 753w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/wiringpi-pinout-300x171.jpg 300w\" sizes=\"(max-width: 753px) 100vw, 753px\" \/><\/p>\n<p>Mit <strong>gpio readall<\/strong> kann man sich die aktuelle Pinkonfiguration (Input\/Output) sch\u00f6n anzeigen lassen. Praktischerweise werden die Pins mit all ihren verschiedene Namen angezeigt.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-2947\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/pits-python-gpio.jpg\" alt=\"\" width=\"816\" height=\"502\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-python-gpio.jpg 1451w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-python-gpio-300x184.jpg 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-python-gpio-768x472.jpg 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-python-gpio-1024x629.jpg 1024w\" sizes=\"(max-width: 816px) 100vw, 816px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h4>Schalten mit Python auf dem RPi<\/h4>\n<p>Der folgende Code zeigt die Ansteuerung eines Pins (hier: f\u00fcr die Aktivierung einer Pumpe) in Python auf dem Pi-in-the-Sky. Dieser Code funktioniert auch, wenn alle PITS Platinen aktiv sind (also mit LoRa und APRS). Der Pin 13 ist die Internet LED Anzeige auf dem LoRa Board, die man getrost zweckentfremden kann (33 physical). Die Pinbelegung ist wie folgt:<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-2949\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/pits-stacking-gpio.png\" alt=\"\" width=\"1160\" height=\"746\" srcset=\"http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-stacking-gpio.png 1160w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-stacking-gpio-300x193.png 300w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-stacking-gpio-768x494.png 768w, http:\/\/52.29.166.97\/myblog\/wp-content\/uploads\/2017\/07\/pits-stacking-gpio-1024x659.png 1024w\" sizes=\"(max-width: 1160px) 100vw, 1160px\" \/><\/p>\n<p>&nbsp;<\/p>\n<pre>#!\/usr\/bin\/python\n\nimport os\nimport time\nimport smbus\nimport RPi.GPIO as GPIO\n\nGPIO.setmode(GPIO.BCM)\nGPIO.setwarnings(False)\n\n#Variable to enable\/disable the pump\npumpEnabled = True\n#Interval between measurements in seconds\ninterval = 10\n#Altitude at which the pump is activated in meters\nminPumpAlt = 20000\n\n#Pin to control the pump \/ See https:\/\/pinout.xyz\/# for further information\npumpPin = 13\n\nrev = GPIO.RPI_REVISION\n\n#Initialize GPIO-Pin for Pump\t\nGPIO.setup(pumpPin, GPIO.OUT, initial=GPIO.LOW)\n\ndef loop():\n\tglobal pumpEnabled\n\twhile True:\n\t\tif(pumpEnabled == True):\n\t\t\t\t#Turns the pump on\n\t\t\t\tGPIO.output(pumpPin,GPIO.LOW)\n\t\t\t\tpumpEnabled = False\n\t\t\t\tprint(\"LOW\")\n\t\telse:\n\t\t\t\t#Turns the pump off\n\t\t\t\tGPIO.output(pumpPin,GPIO.HIGH)\n\t\t\t\tprint(\"HIGH\")\n\t\t\t\tpumpEnabled = True\n\t\ttime.sleep(interval)\n\nloop()\n<\/pre>\n<p>&nbsp;<\/p>\n<h4>This chanel is already in use<\/h4>\n<p>Man sollte\u00a0beim Verlassen des Scripts mit dem Befel <strong>GPIO.cleanup()<\/strong> aufr\u00e4umen, da es sonst bei einem zweiten Start zu Warnungen \u00e0 la <em>&#8222;This cannel is aready in use&#8220;<\/em> kommen kann. Im Script oben wird unsauber einfach die Warnung mit <strong>GPIO.setwarnings(False)<\/strong> deaktiviert. Am besten macht man dies \u00fcber die Fehlerbehandlung von Python mit<strong><em> try-execpt-finally<\/em><\/strong>, da man den Grund f\u00fcr die Beendigung des Scripts ja nicht wissen kann, m\u00f6glicherweise wird es manuell mit der Tastatur abgebrochen. Eine gute Diskussion dazu findet man zum Beispiel hier im <a href=\"https:\/\/www.raspberrypi.org\/forums\/viewtopic.php?f=32&amp;t=20034\" target=\"_blank\" rel=\"noopener\">RPi Forum\u00a0<\/a> oder im <a href=\"http:\/\/raspi.tv\/2013\/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi\" target=\"_blank\" rel=\"noopener\">RPi TV RPI.GPIO Basiscs 3<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h4>Interrupts<\/h4>\n<p>Ein RPi ist ein ausgewachsener Computer mit einem Betriebssystem. Programme mit genau definiertem Zeitverhalten m\u00fcssten mit Interrupts\u00a0erstellt werden; dies ist im\u00a0Gegensatz zur Programmierung auf Mikrocontrollern auf einem RPi nicht wirklich in Reinkultur m\u00f6glich. Zuviele Betriebssystem-Prozesse laufen da st\u00e4ndig untendurch. Diese schirmen die Hardware einerseits von der High-Level Programmierung ab, andererseits ist\u00a0keine garantierte Reaktionszeit gegeben.\u00a0Mit gewissen Einschr\u00e4nkungen geht es aber doch:<\/p>\n<ul>\n<li>Teil 3 von <a href=\"http:\/\/raspi.tv\/2013\/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio\" target=\"_blank\" rel=\"noopener\">Interrupts mit GPIO<\/a>\u00a0(Raspi.TV ist generell eine informative \u00a0Quelle f\u00fcr den RPi)<br \/>\n<em>&#8222;We\u2019ve been learning about interrupts this week because of the brand new interrupt capabilities of RPi.GPIO. We covered a simple \u201cwait for\u201d interrupt in part 1, threaded callback interrupt and button debouncing in part 2 and today we\u2019re getting sophisticated with multiple threaded callbacks.&#8220;<\/em><\/li>\n<li>Tutorial: <a href=\"http:\/\/www.science.smith.edu\/dftwiki\/index.php\/Tutorial:_Interrupt-Driven_Event-Counter_on_the_Raspberry_Pi\" target=\"_blank\" rel=\"noopener\">Interrupt-Driven Event-Counter on the Raspberry Pi <\/a>(Smith College)<br \/>\n<em>&#8222;The purpose of this tutorial is to illustrate how to implement a user-level interrupt in C on a Raspberry Pi to count events&#8220;<\/em><\/li>\n<\/ul>\n<p>Eine andere Library ist <a href=\"http:\/\/abyz.co.uk\/rpi\/pigpio\/\" target=\"_blank\" rel=\"noopener\">pigpio<\/a>, die hier (zusammen mit anderen) beschrieben ist:\u00a0<a href=\"http:\/\/www.forum-raspberrypi.de\/Thread-sensor-signal-per-interrupt-abfragen\" target=\"_blank\" rel=\"noopener\">Sensor-Signal per Interrupt abfragen<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fr\u00fcher oder sp\u00e4ter wird man auf einem RPi die GPIO-Pins f\u00fcr die Ansteuerung von externen Ger\u00e4ten nutzen wollen. Einige kleine Fallstricke warten hier (vor allem in Python). \u00dcblich ist der Einsatz von RPi.GPIO unter Python respektive das sehr m\u00e4chtige und komfortable WiringPi f\u00fcr C. Zusammen mit Kommandozeilentools wie gpio hat man (fast) alles was man [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12],"tags":[102,107],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Schalten und Walten auf dem RPi - Merkbar.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schalten und Walten auf dem RPi - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"Fr\u00fcher oder sp\u00e4ter wird man auf einem RPi die GPIO-Pins f\u00fcr die Ansteuerung von externen Ger\u00e4ten nutzen wollen. Einige kleine Fallstricke warten hier (vor allem in Python). \u00dcblich ist der Einsatz von RPi.GPIO unter Python respektive das sehr m\u00e4chtige und komfortable WiringPi f\u00fcr C. Zusammen mit Kommandozeilentools wie gpio hat man (fast) alles was man [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2017-07-21T15:53:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"wp_blogadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\",\"url\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg\",\"contentUrl\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#webpage\",\"url\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/\",\"name\":\"Schalten und Walten auf dem RPi - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#primaryimage\"},\"datePublished\":\"2017-07-21T15:53:10+00:00\",\"dateModified\":\"2017-07-21T15:53:10+00:00\",\"author\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schalten und Walten auf dem RPi\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"caption\":\"wp_blogadmin\"},\"url\":\"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Schalten und Walten auf dem RPi - Merkbar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/","og_locale":"de_DE","og_type":"article","og_title":"Schalten und Walten auf dem RPi - Merkbar.","og_description":"Fr\u00fcher oder sp\u00e4ter wird man auf einem RPi die GPIO-Pins f\u00fcr die Ansteuerung von externen Ger\u00e4ten nutzen wollen. Einige kleine Fallstricke warten hier (vor allem in Python). \u00dcblich ist der Einsatz von RPi.GPIO unter Python respektive das sehr m\u00e4chtige und komfortable WiringPi f\u00fcr C. Zusammen mit Kommandozeilentools wie gpio hat man (fast) alles was man [&hellip;]","og_url":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/","og_site_name":"Merkbar.","article_published_time":"2017-07-21T15:53:10+00:00","og_image":[{"url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg"}],"twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"3 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website","url":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"ImageObject","@id":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#primaryimage","inLanguage":"de","url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg","contentUrl":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2017\/07\/wiringpi-pinout.jpg"},{"@type":"WebPage","@id":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#webpage","url":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/","name":"Schalten und Walten auf dem RPi - Merkbar.","isPartOf":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#primaryimage"},"datePublished":"2017-07-21T15:53:10+00:00","dateModified":"2017-07-21T15:53:10+00:00","author":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.29.166.97\/myblog\/2017\/07\/21\/schalten-und-walten-auf-dem-rpi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/"},{"@type":"ListItem","position":2,"name":"Schalten und Walten auf dem RPi"}]},{"@type":"Person","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo","inLanguage":"de","url":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","caption":"wp_blogadmin"},"url":"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/2932"}],"collection":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/comments?post=2932"}],"version-history":[{"count":0,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/2932\/revisions"}],"wp:attachment":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/media?parent=2932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/categories?post=2932"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/tags?post=2932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}