Pi Zero Internet Aktivitäts-LED mit Python

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Sabrina112
User
Beiträge: 1
Registriert: Freitag 20. Mai 2022, 16:17

Hallöochen

da der Pi Zero keine Aktivitäts-LED für das Internet hat, wollte ich mithilfe einer Led an Port5 und Python eine „Nachrüsten“.
Am Besten wäre es wenn bei jeden 100KB (egal ob rein oder raus) die LED einmal kurz blinkt.


Ich komm nur nicht weiter.

Code: Alles auswählen

import RPi.GPIO as GPIO # RPi.GPIO can be referred as GPIO from now
import time
 
ledPin = 5    # pin5
 
def setup():
        GPIO.setmode(GPIO.BOARD)       # GPIO Numbering of Pins
        GPIO.setup(ledPin, GPIO.OUT)   # Set led-Pin as output
        GPIO.output(ledPin, GPIO.LOW)  # Set led-Pin to LOW to turn Off the LED

        except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the destroy() will be  executed.
                Endprogram()



Bitte habt Nachsicht, ich bin blutiger Anfänger.



Liebe Grüße
Sabrina
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sabrina112: Nachsicht mit blutigen Anfängern ist so eine Sache. Wenn das schon damit anfängt das Code gezeigt wird der irgendwie zusammenkopiert wurde und deshalb nur begrenzt Sinn macht und so dermassen offensichtlich syntaktisch falsch ist, fragt man sich natürlich schon ab da Wille besteht selbst was zu machen, oder ob das wieder darauf hinaus läuft das irgendein Code hingeworfen, und gehofft wird wir würden hier schon lauffähigen Code liefern, der für Dich die Hausaufgabe löst.

Der Code kommt nicht einmal am Compiler vorbei. Und wenn man die zwei Zeilen löscht die da wie ein Fremdkörper drin stehen und dafür verantwortlich sind, dann macht das Programm nichts ausser eine Funktion zu definieren, die aber nicht ausgeführt wird. Warum zeigst Du diesen Code der nicht kompliliert und nicht mal etwas machen würde wenn der Compiler den fehlerhaften Teil einfach ignorieren würde?

Trotzdem Anmerkungen zum Quelltext: Eingerückt wird per Konvention vier Leerzeichen pro Ebene, nicht acht.

``as`` beim Import ist zum umbenennen da, aber `GPIO` wird gar nicht umbenannt.

`time` wird importiert aber nirgends verwendet.

Kommentare sollen dem Leser einen Mehrwert über den Code geben. Faustregel: Kommentare beschreiben nicht *was* der Code macht, denn das steht da bereits als Code, sondern warum er das macht. Sofern das nicht offensichtlich ist. Offensichtlich ist in aller Regel auch was in der Dokumentation von Python und den verwendeten Bibliotheken steht.

Wirklich schlecht sind inhaltlich falsche Kommentare, denn die sollen ja gerade Fragen die der Leser haben könnte beantworten und Klarheit schaffen. Wenn Code und Kommentar nicht zusammenpassen, erreicht man aber das Gegenteil. Der Leser weiss dann nicht wo der Fehler ist — im Code oder im Kommentar. Wenn da im Kommentar steht `destroy()` wird aufgerufen, im Code aber `Endprogram()` aufgerufen wird, was wäre dann korrekt? Wobei es hier beide Funktionen gar nicht gibt, also beides nicht richtig sein kann.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `ledPin` müsste `LED_PIN` heissen und `Endprogram()` müsste `end_program()` heissen.

Falls man `RPi.GPIO` verwendet ist es wichtig das am Ende `GPIO.cleanup()` aufgerufen wird. Das sollte man mit einem ``try``/``finally`` sicherstellen, damit das auch passiert wenn das Programm durch eine Ausnahme abgebrochen wird mit der man nicht gerechnet hat.

Das Grundgerüst würde dann so aussehen:

Code: Alles auswählen

#!/usr/bin/env python3
from RPi import GPIO


LED_PIN = 5


def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(LED_PIN, GPIO.OUT, initial=GPIO.LOW)


def main():
    try:
        setup()

    except KeyboardInterrupt:
        pass
    finally:
        GPIO.cleanup()


if __name__ == "__main__":
    main()
Ich würde allerdings wenn es keinen guten Grund gibt, `gpiozero` statt `RPi.GPIO` verwenden. Das hat die modernere und einfachere API.

An Netzwerkzähler kann man mit dem `psutil`-Modul kommen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Von gpiozero gibt es sogar schon etwas (fast) fertiges: https://gpiozero.readthedocs.io/en/stab ... -indicator
Alles was wir sind ist Sand im Wind Hoschi.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@hyle: Wobei das ja nicht so ganz das ist was gesucht ist, und sich auf Basis eines `gpiozero.PolledInternalDevice` selbst was ähnliches zu bauen ist für Anfänger schon etwas anspruchsvoll(er).
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Stimmt! Da habe ich wohl zwar Aktivität gelesen, aber als Konnektivität interpretiert. :oops:

Sorry!
Alles was wir sind ist Sand im Wind Hoschi.
Antworten