Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Download Reaktionen Spiele Gadgets Kontakt <<< Python: Puslweitenmodulation Python: Kommandozeilenparameter >>> Python: HintergrundaktivitätDer Schaltplan zum KapitelAbbildung 1:Zwei LEDs und ein Servo werden in den Beispielen dieses Kapitels geschaltet. Das Servo sollte ein Microservo (auch 9g Servo genannt) sein, da diese einen geringeren Strom ziehen als Standardservos. Alles zum korrekten Anschließen von LEDs an GPIOs gibt's im Kapitel zu LEDs mit Hilfe von GPIOs schalten. Welche Pins welche Funktion haben, ist im Kapitel zur Hardware des Raspberry Pi nachzulesen. Parameter ändern, ohne das Programm neu zu startenBislang haben wir ein Python Skript immer neu starten müssen, um Parameter innerhalb des Programmes ändern zu können. In diesem Kapitel möchte ich zeigen, wie man das auch machen kann, während das Programm läuft. Ein üblicher Weg, Daten an ein laufendes Programm zu übergeben, besteht im Einlesen von Dateien. Das Programm muss dazu ständig prüfen, ob eine bestimmte Datei vorhanden ist und sollte das der Fall sein, die darin enthaltenen Parameter einlesen. In dem folgenden Beispiel lautet der Name der Datei "ParameterGPIO.txt" und diese muss in dem Verzeichnis "/home/pi/" liegen:
Speichert dieses Skript unter "/home/pi/background.py" und macht es ausführbar: chmod a+x background.py Damit das Programm im Hintergrund läuft, muss dieses mit einem '&' Zeichen am Ende der Befahlszeile gestartet werden: ./background.py& Läuft das Programm im Hindergrund, so könnt ihr Parameter an dieses übergeben, indem ihr eine Datei mit Namen "/home/pi/ParameterGPIO.txt" generiert und in diese eine Befehlszeile schreibt. Das kann mit dem Befehl "echo" gemacht werden. Um somit die LED an Pin 16 mit 40% Pulsweite einzuschalten, lautet der Befehl: echo GPIO16 0.4 > /home/pi/ParameterGPIO.txt Den Servohebel auf 90° im Uhrzeigersinn zu drehen, geht mit: echo GPIO12 -1.0 > /home/pi/ParameterGPIO.txt Den Servohebel auf 90° entgegen dem Uhrzeigersinn zu drehen, geht mit: echo GPIO12 1.0 > /home/pi/ParameterGPIO.txt Übergebt ihr für das Servo einen ungültigen Parameter, so erscheint eine Fehlermeldung: echo GPIO12 -2.0 > /home/pi/ParameterGPIO.txt Wichtig ist die korrekte Groß- und Kleinschreibung! So wird der Befehl: echo Gpio12 -2.0 > /home/pi/ParameterGPIO.txt schlicht und einfach ignoriert! Ihr könnt das Skript nicht mehr mit der Tastenkombination 'ctrl+c' beenden, da im Hintergrund laufende Prozesse keine Tastatureingaben erhalten. Um das Skript dennoch zu beenden, muss der Befehl: killall python eingegeben werden. DiensteEin derartiges, im Hintergrund laufendes Programm bezeichnet man auch als Dienst, Service oder Daemon. Im Kapitel zu Pulsweitenmodulation wurde bereits darauf hingewiesen, dass die Funktionen von "gpiozero" in Python nur funktionieren, wenn der entsprechende "Daemon", also ein Programm namens "pigpiod" im Hintergrund läuft. Das Programm überwacht die Datei "/dev/pigpio". Somit kann die LED an Pin 16 auch ohne ein Python Skript von der Kommandozeile durch den Befehl:echo "p 23 40" > /dev/pigpio mit einer Pulsweite von 40% eingeschaltet werden. Zu beachten ist, dass dieser Befehl nicht die physische Nummerierung verwendet, sondern die Nummerierung wie sie der Befehl: pinout für die GPIOs ausgibt. Der physische Pin 16, an dem in unserem Beispiel eine LED angeschlossen ist, entspricht GPIO 23 an einem Raspberry Pi 1, Model B+. Im Gegensatz zu unserem Python Skript beherrscht das Programm pigpiod wesentlich mehr Befehle und kann auf alle GPIOs zugreifen - nicht nur auf die 3 GPIOs in dem Beispielskript zu diesem Kapitel. Der Vorteil unseres Skripts liegt aber darin, dass wir sehr schnell beliebige Befehle, selbst solche die pigpiod nicht beherrscht, hinzufügen können. <<< Python: Puslweitenmodulation Python: Kommandozeilenparameter >>> Neuigkeiten Das Projekt Technik RoboSpatium Unterstützung Stichwortverzeichnis Archiv Download Reaktionen Spiele Verweise Gadgets Kontakt Impressum |