[Projekt] jukebox4kids (Jukebox für Kinder)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • So habe jetzt ein frisches System aufgesetzt.

    Mein Reboot Befehl läuft auf PIN 11 aber komischerweise nicht auf PIN 37. Wenn ich den Skript dahin anpassen startet der Pi in einer Endlosschleifer neu. Da bedeutet ja das dort immer LOW anliegt. Irgendwie komisch. Schaltung ist gleich der von PIN 11 aufgebaut.

    Dann habe ich nochmals versucht einen Skript selber zu basteln mit os.system.

    Habe aber jetzt in meinem Buch gesehen das man hiermit keine oder nur schwer fremde Kommandos aufrufen kann. (Buch Raspberry Pi das umfassende Handbuch. S.703)

    Danach habe ich nochmal die Vorlage von Linus .

    Hier reagierte aber auch leider der Pi nicht drauf.

    Wenn ich wieder Zeit habe lese ich mich jetzt erstmal ein wie ich Fehler sehen und bewerten kann bzw. euch das besser definieren kann.

    Wenn ihr denk woran es liegen könnt aber Infos braucht dann schreibt mir, dann versuche ich es zu beantworten.

  • so habe nun shell skripte geschrieben für die bash. Mit denen kann ich die VLC Funktionen ansteuern. kann ich nun im Python irgendwie diese shell datein nach drücken des jeweilgen Tasters ausführen?

    Wenn Pin 11 Low

    dann starte btrack+.sh

    Geht das irgendwie. Habe wieder versucht selber was zu finden aber habe nicht wirklich was gefunden oder nicht verstanden.

  • In Python hast du verschiedene Methoden um das zu machen, bspw. os.system. Empfehlen würde ich dir allerdings das subprocess-Modul. Vorteil dabei ist, daß du noch auf bestimmte Dinge reagieren kannst. Hier ist mal ein relativ triviales Beispiel:

    So, statt subprocess.run kann man nun auch subprocess.check_output benutzen. In dem Fall enthält pp direkt die Ausgabe des ausgeführten Befehls, außerdem gibt es dann bei der Exception das Attribut output, welches ebenfalls die Ausgabe enthält.

    Falls du direkt die Ausführung eines bestimmten Befehls hart kodieren willst, kannst du das wie folgt machen (natürlich muß trotzdem das Modul importiert werden usw.):

    Code
    pp = subprocess.run(["./pfad/zum/programm", "erster parameter", "zweiter parameter"], check=True)

    Desweiteren könnte zu run und check_output je nach Anforderungen auch der Parameter shell=True interessant sein.

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

    Einmal editiert, zuletzt von Assarbad (24. November 2017 um 22:21) aus folgendem Grund: Da war bei der Formatierung etwas schief.

  • Hallo Gemeinde.


    Ich habe gestern nochmal etwas gebastelt.

    Folgendes funktioniert nun dank eurer Mithilfe.

    Lauter Leiser aber leider nur jeder Knopf ein Mal.

    Es scheint mir, dass die Pins nicht permanent überwacht werden auf den Zustand Low

    Ich habe nun zwei Dateien erstellt. Einmal für Lauter, einmal für Leiser.

    Diese habe ich den "Autostart" eingebunden /etc/rc.local

    Die anderen Befehle muss ich über subprocess einbinden, da os diesen geraden Strich I nicht als Befehl akzeptiert. Daran werde ich mich nochmal ranhalten mit die vorhergeschriebenen Ansätzen.

    Vielleicht könnt Ihr mir einen Hiweis geben wie ich aber die permanente Überwachung der PINs hinzufügen kann in den Skript.

    Momentan sieht dieser wie folgt aus:

    Code
    import os, sys, time, RPi.GPIO as gpio
    gpio.setmode(gpio.BOARD) # Pin-Nummern verwenden
    gpio.setup(15, gpio.IN) # Pin 15 = Reset-Button
    
    
    while 1:
        if gpio.input(15)==gpio.LOW:
            os.system("amixer sset Master 70+")
            sys.exit()
        time.sleep(0.05)

    Für Leiser mit PIN 16 und Befehl 70-.

    Wie geschrieben funktioniert dies nur ein Mal.

    Was ich schon versucht habe mit einzubinden:

    gpio.wait_for_edge(15, gpio.FALLING)

    das hat aber nicht geklappt bzw. konnte ich auch hier nur einmal den Knopf betätigen und es wurde nur einmal die Aktion ausgeführt.


    • Offizieller Beitrag

    Hallo hailogugo,

    eine Empfehlung für Dich wäre gpiozero, das nimmt Dir Schleifen oder Interrupts schon mal ab. Dein Script könne z.B. so aussehen:

    Ist natürlich ungetestet, auf die schnelle aus dem Kopf geschrieben und könnte sogar funktionieren. ;)

    Soweit ich gelesen habe, fehlte bei Dir auch das % nach der Lautstärkeangabe. Ich habe relative Angaben genommen, denn das macht mehr Sinn und laut und leise in ein Script verpackt. Beachte dabei, dass bei gpiozero GPIOs und nicht die Pins angegeben werden müssen!

  • Ich bin inzwischen auch weiter gekommen und konnte inzwischen auch schon den ersten Knopf anschließen. Dieser dient bisher zum ein und ausschalten bzw runter- wieder hochfahren bei bestehender Stromversorgung.

    Da ich mein Radio in Form eines Feuerwehrautos baue, habe ich 3 Knöpfe bestellt die eine LED beinhalten. Da kommt jetzt mein Problem. Von Handwerken und programmieren verstehe ich jeweils einiges, von Elektrotechnik jedoch weniger.

    Kann ich 3 LEDs am raspberry pi 3b betreiben oder soll ich diese extra an der powerbank betreiben mit der das gesamte System läuft? Ich würde diese gerne über verschiedene GND Pins anschließen damit ich die blauen Leds auch blinken lassen könnte. Wie muss ich diese (in reihe?) schalten und welche Widerstände werden benötigt?

    https://www.exp-tech.de/zubehoer/taste…omentary?c=1103

    The body is a black plastic with the LED built inside. There are two contacts for the button and two contacts for the LED, one marked + and one -. The forward voltage of the LED is about 2.2V so connect a 220 to 1000 ohm resistor in series just as you would with any other LED to your 3V or higher power supply.

  • Wenn Du 1000 Ohm als Vorwiderstand nimmst, braucht so ein Taster bei 5V ca. 3mA, bei 3,3V nur ca. 1mA.

    Das ist also nicht viel das kannst Du sogar mit den GPIO direkt schalten, falls Du die Tasten per Raspberry ein- und ausschalten willst.

    Bei 3,3V dürften die 1000Ohm etwas dunkel sein, da kannst Du auch 470mA nehmen - da ist der Strom ca. 2mA - also auch nicht viel.

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • 470 Ohm: Das hängt etwas von der verwendeten LED ab (wie hell die leuchtet) und wie hell du es haben willst. Ggf. kannst Du den Widerstand nach belieben anheben oder senken. Mehr als 10mA sollten es aber nicht sein - manche LED vertragen nämlich nicht mehr. Gesamt soll aber an 3,3V nicht mehr als 50mA (also auch über die GPIO) gezogen werden. Falls Dir das zu wenig ist, wäre 5V und Dauerleuchten dafür besser geeignet.

    Widerstand muss vor jede LED, da sich die Ströme sonst unterschiedlich aufteilen können und dadurch unterschiedlich hell leuchten. Es wird vermutlich auch mit einem gemeinsamen Vorwiderstand funktionieren, ist aber sehr unprofessionell.

    Blinken lassen kannst Du sie nur, wenn Du sie schaltest (an GPIO). Ja, wenn Du alle gleich beleuchten willst, kannst Du sie parallel an einen GPIO und GND hängen. Pass halt auf den Strom auf - wenn es mehr wird, solltest Du auf 5V umstellen und den GND mit einem Transistor schalten.

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

  • hyle

    Ich habe den Skipt nun ausprobiert. Es kommt folgende Fehlermeldung:

    Ich habe beide Taster einmal gedrückt.

    Ich habe auch mal folgenden Skript probiert

    Das funktionierte.

    Ich hatte hier noch ein wenig gelesen:

    gpiozero Howto

    Kann mit den Fehlern jemand was anfangen?

  • So nun nochmal mit Python 3 und auch der Skript

    Skript


    Fehlermeldung

    • Offizieller Beitrag

    Ich hab's mal nachgebaut und das hier funktioniert bei mir:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!