Orange Pi - Led ansteuern

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Ich scheitere bereits bei dieser Aufgabe...

Was ich gemacht habe:
01.: OPi.GPIO installiert
02.: Den Pin aus gpio readall abgelesen
03.: Den Pin als OUT deklariert
04.: Das Python Programm auf den entsprechenden Port geschrieben
05.: Das Python Programm ausgeführt

Hier mein Pin auf output ummoden:

Code: Alles auswählen

gpio -g mode 35 OUT
Muss ich noch irgendetwas beachten?
Hier mein Programmcode:

Code: Alles auswählen

import OPi.GPIO as GPIO
import time

ledpin = 35
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledpin, GPIO.OUT)

try:
	while True:
		GPIO.output(ledpin, GPIO.HIGH)
		time.sleep(1)
		GPIO.output(ledpin, GPIO.LOW)
		time.sleep(1)
finally:
	GPIO.cleanup()
hier mein gpio readall:

Code: Alles auswählen

root@orangepi5plus:/home/mimoso/Desktop/mimoso# gpio readall
 +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 |      |     |     3.3V |        |   |  1 || 2  |   |        | 5V       |     |      |
 |   16 |   0 |    SDA.2 |    OUT | 0 |  3 || 4  |   |        | 5V       |     |      |
 |   15 |   1 |    SCL.2 |     IN | 0 |  5 || 6  |   |        | GND      |     |      |
 |   62 |   2 |    PWM14 |     IN | 1 |  7 || 8  | 0 | IN     | GPIO1_A1 | 3   | 33   |
 |      |     |      GND |        |   |  9 || 10 | 0 | IN     | GPIO1_A0 | 4   | 32   |
 |   36 |   5 | GPIO1_A4 |     IN | 0 | 11 || 12 | 1 | IN     | GPIO3_A1 | 6   | 97   |
 |   39 |   7 | GPIO1_A7 |     IN | 1 | 13 || 14 |   |        | GND      |     |      |
 |   40 |   8 | GPIO1_B0 |     IN | 1 | 15 || 16 | 1 | IN     | GPIO3_B5 | 9   | 109  |
 |      |     |     3.3V |        |   | 17 || 18 | 0 | IN     | GPIO3_B6 | 10  | 110  |
 |   42 |  11 | SPI0_TXD |     IN | 0 | 19 || 20 |   |        | GND      |     |      |
 |   41 |  12 | SPI0_RXD |     IN | 0 | 21 || 22 | 0 | IN     | GPIO1_A2 | 13  | 34   |
 |   43 |  14 | SPI0_CLK |     IN | 0 | 23 || 24 | 1 | IN     | SPI0_CS0 | 15  | 44   |
 |      |     |      GND |        |   | 25 || 26 | 1 | IN     | SPI0_CS1 | 16  | 45   |
 |   47 |  17 | GPIO1_B7 |     IN | 1 | 27 || 28 | 1 | IN     | GPIO1_B6 | 18  | 46   |
 |   63 |  19 | GPIO1_D7 |     IN | 1 | 29 || 30 |   |        | GND      |     |      |
 |   96 |  20 | GPIO3_A0 |     IN | 1 | 31 || 32 | 0 | OUT    | GPIO1_A3 | 21  | 35   |
 |  114 |  22 | GPIO3_C2 |     IN | 0 | 33 || 34 |   |        | GND      |     |      |
 |   98 |  23 | GPIO3_A2 |     IN | 1 | 35 || 36 | 0 | IN     | GPIO3_A5 | 24  | 101  |
 |  113 |  25 | GPIO3_C1 |     IN | 0 | 37 || 38 | 0 | IN     | GPIO3_A4 | 26  | 100  |
 |      |     |      GND |        |   | 39 || 40 | 1 | IN     | GPIO3_A3 | 27  | 99   |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+
Versuche es schon mehrere Tage, bei mehreren Anläufen die letzten Tage hoffe ich, ihr könnt mir auf die Sprünge helfen ;)

LG Kampfgummibaerlie

EDIT: Ich verwende Port 21, weil er mir sowieso einen Fehler ausspuckt, wenn ich den GPIO-Port 35 versuche... ich denke da liegt das problem :(

EDIT2: Hier die Fehlermeldung wenn ich ausführe:

Code: Alles auswählen

root@orangepi5plus:/home/mimoso/Desktop/mimoso# python main.py
Traceback (most recent call last):
  File "/home/mimoso/Desktop/mimoso/main.py", line 6, in <module>
    GPIO.setup(ledpin, GPIO.OUT)
  File "/usr/local/lib/python3.10/dist-packages/OPi/GPIO.py", line 470, in setup
    pin = get_gpio_pin(_mode, channel)
  File "/usr/local/lib/python3.10/dist-packages/OPi/pin_mappings.py", line 80, in get_gpio_pin
    return _pin_map[mode][channel]
KeyError: 35
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe den OPi nicht, aber die Fehlermeldung ist ja recht simpel. Man darf sich durchaus solche Dateien mal anschauen, und gucken, was da in _pin_map drin ist, und wie der Wert von Mode aussieht. Und das ist dann bestimmt erhellend.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Danke für den Kommentar, neuer Versuch auszuprobieren :D

_pin_map:

Code: Alles auswählen

_pin_map = {
    # Physical pin to actual GPIO pin
    BOARD: {
        3: 12,
        5: 11,
        7: 6,
        8: 198,
        10: 199,
        11: 1,
        12: 7,
        13: 0,
        15: 3,
        16: 19,
        18: 18,
        19: 15,
        21: 16,
        22: 2,
        23: 14,
        24: 13,
        26: 10
    },

    # BCM pin to actual GPIO pin
    BCM: {
        2: 12,
        3: 11,
        4: 6,
        7: 10,
        8: 13,
        9: 16,
        10: 15,
        11: 14,
        14: 198,
        15: 199,
        17: 1,
        18: 7,
        22: 3,
        23: 19,
        24: 18,
        25: 2,
        27: 0
    },

    SUNXI: _sunXi(),

    # User defined, initialized as empty
    CUSTOM: {}
}
soll bedeuten ich soll (obiger Fall) den GPIO Pin 2 ansprechen, wenn ich an den GPIO12 Pin von meinem GPIO Board möchte?
werde es gleich mal probieren ;)

Danke!
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na was ist denn der Wert von Mode? Davon haengt es ja ab. Wenn es BCM ist (ich vermute mal, dass soll Pi-Kompatibiltaet sein), dann ja. BOARD gibt es ja aber auch noch.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Das hier ist meine gpio readall Tabelle:

Code: Alles auswählen

 +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 |      |     |     3.3V |        |   |  1 || 2  |   |        | 5V       |     |      |
 |   16 |   0 |    SDA.2 |     IN | 0 |  3 || 4  |   |        | 5V       |     |      |
 |   15 |   1 |    SCL.2 |     IN | 0 |  5 || 6  |   |        | GND      |     |      |
 |   62 |   2 |    PWM14 |     IN | 1 |  7 || 8  | 0 | IN     | GPIO1_A1 | 3   | 33   |
 |      |     |      GND |        |   |  9 || 10 | 0 | IN     | GPIO1_A0 | 4   | 32   |
 |   36 |   5 | GPIO1_A4 |     IN | 0 | 11 || 12 | 0 | OUT    | GPIO3_A1 | 6   | 97   |
 |   39 |   7 | GPIO1_A7 |     IN | 1 | 13 || 14 |   |        | GND      |     |      |
 |   40 |   8 | GPIO1_B0 |    OUT | 0 | 15 || 16 | 0 | OUT    | GPIO3_B5 | 9   | 109  |
 |      |     |     3.3V |        |   | 17 || 18 | 0 | IN     | GPIO3_B6 | 10  | 110  |
 |   42 |  11 | SPI0_TXD |     IN | 0 | 19 || 20 |   |        | GND      |     |      |
 |   41 |  12 | SPI0_RXD |     IN | 0 | 21 || 22 | 0 | IN     | GPIO1_A2 | 13  | 34   |
 |   43 |  14 | SPI0_CLK |     IN | 0 | 23 || 24 | 1 | IN     | SPI0_CS0 | 15  | 44   |
 |      |     |      GND |        |   | 25 || 26 | 0 | OUT    | SPI0_CS1 | 16  | 45   |
 |   47 |  17 | GPIO1_B7 |     IN | 1 | 27 || 28 | 1 | IN     | GPIO1_B6 | 18  | 46   |
 |   63 |  19 | GPIO1_D7 |     IN | 1 | 29 || 30 |   |        | GND      |     |      |
 |   96 |  20 | GPIO3_A0 |     IN | 1 | 31 || 32 | 0 | IN     | GPIO1_A3 | 21  | 35   |
 |  114 |  22 | GPIO3_C2 |     IN | 0 | 33 || 34 |   |        | GND      |     |      |
 |   98 |  23 | GPIO3_A2 |     IN | 1 | 35 || 36 | 0 | IN     | GPIO3_A5 | 24  | 101  |
 |  113 |  25 | GPIO3_C1 |     IN | 0 | 37 || 38 | 0 | IN     | GPIO3_A4 | 26  | 100  |
 |      |     |      GND |        |   | 39 || 40 | 1 | IN     | GPIO3_A3 | 27  | 99   |
 +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+
 | GPIO | wPi |   Name   |  Mode  | V | Physical | V |  Mode  | Name     | wPi | GPIO |
 +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+
das hier ist mein nicht funktionstüchtiges Programm:

Code: Alles auswählen

import OPi.GPIO as GPIO
import time

GPIO.setmode (GPIO.BCM)
GPIO.setup (9, GPIO.OUT)

while True:
    GPIO.output(9, True)
    time.sleep(1)
    GPIO.output(9, False)
    time.sleep(1)
falls gefragt wird, wie ich auf 9 komme?
die Befehle:

Code: Alles auswählen

gpio mode 9 OUT
sowie

Code: Alles auswählen

gpio mode 9 IN
lassen die LED leuchten bzw. nicht leuchten...
Wenn ich im Programm den passenden GPIO-Pin nehme, kommt folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/mimoso/Desktop/mimoso/main.py", line 5, in <module>
    GPIO.setup (109, GPIO.OUT)
  File "/usr/local/lib/python3.10/dist-packages/OPi/GPIO.py", line 470, in setup
    pin = get_gpio_pin(_mode, channel)
  File "/usr/local/lib/python3.10/dist-packages/OPi/pin_mappings.py", line 80, in get_gpio_pin
    return _pin_map[mode][channel]
KeyError: 109
In der Datei pin_mappings.py steht bei BCM folgendes:

Code: Alles auswählen

    # BCM pin to actual GPIO pin
    BCM: {
        2: 12,
        3: 11,
        4: 6,
        7: 10,
        8: 13,
        9: 16,
        10: 15,
        11: 14,
        14: 198,
        15: 199,
        17: 1,
        18: 7,
        22: 3,
        23: 19,
        24: 18,
        25: 2,
        27: 0
    },

Ich hoffe dass die eifrigen Foren-Nutzer mir heute noch auf die Sprünge helfen können -_-
Danke und LG Kampfgummibaerlie
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du siehst doch, welche Pins du in welchem Mode übergeben darfst. Und die Frage, welchen Mode du nutzt, hast du auch nicht beantwortet.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Habe mich mit Modes noch garnicht befasst, mir ist garnicht bewusst, dass das geht.

wenn du so gütig wärst, darfst du mich bezüglich dazu aufklären ;)

Danke :D
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du darfst auch einfach selbst mal im die Doku schauen, und gerne Fragen stellen, wenn was unklar ist. Aber Vorleseservice kann ich nicht leisten.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Ich verwende den Modus BOARD, weil ich denke als Anfänger mit sowas den einfacheren Weg zu gehen, weil man da einfach nur die Pins runterzählen muss.

Eine Frage habe ich:
Fangt die Nummerierung der Pins bei 0 oder 1 an?
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das sieht man in deiner GPIO map. Pfostenstecker starten bei 1, und sind alternierend nummeriert.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Ok, kann es sein, dass ich mein Breadboard 1:1 verkehrt daraufgesteckt habe?
Oder ordnen sich die Pins usw automatisch zu?

Mehr Erklärungen habe ich auch schon nichtmehr xD
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kenne dein breadboard nicht. Und solange du den KeyError nicht gehandhabt bekommst, ist eh kein Fortschritt möglich.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Guten Tag einmal wieder, ich nutze jetzt den Board-Mode und ich kann den Pin nach wie vor nicht über ein Python-Programm ansprechen.

Hier mein Programm-Code:

Code: Alles auswählen

import OPi.GPIO as GPIO
import time

ledpin = 12
GPIO.setmode(GPIO.BOARD)
GPIO.setup(ledpin, GPIO.OUT)

try:
	while True:
		GPIO.output(ledpin, GPIO.HIGH)
		time.sleep(1)
		GPIO.output(ledpin, GPIO.LOW)
		time.sleep(1)
finally:
	GPIO.cleanup()
ich denke wenn man Board nutzt, muss man den physischen Pin angeben (?)
Hier die Zeile vom physischen Pin 12:

Code: Alles auswählen

| 12 | 0 | OUT    | GPIO3_A1 | 6   | 97   |
(die LED leuchtet nicht) - wenn ich den mode auf IN ändere leuchtet die LED permanent, auch wenn ich das Programm starte....
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

wie hast du die LED denn angeschlossen?


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

1.: Die Stromquelle ist der GPIO-Pin "18" (steht als Beschriftung auf dem GPIO-Extension-Ding) - den 6. Pin von oben nach unten gezählt auf der rechten Seite (daher 12)
2.: Eine Sicherung von der Stromquelle zur LED
3.: die LED
4.: ein Kabel zur Erdung/Masse

EDIT:
Mir fällt auf, ich habe keinen Eintrag dafür in der GPIO Class...

Code: Alles auswählen

root@orangepi5plus:/sys/class/gpio# nano export
ist leer...
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also ich finde die Tabelle von gpio readall im Verhaeltnis zu dem, was in der _pin_map steht, kompletten Quatsch. Dein Pin 12 in Board-Schreibweise nennt sich doch GPIO3_A1, und GPIO 97. In der Pin-Map steht dazu aber 12: 7, also irgendwie 90 weniger.

Ein Hinweis noch zur LED: die braucht einen Vorwiderstand, sonst brennt sie durch (und nimmt im Zweifel den GPIO-Pin mit).
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Ich nenne den Widerstand im obigen Post "Sicherung" ;)

wie kann ich das komplette gpio modell komplett neu installieren, damit die default-einstellungen erst einmal gesetzt sind?
... Anfängerprobleme denke ich xD
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung.Das ist einer der gruende, warum ich wenig von diesen Pi-Klonen halte. Tun so, als ob, aber im Detail ist man dann doch eher auf sich gestellt.
Kampfgummibaerlie
User
Beiträge: 27
Registriert: Freitag 18. Juni 2021, 14:44

Ich habe heute noch gute Nachrichten:
Ich bin in der Lage über:

Code: Alles auswählen

echo 1 > /sys/class/gpio/gpio113/value
das Licht leuchten zu lassen und über:

Code: Alles auswählen

echo 0 > /sys/class/gpio/gpio113/value
das Licht nichtmehr leuchten zu lassen...

nur wie kann ich >exakt diesen< 113er GPIO-"Port" (denke ich) von einem Python-Programm ansprechen?
(Ich habe jetzt die Extension abgesteckt und mit einem Jumper-Kabel die LED direkt an den OrangePi-Pin angeschlossen ;)
selbstverständlich mit einer Sicherung und einer Erdung auf der anderen Seite :D)

Danke soweit und ich hoffe auf positive und nützliche Posts von euch ;)

LG Kampfgummibaerlie
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Paket scheint speziell auf die Kompatibilität mit dem Pi getrimmt. Und damit geht das da im Zweifel nicht, wenn der Pi da keinen IO hat.

Die sagen aber auch, dass es das sysfs benutzt. Also die Dateien, die du selbst da in der Shell benutzt. Und genau das kannst du auch von Python aus machen.

Einen Vorwiderstand eine Sicherung zu nennen ist Quatsch. Es gibt schon Gründe, warum Dinge Namen haben. Sich da seine eigene Nomenklatur auszudenken sorgt bestenfalls für vermeidbare Verwirrung. Schlimmstenfalls geht was zu Bruch.
Antworten