Seite 1 von 1
Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Dienstag 16. Juni 2020, 10:38
von Kla-Sur
Hallo bin neu hier. Habe gerade Phyton für mich entdeckt und versuche mich daran. Habe gerade einen Versuch
mit einem Beispielprogramm gestartet und komme da irendwie nicht weiter :
#!/usr/bin/python
# coding=utf-8
import time,sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.Board)
GPIO.setup(7,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def motion(pin):
print ("Achtung!Bewegung erkannt!")
return
GPIO.add_event_detect(7, GPIO.RISINGI)
GPIO.add_event_callback(7, motion)
# mit minimaler CPU-Auslastung auf das Prog -End STRG-C
try:
while True:
time.sleep(0.5
# except KeyboardInterrupt :
# GPIO.cleanup()
sys.exit()
Die Fehlermeldung lautet :
Traceback (most recent call last):
File "/home/pi/Bewegungsmelder.py", line 23
sys.exit()
^
SyntaxError: invalid syntax
Es sollte doch eigentlich die Meldung kommen
Achtung!Bewegung erkannt!
Wo liegt hier der Fehler ?
mfg Klaus
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Dienstag 16. Juni 2020, 11:06
von Sirius3
Zähl mal Deine Klammern.
Das sys.exit ist eh überflüssig. Warum hast Du cleanup auskommentiert? Das solle übrigens immer aufgerufen werden, nicht nur, wenn das Programm per STRG+C abgebrochen wird.
Python2 solltest du nicht mehr benutzen.
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Dienstag 16. Juni 2020, 13:36
von __blackjack__
@Kla-Sur: Weitere Anmerkungen:
``as`` beim Importieren ist zum umbenennen gedacht, `GPIO` wird aber gar nicht umbenannt.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`GPIO` kennt weder `Board` noch `RISINGI` als Attribute. Beim ersten ist wahrscheinlich `BOARD` gemeint und beim zweiten das `I` am Ende zu viel.
Die Rückruffunktion kann man auch gleich bei `add_event_detect()` übergeben.
Der Kommentar mit minimaler CPU-Auslastung ist falsch, denn auch die ``while``-Schleife mit dem `sleep()` verbraucht CPU-Zeit. Und es geht mit weniger CPU-Zeit: `signal.pause()`.
Das ``return`` in der `motion()`-Funktion ist überflüssig.
Code: Alles auswählen
#!/usr/bin/env python3
from signal import pause
from RPi import GPIO
def on_motion(_pin):
print("Achtung! Bewegung erkannt!")
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(7, GPIO.RISING, on_motion)
#
# Mit minimaler CPU-Auslastung auf das Programmende durch STRG-C warten.
#
try:
pause()
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
if __name__ == "__main__":
main()
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Mittwoch 17. Juni 2020, 17:03
von hyle
Mit gpiozero (
https://gpiozero.readthedocs.io/en/stab ... ion-sensor) statt
RPi.GPIO wäre das ganze übrigens noch einfacher umzusetzen.

Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Freitag 10. Juli 2020, 14:16
von Kla-Sur
Hallo habe wieder gebastelt und jetzt komme ich nicht weiter.
Da brauche ich mal eure Hilfe!
import RPi.GPIO as gpio
gpio.setmode(gpio.BOARD)
gpio.setup(11, gpio.IN )
status = gpio.input(11)
gpio.wait_for_edge(11,gpio.FALLING)
print(status)
gpio.cleanup(11)
Jetzt möchte ich bei Wechsel eine Mail versenden
import smtplib, sys
from email.mime.text import MIMEText
from email.header import Header
frm = "absender"
to = "empfänger"
subj = "Betr"
msg = "Meldung"
try:
mime = MIMEText(msg, "plain", "utf-8")
mime["From"] = frm
mime["to"] = to
mime["Subject"] = Header(subj, "utf-8")
smtp = smtplib.smtp("mailserver")
smtp.starttls()
smtp.login("Anmeldung")
smtp.sendmail(frm, [to], mime.as_string())
smtp.quit()
except:
print("Beim Mail Versandt in ein Fehler aufgetreten", sys.exc_info())
Die einzelnen Scripte klappen schon , aber wie kann ich die zwei zusammenstellen !!
Dank schon jetzt.
Klaus
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Samstag 11. Juli 2020, 14:50
von hyle
Du willst ein callback verwenden und die Mail-Geschichte in eine Funktion schreiben.
https://sourceforge.net/p/raspberry-gpi ... ki/Inputs/ (wenn es unbedingt RPi.GPIO sein muss)
Btw. Verwende bitte in Zukunft Codeblocks (</>), dann bleiben auch die Einrückungen erhalten.
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Mittwoch 15. Juli 2020, 09:42
von Kla-Sur
Danke für deine Antwort Hyle,
was meinst du mit der Bemerkung (wenn es unbedingt RPI.GPIO sein muss)?
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Mittwoch 15. Juli 2020, 09:48
von Jankie
Das meint er damit. Das Modul gpiozero wird heutzutage eher genutzt als RPi.GPIO.
Re: Raspberry PI 4 2GB /Bewegungsmelder Infrarot
Verfasst: Mittwoch 15. Juli 2020, 16:19
von Kla-Sur
Das ist doch wieder Schei.... Da lernste laut Buch und bist froh das mal was geklappt hat und dann ist das grade erlernte schon "alt".
Danke Jankie
Re: Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Verfasst: Mittwoch 15. Juli 2020, 19:31
von __blackjack__
@Kla-Sur: Das ist im Computerbereich eigentlich schon immer so gewesen. Sowohl die Technik als auch die Software entwickelt sich weiter. Und aus Fehlern lernt man. `gpiozero` ist in der Regel einfacher und trotzdem etwas ”mächtiger” als `RPi.GPIO`. Die haben da auf die Benutzer, insbesondere auch die Zielgruppe der Anfänger, geschaut, und was sie für die besser machen können.