pico mp3 abspielen (dfplayer)

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Greg50007
User
Beiträge: 3
Registriert: Sonntag 16. Juni 2024, 15:30

Hallo ihr lieben und schlauen,
ich oute mich gleich mal als raspberry pi Neuling. Bis jetzt habe ich lieber mit Arduinos gearbeitet und bis jetzt auch immer erfolgreich...
Das nächste Projekt erforderte aber (leider) einen pi pico w :P
Erste erfolge mit einer bluetooth Verbindung zwischen zwei pies war erfolgreich. Ein weiterer Teil des Projekts ist das abspielen von mp3 oder wav dateien.
Für arduino habe ich immer einen DFPlayer genutzt. Aber bis jetzt will der pi damit nicht funktionieren :(
Alles was google dazu zu sagen hat wurde ausprobiert, ohne erfolg...
Nun hoffe ich hier vielleicht auf andere Ideen oder Tipps (vielleicht hat es ja hier schonmal wer erfolgreich geschafft?)
Ich hoffe ich bin im python Forum richtig denn: für bluetooth und co habe ich micropython genutzt.
Jeder Tipp/Hinweis hilft und ich hoffe wirklich ihr könnt mir helfen, ich verzweifle langsam.
Habe auch schon nach anderen mp3 modulen oder shields geschaut aber irgendwie nix passendes gefunden.

Liebe Grüße
Greg
Benutzeravatar
__blackjack__
User
Beiträge: 13427
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Greg50007: Eine Suchmaschine mit Raspi Pico und DFPlayer gefüttert bringt mehrerere Ergebnisse. Also grundsätzlich scheint es zu funktionieren. Ansonsten ist da zu wenig Information in Deiner Frage um mehr sagen zu können. Wir wissen ja nicht was Google Dir gesagt hat, und was Du alles ausprobiert hast, und welche Fehler Du da vielleicht gemacht hast, oder was Google nicht gesagt hat, was man machen könnte/sollte.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
Greg50007
User
Beiträge: 3
Registriert: Sonntag 16. Juni 2024, 15:30

mehr infos, kein Problem:
grundsätzlich habe ich gefühlt alle libarys die ich dazu finden konnte ausprobiert.
In einem anderen Forum konnte ich noch folgenden Code und verkabelung finden:
Bild

Code: Alles auswählen

def isPlaying(): #routine to get the playing status
    statdef isPlaying(): #routine to get the playing status
    statusBytes = [1,2,3]
    while len(statusBytes)!=10: #sometimes you get double status
        uart.write(STATUS_ARRAY) # ask for the status
        time.sleep(0.1) #give it some time 
        statusBytes = uart.read()
        time.sleep(0.1) #give it some time 
    if statusBytes[6] == 1:
        return True
    else:
        return False
        
from machine import Pin,UART
import time
#constant
UART_TX = 0
UART_RX = 1
ONBOARD_LED_GPx = 25
BUTTON_GPx = 13
DEBUG = False
## command to play the next sound
PLAY_ARRAY = bytearray(5)
PLAY_ARRAY[0] = 0x7E
PLAY_ARRAY[1] = 0xFF
PLAY_ARRAY[2] = 0x03
PLAY_ARRAY[3] = 0x01
PLAY_ARRAY[4] = 0xEF
## command to get status
STATUS_ARRAY = bytearray(5)
STATUS_ARRAY[0] = 0x7E
STATUS_ARRAY[1] = 0xFF
STATUS_ARRAY[2] = 0x03
STATUS_ARRAY[3] = 0x42
STATUS_ARRAY[4] = 0xEF
## command to define the device to play
DEVICE_ARRAY = bytearray(8)
DEVICE_ARRAY[0] = 0x7E
DEVICE_ARRAY[1] = 0xFF
DEVICE_ARRAY[2] = 0x06
DEVICE_ARRAY[3] = 0x09
DEVICE_ARRAY[4] = 0x00
DEVICE_ARRAY[5] = 0x00
DEVICE_ARRAY[6] = 0x02
DEVICE_ARRAY[7] = 0xEF
## command to set max volume
VOLUME_ARRAY = bytearray(8)
VOLUME_ARRAY[0] = 0x7E
VOLUME_ARRAY[1] = 0xFF
VOLUME_ARRAY[2] = 0x06
VOLUME_ARRAY[3] = 0x06
VOLUME_ARRAY[4] = 0x00
VOLUME_ARRAY[5] = 0x00
VOLUME_ARRAY[6] = 0x0E
VOLUME_ARRAY[7] = 0xEF
#variable
pressed = False # start out with the button unpressed
#device definition
uart = UART(0, baudrate=9600, tx=Pin(UART_TX), rx=Pin(UART_RX))
led_onboard = machine.Pin(ONBOARD_LED_GPx, machine.Pin.OUT)
button = machine.Pin(BUTTON_GPx, machine.Pin.IN, machine.Pin.PULL_UP)
#define a button handler
def button_handler(port):
    global pressed
    if not pressed:
        if DEBUG:
            print("need to press")
        pressed = True
        led_onboard.value(1) 
#main
uart.write(DEVICE_ARRAY)
time.sleep(0.2) # give it some time to read the data
uart.write(VOLUME_ARRAY)
time.sleep(0.2) # give it some time to read the data
uart.write(PLAY_ARRAY)
led_onboard.value(0) 
time.sleep(0.2)
#put the button handler in place
button.irq(trigger=machine.Pin.IRQ_RISING, handler=button_handler)
while True:
    if pressed:
        pressed = False # absorb the press
        led_onboard.value(0) 
        if DEBUG:
            print("button pressed") #debug
        if isPlaying():
            if DEBUG:
                print("debug: still playing")
            time.sleep(1)
        else:
            if DEBUG:
                print("debug: play another song")
            # looks like we can play another song
            uart.write(PLAY_ARRAY)
            time.sleep(1) #lets give it a rest
    else:
        time.sleep(1) #lets give it a rest
        if DEBUG:
            print("debug button not pressed") #debug
Wärend es bei dem Ersteller funktioniert regt sich bei meinem dfplayer nichts.

Über thonny direkt konnte ich nur eine micropython libary finden: https://pypi.org/project/micropython-dfplayer/
In einem anderen Forum mit selbigen Thema hat mir ein anderer User scheinbar die selbe libary über github vorgeschlagen: https://github.com/redoxcode/micropython-dfplayer
Mit dieser habe ich nun weiter gearbeitet, erster Erfolg: der player blinkt gelegentlich.

Code: Alles auswählen

get_files_in_folder(folder)
returnt sowohl bei ihm als auch bei mir immer -1 (connection fehler), dabei blinkt der player kurz.

Code: Alles auswählen

play(folder,file)
führt bei ihm zum erfolg, bei mir weder Ton noch blinken.

Bild

Code: Alles auswählen

# dfplay.py
import time
from dfplayer import DFPlayer

df = DFPlayer(uart_id=1, tx_pin_id=4, rx_pin_id=5)
# wait some time till the DFPlayer is ready
time.sleep(0.2)
# change the volume (0-30). The DFPlayer doesn't remember these settings
df.volume(5)
time.sleep(0.2)
# play file ./01/003.mp3
df.play(1, 3)
Ich würde auch den Beitrag vom anderen Forum verlinken, ich hoffe das ist okay (ist halt in englisch): https://forums.raspberrypi.com/viewtopi ... 0#p2229930
Die SD Karte wurde nach vorgaben der libary und den zur verfügung gestellten beispiel dateien bespielt.

Hier alles weitere an libarys und code die/der ausprobiert wurde/n:
https://www.elektronik-kompendium.de/si ... 712021.htm
https://www.elektronik-kompendium.de/si ... 712031.htm
https://github.com/mannbro/PicoDFPlayer
https://www.reddit.com/r/raspberrypipic ... with_pico/
https://forum-raspberrypi.de/forum/thre ... r-problem/
https://forums.raspberrypi.com/viewtopic.php?t=305880
https://forums.raspberrypi.com/viewtopi ... r#p2156823

Die verkabelung wurde natürlich immer angepasst!

Sollten weitere Fragen bestehen gerne Fragen :) ich bin für jede hilfe dankbar, denn ich komme wirklich nicht weiter.
Und bevor es andere feststellen: Ja - ich habe von micropython nicht viel ahnung und betreibe für diesen Teil des projektes viel copy und paste. Ein grundverständis ist aber teilweise da UND copy und paste ist ja nicht schlecht wenn es funktioniert :P nur leider tut es das dieses mal nicht... habt ein bisschen nachsicht, ich komme halt eher aus dem java und android bereich.
hjliedtke
User
Beiträge: 7
Registriert: Sonntag 10. November 2019, 20:49

moin,
habe zufällig Deinen Beitrag gelesen.
Habe bisher manchmal gute Erfahrungen mit github gemacht.
Zu Deiner Frage :
https://github.com/lavron/micropython-d ... me-ov-file
zeigt einen Vorschlag, allerdings mit einem esp32 (also quasi ein großer Bruder des pico.
Ausprobieren konnte ich es aber mangels dfplayermini Modul leider nicht.
Gaethorix
User
Beiträge: 1
Registriert: Samstag 27. Juli 2024, 16:03

Huhu Greg ^^

Ich hatte letztens zu viel Zeit für dumme Ideen. Eine war so dumm, dass sie schon wieder geil war. XD
Also habe ich beim Dealer meines Vertrauens einen Pi Pico, DFPlayer, LEDs/-Ring/-Matrix und so bestellt...
Als das Minipäckchen an kam, habe ich den DFPlayer mit Tasten getestet: funzt!
Dann habe ich dem Pico Beinchen gegönnt und den Ring angeschlossen.
Die ersten Versuche waren ganz okay (japp...ich habe mich gerade auch als Neuling geoutet XD)...
Dann wollte ich den PFPlayer mit dem Pico steuern....Onkel Google um Hilfe gebeten...
Was soll ich schreiben...Ich habe die gleiche (Tor)tour durch wie du. Nix von dem was ich gefunden haben funzt. :(
Und alles so alt...Ausser deine Frage...

Also erst mal ums Licht gekümmert. Und zum ersten mal in einem Forum (hier) angemeldet.
Das "kümmern ums Licht" ist... ich behaupte mal: recht erfolgreich.

Beim picodfplayer ist mir aufgefallen, dass er in "micro Python" geschrieben ist.
Also habe ich mir den Code eben mal genauer angeschaut und versucht ihn anzupassen bzw. zu übersetzen.
Hab ja nu erfolgreiche Lichterfahrung...

Lange rede gar kein Sinn: datt Ding macht Mucke. Yeah... XD

Ist deine Anfrage noch aktuell?

Liebe Grüße


(Ich hoffe mein erster Post ist so in Ordnung?! o_O)
Greg50007
User
Beiträge: 3
Registriert: Sonntag 16. Juni 2024, 15:30

Hey, entschuldige. Ich war im Urlaub und hab ganz vergessen dir zu antworten o.O
Das Musik Pronlem konnte ich inzwischen auch lösen, wenn vermutlich auch komplizierter als nötig, aber so es war die einzige möglichkeit die erfolg zeigte.
Trotzdem vielen lieben Dank für die Rückmeldung :)
Antworten