Hallo liebe Forengemeinde,
ich bin auch noch relativ neu in Sachen Raspberry und vorallem im Python. Vieles schuster ich mir nach bestem Wissen zusammen und teste ob es funktioniert. Mein derzeitiges Projekt soll ein Schreiautomat sein, der ein Bild schießt, sobald jemand lang und laut genug schreit. Derzeit eigentlich nur laut genug, weil ich das ganze nur als Digital Signal empfangen kann.
Soweit funktioniert das auch. Der Schwellwert wird überschritten und ein Foto wir gemacht. Anschließend speichert das Script das Bild in einem Ordner.
Die GUI habe ich mit dem QT Designer gebastelt und dort ein QLabel erstellt, in welches das Bild nach dem Speichern geladen werden soll. Und hier hakt es.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *
import time
import RPi.GPIO as GPIO
import os
#Definierungen Mikrofon
pin_m = 19 #Mikrofonpin
pin_b = 21 #Button_oben
GPIO.setmode(GPIO.BCM) #GPIO Aufbau definieren
GPIO.setup(pin_m, GPIO.IN) #Mikrofon Digital PIN als Input definieren
GPIO.setup(pin_b, GPIO.IN, pull_up_down = GPIO.PUD_UP) #Button Digital PIN als Input definieren
#Definierung GUI
app = QApplication(sys.argv)
w = loadUi("schreibox_ui.ui")
w.introduction.setText("Hallo, das ist die Schreibox und du darfst sie gerne testen. Schrei doch mal ganz laut, bis auf dem Bildschirm etwas passiert.")
#Definierung Kamera
ORDNER = os.path.join(os.getcwd(),'Bilder/') #Speicherort der Bilder
KOMMANDO = 'raspistill -t 50 -w %i -h %i -n -o %s' #Kamerabefehl mit 0 sek Verzögerung, Platzhaltern für Weite und Höhe und Platzhalter für den Dateinamen
#Definierung Variablen
i = 0 #Bildzähler
# Bild machen
def foto_machen(channel):
global i
i += 1
#DATEINAME = 'bild_' + str(i) +'.jpg'
DATEINAME = time.strftime("%Y_%m_%d_%H_%M_%S") + '.jpg'
os.system( KOMMANDO % (1200, 840, ORDNER + DATEINAME))
print("Bild wurde aufgenommen. Dateiname lautet: " + ORDNER + DATEINAME)
bild = QPixmap("Bilder/"+DATEINAME)
bild = bild.scaledToWidth(950)
w.bild_label.setPixmap(bild) ####______ Hier passiert leider nix
time.sleep(0.1)
#Events empfangen
GPIO.add_event_detect(pin_m, GPIO.RISING, callback = foto_machen, bouncetime = 4000) ### MIKROFON als Auslöser
GPIO.add_event_detect(pin_b, GPIO.RISING, callback = foto_machen, bouncetime = 200) ### Button 1 als Auslöser
#try:
#while True:
#time.sleep(1)
#except KeyboardInterrupt:
# GPIO.cleanup()
# print("Bye")
w.show()
sys.exit(app.exec_())
Alles anzeigen
Die Stelle (hier passiert leider nichts) ist der Knackpunkt. Die Labelbezeichnung stimmt auf jeden Fall, da folgendes Script eben funktioniert:
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.uic import *
def bildloader():
w.bild_label.setPixmap(QPixmap("Bilder/test.jpg"))
app = QApplication(sys.argv)
w = loadUi("schreibox_ui.ui")
w.introduction.setText("Hallo, das ist die Schreibox und du darfst sie gerne testen. Schrei doch mal ganz laut, bis auf dem Bildschirm etwas passiert.")
w.connect(w.bildbutton, SIGNAL("clicked()"), bildloader)
w.show()
sys.exit(app.exec_())
Alles anzeigen
Im zweiten Script funktionert der setPixmap Befehl ganz wunderbar und beim Click auf den Button lädt das Label das Bild.
Ich weiß absolut nicht mehr, was ich noch machen könnte. Hat jemand eine Idee? Die Shell zeigt auch keine Fehlermeldung an.
Viele Grüße
Illef wars