3$ mp3 player
I received a microbit mystery box recently and two of the items it contained were a microbit v1.5 and an amp/speaker Parallax #32781 so I thought I would put them together in a small project. The project I chose was a simple mp3 player with a microbit controller. The player I bought was
https://www.amazon.com/dp/B09GPC4VXS?ref=ppx_yo2ov_dt_b_product_details&th=1
There are quite a few modules out there that call themselves DFPlayer but they don't all have the same IC's or the same serial command set and maybe other differences. The mp3 player I am using is labelled mp3 tf 16p v3.0, and this is the reference I worked with
https://usermanual.wiki/Manual/DFPlayerMiniManual.234442183/pdf
The set up I have now is behaving reliably, it is great for many sound effects such as laser sounds, machine gun sounds, monster howls for use with robots or halloween ghosts/monsters, if you have a Youtube account you can download lots of these sound effects copyright free from youtube studio. For the demo I am using a couple of music clips. MP3 clips should be named 001.mp3 002.mp3 003.mp3 ..... etc. etc.
The micro python code has 5 methods controlled from a single button (button A). One press initializes the mp3 player after that one press toggles between play and pause, two presses selects the next track and 3 presses selects the previous track. This configuration can easily be changed if you have another preference.
Any questions and I will attempt to help.
from microbit import * import microbit import time microbit.uart.init(baudrate=9600, tx=pin2) start = 0 end = 0 elapsed = 0 count = 0 initialized = False playing = False Start_Byte = 0x7E Version_Byte = 0xFF Command_Length = 0x06 End_Byte = 0xEF Acknowledge = 0x00 def player_init(): write_to_player(0x09, 0, 1) # initialize source (TF) def player_pause(): write_to_player(0x0E, 0, 0) def player_play(): write_to_player(0x0D, 0, 0) def player_next(): write_to_player(0x01, 0, 0) def player_previous(): write_to_player(0x02, 0, 0) def write_to_player(cmd, arg1, arg2) : buffer = [] checksum = 0 checksum = -(Version_Byte + Command_Length + cmd + Acknowledge + arg1 + arg2) chk_0 = checksum & 0xFF chk_1 = (checksum >> 8) & 0xFF buffer = bytearray([Start_Byte, Version_Byte, Command_Length, cmd, Acknowledge, arg1, arg2, chk_1, chk_0, End_Byte]) microbit.uart.write(buffer) while True: if microbit.button_a.is_pressed(): start = time.ticks_ms() microbit.sleep(100) if start != 0: end = time.ticks_ms() elapsed = end - start if elapsed >= 500: end = 0 elapsed = 0 start = 0 count = microbit.button_a.get_presses() if count == 1 and not initialized: player_init() count = 0 initialized = True elif count == 1 and not playing: player_play() playing = True count = 0 elif count == 1 and playing: player_pause() playing = False count = 0 elif count == 2 and playing: player_next() count = 0 elif count == 3 and playing: player_previous() count = 0`