Update Ostern,
gute Ideen müssen sich an frischer Luft als haltbar erweisen ...
Habe inzwischen Urlaub gehabt und einfach mal nachgedacht.
- Problem der UID gelöst, MFR522 kann die ID meiner billigere NFC's lesen.
- Die Fehlermeldung oben resultiert aus den erwarteten gelesenen Daten.´, die auf dem Chip gespeichert sein könnten.
Da aber meine Chips 4 statt 8 Byte auf einer Seite haben, müsste die gesamte Klasse des MFR522 umgeschrieben werden. (mach ich wenn mir mal sterbens langweilig ist)
- in zwischen bin ich soweit, das die ID gelesen wird, in einer ChipListe gesucht wird und der Titel des Stücks ...
- an den VLC-Player zum abspielen gegeben wird.
Um das Abspielen zu ermöglichen braucht das Programm einen Sleep in Länge des Stücks.
Habe mich damit beholfen zur Laufzeit über http://github.com/Ciantic Songdetails die Abspiellänge zu ermitteln und als Pausenwert zu verwenden. Dann muss später keiner die Abspiellänge dazu erfassen
- VLC lässt sich sehr einfach über python vlc bindings befehligen. Ok, VLC ist vielleicht ein bisschel Oversized, aber es ging hauptsächlich darum, schnell und einfach zum Erfolg zu kommen, der Zweck heiligt die Mittel..
Allerdings wirft er eine Fehlermeldung aus :
[01539ac8] pulse audio output error: PulseAudio server connection failure: Connection refused
Hat hier jemand eine Lösung wie ich die weg bekomme? PulseAudio habe ich bereits deinstalliert ...
Als nächstes soll ein Taster die Titelauswahl bestätigen,
den Taster muss ich noch programmieren....
Anschließend noch ein paar Dinge damit Bengels das Ding nicht irre werden lassen, z.B. das ein Song erst dann gesartet wird, wenn er eine gewisse Zeit ausgewählt ist, sagen wir ... 1,5 Sekunden oder 2.
Dann kommt noch eine Methode dazu, die wenn ein Chip gelesen wird, welcher keinen Song zugeordnet ist , einen Songtitel mit dem NFC in der ChipListe angelegt wird.
Hier meine Testumgebung .... (bissel sehr provisorisch )
Und hier der erste Stand des Codes (Read.py) :
(falls es interessiert)
#!/usr/bin/env python
# -*- coding: utf8 -*-
import RPi.GPIO as GPIO
import MFRC522
import signal
import time # nachtrag für LED-Test
import vlc
import time
import songdetails
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.output(11,GPIO.LOW)
dauer = 2
continue_reading = True
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
global continue_reading
print "Ctrl+C captured, ending read."
continue_reading = False
GPIO.cleanup()
def titelsuche(dieID):
try:
d = open("JJB/Titel/ChipListe.txt")
except: print "Dateilesefehler - ChipListe.txt"
dateizeilen = d.readlines()
d.close()
for zeile in dateizeilen:
satz = zeile.split(":")
if satz[0] == dieID :
titel = satz[1]
return titel
def play(titelname):
song = songdetails.scan("JJB/Titel/" + titelname)
if song is not None:
dauer = song.duration.seconds
p = vlc.MediaPlayer("JJB/Titel/" + titelname)
p.play()
time.sleep(dauer)
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
# Welcome message
print "Moin"
print "Drücke STRG + C um das Programm zu beenden."
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
# Scan for cards
(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"
# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
dieID = str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
# print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
print "String :" + dieID
titelName = titelsuche(dieID)
print titelName
play(titelName)
GPIO.output(11,GPIO.HIGH)
time.sleep(dauer)
GPIO.output(11,GPIO.LOW)
Alles anzeigen
Ich freue mich sehr darüber, das Projekt macht mir nen riesen Spaß.
Was sagt ihr dazu?
Grüße
Grimbart