Schrittmotor mit Python auf RasPi5

  • Guten Abend,

    ich habe ein Problem mit dem Raspi5 bei dem mir hoffentlich jemand helfen kann.

    Ich habe ein selbst gedrucktes Riesenrad mit einem Schrittmotor NEMA 17 und einem TB6600 Treiber angesteuert. Das ganze wird von einem Raspi4 8GB über Python mit rpi.GPIO importiert und funktioniert einwandfrei.

    Jetzt habe ich mir einen Raspi5 zugelegt und musste feststellen, das der Import von rpi.GPIO nicht mehr funktioniert. Bei "setup.GPIO" bleibt Python stehen mit einer Fehlermeldung das der Zugriff auf gpiomem verweigert wird.

    gpiomem existiert aber gar nicht. Lediglich gpiomem0, gpiomem1 usw. im Verzeichnis dev.

    Ich habe es auch schon mit "venv" (virtual environments) probiert, aber ohne Erfolg.

    Auch mit Root-Rechten funktioniert es nicht. Es lassen sich keine GPIO´s ansteuern. Wenn ich mit import gpiozero programmiere, kann ich zwar die GPIO´s wieder ansteuern, aber es gibt keine brauchbare Möglichkeit den Schrittmotor zu betreiben.

    Kann mir hier vielleicht jemand helfen?

    Ich müsste entweder den Import von rpi.GPIO hin bekommen oder eine Möglichkeit finden, das durch gpiozero zu ersetzen.

    Ich bin übrigens Amateur im programmieren von Python, habe also nur Grundkenntnisse. Bitte um etwas Nachsicht.

    Für jede Hilfe wäre ich trotzdem Dankbar.

    Gruß GodsHell

  • Hallo,

    und poste mal bitte die komplette Fehlermeldun, die du bekommst. Am besten hier in einen Codeblock eingefügen. Den bekommst du, indem du im Editor auf die </> Schaltfläche klickst.

    Wie hast du das rpi.GPIO Modul installiert? Aus den Paketquellen?

    Ich habe es auch schon mit "venv" (virtual environments) probiert, aber ohne Erfolg.

    Das hat mit deinem Problem auch nichts zu tun. Ein venv bietet eine isoliertes Umgebung für den Python-Interpreter und Python-Module, also isoliert von denen vom System. Der Hardwarezugriff ist der selbe wie überall anders auch. Und der Hardwarezugriff scheint ja dein Problem zu sein.

    Gruß, noisefloor

  • Das hat mit deinem Problem auch nichts zu tun. Ein venv bietet eine isoliertes Umgebung für den Python-Interpreter und Python-Module, also isoliert von denen vom System. Der Hardwarezugriff ist der selbe wie überall anders auch. Und der Hardwarezugriff scheint ja dein Problem zu sein.

    Hallo und danke für die schnelle Reaktion.

    Das ist mir klar. Ist ähnlich einer VM. Das wurde aber in einem anderen Forum als Lösung vorgeschlagen, deshalb habe ich es hier erwähnt.

    In dem anderen Forum hieß es das Problem würde durch Bookworm verursacht. Deshalb habe ich es unter Ubuntu versucht, mit gleichem Ergebnis.

    Einige behaupten, das rpi.GPIO nicht mehr unterstützt würde und deshalb diese Probleme verursacht. Ich habe übrigens mehrere Anwender gefunden, die das gleiche Problem haben. Es scheint, als würde Python den Befehl "GPIO.setup (17, GPIO out)" nicht kennen. Dabei soll ja hier z.B. der GPIO 17 als Ausgang definiert werden.

    Hier mal der komplette Code:

    Bei Zeile 4 steigt Python schon aus, aber nur auf dem Raspi5. Auf Raspi 3 & 4 läuft es.

    Die Installation habe ich versucht mit:

    sudo apt-get install python-rpi.GPIO

    und mit pip python-rpi.GPIO

    auch in Konstellation mit pip3, python3 usw.

  • Es scheint, als würde Python den Befehl "GPIO.setup (17, GPIO out)" nicht kennen. Dabei soll ja hier z.B. der GPIO 17 als Ausgang definiert werden.

    Das wird es auch nicht kennen, solange die Nummerierung auf GPIO.setmode(GPIO.BOARD) steht, denn der Pin 17 ist kein GPIO, sondern ein 3V3 Pin. Aber das war ja nur ein Beispiel. ;)

    Wie hast Du RPi.GPIO installiert? ... war noch eine der Fragen //Edit: Wer lesen kann ist klar im Vorteil! :blush:

  • Das wird es auch nicht kennen, solange die Nummerierung auf GPIO.setmode(GPIO.BOARD) steht, denn der Pin 17 ist kein GPIO, sondern ein 3V3 Pin. Aber das war ja nur ein Beispiel.

    Ja, das mit pin 17 war auch nur ein Beispiel. Es ist egal, welchen Pin ich angebe. Das Ergebnis ist immer gleich. In diesem Programm ist das halt ein Notwendiger Modulationspin.

    Ich werde gleich mal ein anderes Beispiel mit Fehlermeldung zeigen.

  • Hier ein ganz einfaches Beispiel für LED an, LED aus.

    Und die Fehlermeldung:

    Traceback (most recent call last:

    File "/home/pi/Häuser.py",line 7, in <module>

    GPIO.setup(LED12,GPIO.OUT)

    RuntimeError: No access to /dev/mee. Try running as root!

  • Und wie gesaft: Mit Raspi3 oder 4 funktioniert es und mit import gpiozero auch auf dem Raspi5. Also kein Hardwarefehler und auch kein Programmierfehler.

    Soweit ich erfahren konnte, arbeitet der Raspi5 mit einer anderen Struktur als seine Vorgänger. Und deshalb soll wohl der Import von rpi.GPIO nicht funktionieren.

  • Siehe z.B. https://www.tomshardware.com/how-to/control…o-with-python-3

    Quote

    The Raspberry Pi 5 has just been released and it introduced us to a more powerful Pi, but it also changed a few things and most notably it was the GPIO.

    We still have the same 40-pin GPIO but it works a little differently now as it is connected to the new RP1 southbridge chip. Why does this matter? Well it all boils down to how we write code that interacts with the GPIO. In the past, alot of projects favored RPi.GPIO. This was a community project by Ben Croston and it served multiple generations of Raspberry Pi well. With the Raspberry Pi 5, we are unable to use RPi.GPIO due to how the GPIO pins are memory mapped. This forces us to use an alternative, and libgpiod is the focus of this how to.

    Libgpiod, specifically python3-gpiod is a pure Python module for interacting with the GPIO. It feels similar to RPI.GPIO in that we have to explicitly set the GPIO pins before we use them. We see gpiod as more of an intermediate module for Python and the GPIO. If you are new to this, use GPIO Zero which also works with the Raspberry Pi 5. GPIO Zero was created by Ben Nuttall and Dave Jones and greatly simplifies the GPIO.

    Oder hier: https://forums.raspberrypi.com/viewtopic.php?t=359742

    Quote

    Any library written for the GPIO of earlier Pis will not work on the Pi5 (unless the author updates the library), RPi.GPIO is a GPIO library. It has not been updated for the Pi5. You can not use RPi.GPIO on the Pi5

    Auch dort werden verschiedene (weitere) Alternativen erwähnt.

  • Auch dort werden verschiedene (weitere) Alternativen erwähnt.

    Danke, das ist ja genau was ich meine.

    Für normale Ein- und Ausgänge ist das ja auch kein Problem. Da kann ich ja mit gpiozero arbeiten. Aber bei Sonderfällen wie die Ansteuerung meines TB6600 muß ich dann halt wieder von Vorne beginnen und ausprobieren was funktioniert. Bis dahin habe ich ja noch die anderen Raspi´s. Schade aber auch.

    Naja, danke jedenfalls für eure Unterstützung. Ich werde hier berichten, wenn ich eine Lösung gefunden habe.

  • In dem zweiten verlinkten wird ein drop-in-replacement für rpi.gpio erwähnt...

    Und dort heißt es:

    On a pi5, create a venv (with --system-site-packages) and activate it.

    Code: Select all

    Code
    pip install rpi-lgpio

    The blink example with "import RPi.GPIO as GPIO" then works perfectly.


    Also doch mit Hilfe von "venv", also eine Art VM.

    Noicefloor hält das nicht für Zielführend.

    Werde es trotzdem in den nächsten Tagen testen. :/

    Vielen Dank. :danke_ATDE:

  • Hallo,

    Also doch mit Hilfe von "venv", also eine Art VM.

    Noicefloor hält das nicht für Zielführend.

    Das ist falsch und falsch und falsch.

    Ein venv ist _keine_ virtuellen Maschine, noch nicht mal im Ansatz. Ein venv ist Python-Interpreter mit Modulen, die abgeschottet von denen des Systems sind. In einem venv installierte Pakete sind für das System nicht sichtbar und auch nicht für anderen venv. Das restlich System und die Hardware sind "real" und nicht virtualisiert.

    Für mehr Details siehe z.B. https://realpython.com/python-virtual-environments-a-primer/

    Und "nicht für zielführend" bezog sich auf den Fehler. Wenn du ein Problem mit dem Hardwarezugriff hat ändern ein venv daran genau gar nichts. Grund: siehe oben.

    Das man ein venv anlegt ist schon lange "best practice" mit Python. Ausnahme: systemweit installierte Pakete, die das System braucht. Ab Raspberry Pi OS Bookworm wird bei der Installation via pip auch ein venv forciert. Was nicht an Raspberry Pi OS liegt, sondern an einer Änderung bei pip. Bei Ubuntu ist das z.B. ab Ubuntu 23.04 so.

    Gruß, noisefloor

    P.S.: das dritte "falsch" ist: noisefloor schreibt man mit s, nicht mit c... :)

  • Aber bei Sonderfällen wie die Ansteuerung meines TB6600 muß ich dann halt wieder von Vorne beginnen und ausprobieren was funktioniert.

    Die Ansteuerung dazu ist das was du in #4 zeigst?

    Das wär doch nicht schwer auf gpiozero umzustellen, oder gibt es noch weiteren Code den du nicht gezeigt hast

  • Die Ansteuerung dazu ist das was du in #4 zeigst?

    Das wär doch nicht schwer auf gpiozero umzustellen, oder gibt es noch weiteren Code den du nicht gezeigt hast

    Ich habe eine große Winterlandschaft mit python gesteuert, unter anderem auch einen Bahnhof mit einem H0 Zug und Anzeigetafel. Aber Probleme bereitet mir einzig das Riesenrad. Die Ansteuerung des TB6600 ist in dem ersten Code, den ich gepostet habe. Ich melde mich morgen nochmal. Jetzt sind erstmal die Hunde dran und dann ist Feierabend für heute. Gute Nacht an alle. :danke_ATDE:

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!