Error bei Led "neben" einer API blinken lassen

  • Hallo:helpnew:,

    Ich bin ein kompletter Rpi bzw Python Beginner. Ich habe versucht ein Programm zu schreiben, welches eine API "baut" und nebenbei eine Led blinken lässt. Den Code für die API habe ich aus dem Internet kopiert und den für die zweite blinkende Led hab ich selbst dazu geschrieben, aber die Led blinkt nicht. Wenn ich app.run(debug=True, host="0.0.0.0") und loop() tausche, funktioniert nur die Blink-Led aber die API nicht. Kann es sein, dass der Code nach app.run bzw nach dem loop() nicht mehr genommen wird? Da ich den Code für die API nur kopiert habe und ich ein kompletter Anfänger bin wäre außerdem noch ziemlich hilfreich, wenn mir jemand den API Code in wenigen Worten erklären könnte. Ich denke, dass der Fehler im Code für einen Profi eine Kleinigkeit ist, ich aber finden ihn leider nicht<X

    :danke_ATDE:im voraus


    das ist der Code:

    from flask import Flask
    from flask import jsonify
    import RPi.GPIO as GPIO
    import time

    LED = 17
    LED1 = 18

    def setup():
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(LED1, GPIO.OUT)
    GPIO.output(LED1, GPIO.LOW)

    app = Flask(__name__)
    @app.route('/api/led/on')
    def led_on():
    GPIO.output(LED, GPIO.HIGH)
    return jsonify(led=GPIO.input(LED))

    @app.route('/api/led/off')
    def led_off():
    GPIO.output(LED, GPIO.LOW)
    return jsonify(led=GPIO.input(LED))


    def loop():
    while True:
    GPIO.output(LED1, GPIO.HIGH)
    print("led on")
    time.sleep(1)
    GPIO.output(LED1, GPIO.LOW)
    print("led off")
    time.sleep(1)

    def destroy():
    print("cleanup")
    GPIO.cleanup()

    if __name__ == '__main__':
    setup()
    app.run(debug=True, host="0.0.0.0")
    try:
    loop()
    except KeyboardInterrupt:
    destroy()

  • Eine while Schleife, die keine Abbruchbedingung hat, läuft ewig. Und konsequenterweise auch kein code, der nach ihr kommt.


    Und intern macht auch app.run das. Es muss ja dauerhaft prüfen, ob eine http Anfrage reinkommt. Also läuft auch danach kein Code mehr.


    Wenn du mehrere Dinge quasi gleichzeitig machen willst, musst du dich mit dem Thema nebenläufigkeit auseinander setzen.