Guten Morgen,
ich finde mich seit kurzem in die elektronische Welt mit dem RasPi ein und stoße gerade auf mein erstes Problem:
Eines der beliebtesten Projekte (für Neulinge) ist wohl das Webradio. Auch ich bastel mir so ein Dingen zusammen und grundsätzlich läuft die ganze Sache mit MPD, LCD und den Buttons zum Verstellen der Sender ganz rund.
Um das volle Potential des Pi auszunutzen kam mir die Idee alle verfügbaren GPIOs mit einem Taster zu versehen um dann via Python die verschiedensten Aktionen auszulösen. (Von Lautstärke rauf, runter, Pause, Sender vor- und zurück, Playlist wechsel, LCD scrolling schneller, langsamer, versch. Anzeigen auf dem LCD). Kurzum: Training im Hardwarebasteln und Pythonprogrammierung.
Der Aufbau mit dem Pi Model A (der Kleine, ohne Netzwerk) erfolgte anhand bekannter Anleitungen aus dem Netz. Das 16x2 LCD Display habe ich an die untere Reihe des Pi's angeschlossen (nach dieser Anleitung). Somit sind die GPIOs 18, 23,24,25,8 & 7 schon mal belegt.
Die verbliebenen 11 wollte ich wie bereits erwähnt mit Tastern bestücken. Alle Taster werden vom PIN 1 mit 3.3 V versorgt und haben jeweils einen 10K Widerstand zum GND und natürlich die Datenleitung zum GPIO.
Frage ich den Status der Taster mit einem einfachen Python Programm ab so erhalte ich bei 9 GPIOs eine korrekte Anzeige wann der Taster gedrückt ist und wann nicht. Nur bei GPIO02 und GPIO03 (PIN 3 & 5) klappt es nicht, diese stehen dauerhaft auf "1" und reagieren nicht auf den Taster.
Ich hangel mich bereits seit Stunden durch das Netz und finde dazu einfach keine Lösung.
Diese beiden Pins scheinen irgendwie "anders" zu sein als die anderen und verlangen offenbar "anders" angesprochen zu werden, nur weiß ich nicht wie...
Über GPIO readall sehe ich, das diese PINs auf HIGH geschaltet sind:
+----------+-Rev2-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name | Mode | Value |
+----------+------+------+--------+------+-------+
| 0 | 17 | 11 | GPIO 0 | IN | Low |
| 1 | 18 | 12 | GPIO 1 | OUT | Low |
| 2 | 27 | 13 | GPIO 2 | IN | Low |
| 3 | 22 | 15 | GPIO 3 | IN | Low |
| 4 | 23 | 16 | GPIO 4 | OUT | Low |
| 5 | 24 | 18 | GPIO 5 | OUT | Low |
| 6 | 25 | 22 | GPIO 6 | OUT | High |
| 7 | 4 | 7 | GPIO 7 | IN | Low |
| 8 | 2 | 3 | SDA | IN | High |!!
| 9 | 3 | 5 | SCL | IN | High |!!
| 10 | 8 | 24 | CE0 | OUT | Low |
| 11 | 7 | 26 | CE1 | OUT | High |
| 12 | 10 | 19 | MOSI | IN | Low |
| 13 | 9 | 21 | MISO | IN | Low |
| 14 | 11 | 23 | SCLK | IN | Low |
| 15 | 14 | 8 | TxD | ALT0 | High |
| 16 | 15 | 10 | RxD | ALT0 | High |
| 17 | 28 | 3 | GPIO 8 | IN | Low |
| 18 | 29 | 4 | GPIO 9 | IN | Low |
| 19 | 30 | 5 | GPIO10 | IN | Low |
| 20 | 31 | 6 | GPIO11 | IN | Low |
+----------+------+------+--------+------+-------+
Alles anzeigen
Versuche ich diese mit GPIO write 8 0 auf Low umzustellen gibt es keine Änderung.
Während ich diesen Text verfasste habe ich noch etwas rumprobiert und festgestellt, das die PINs 3 & 5 doch zu einer Reaktion zu bewegen sind: Ich habe quasi aus einem Akt der Verzweifelung den Mode auf "OUT" gestellt und siehe da - das Python Skript gibt den korrekten Wert aus.
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
INPUT_PIN = 3
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(INPUT_PIN, GPIO.OUT)
while True:
input_value = GPIO.input(INPUT_PIN)
if input_value == True:
print "Taster gedrueckt"
else:
print "Taster nicht gedrueckt"
time.sleep(1)
Alles anzeigen
Jetzt bin ich vollends verwirrt... und über meinem Kopf steht ein großes Fragezeichen!
Warum verhalten sich GPIO2 & 3 anders als alle anderen?
Gibt es einen Weg diese PINs auch mit GPIO.IN funktionieren?
...und sollte das nicht funktionieren: Wäre es ein Problem die PINs mit den Taster über GPIO.OUT dauerhaft anzusprechen (Schließlich möchte man dem Pi ja nicht schaden...)?
Es wäre sehr nett wenn mir das jemand erklären könnte oder weiß wo im großen weiten Netz dieser Umstand bereits erklärt wurde.