2022年7月13日 星期三

MP3 Player - GD3800

MP3 Player - GD3800

 電路圖

 

程式列表

Python - ePy-Lite_GD3800.py

"""

  ePy-Lite_GD3800.py

 

  ePy-Lite  Number  Name

  -----------------

  VIN        1   VCC

  P1_TX3     2   RX

  P0_RX3     3   TX

  GND        4  GND

 

https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=zh-tw&q=你好我是你的STEAM的好幫手,E py lite

https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=zh-tw&q=這是GD3800 MP3 模組Demo

https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=zh-tw&q=e Py-Lite易學板功能特色及應用,支持按鍵A, 重置鍵RST,藍牙BLE5.0可以做為程式下載或藍牙控制用,可外接RGB彩色燈, 最多64, 可以做出文字, 圖形顯示, 情境燈等,支持單色LED, 紅色 綠色 黃色, 可以做燈光明亮控制

https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=zh-tw&q=支持2UART, 3I2C, 1SPI,方便來與各種感測器及設備來做連接及控制,支持4PWM,可以用來控制馬達速度,支持USB 隨插即用及U Disk,並可以直接儲存資料在E PY-Lite

 

"""

 

import micropython

from machine import Switch  #Get button KEY library

from machine import Pin, LED, UART

import utime

 

STA_BYTE = 0x7E

END_BYTE = 0xEF

 

class GD3800():

  MP3_LOOP_ALL   = 0  # 全部循環

  MP3_LOOP_FOLDER =1  # 文件夾內循環

  MP3_LOOP_ONE  =2  # 單曲循環

  MP3_LOOP_RAM  =3  # 隨機播放

 

  MP3_STATUS_STOPPED = 0

  MP3_STATUS_PLAYING = 1

  MP3_STATUS_PAUSED  = 2

  MP3_STATUS_FF  = 3

  MP3_STATUS_FR  = 4

 

  MP3_EQ_NORMAL  = 0

  MP3_EQ_POP     = 1

  MP3_EQ_ROCK    = 2

  MP3_EQ_JAZZ    = 3

  MP3_EQ_CLASSIC = 4

  MP3_EQ_BASS    = 5

 

  def __init__(self,port=3):

    self.uart = UART(port, 9600)

    self.player_volume = 30 # player_volume = 20

    self.is_mute = False    # is_mute = False

    self.setVolume(self.player_volume)

    self.setEqualizer(self.MP3_EQ_NORMAL) # 設置EQ

 

  def command(self, buffer, dlen):

    for i in range(dlen):

      self.uart.writechar(buffer[i])

 

    print("Send:", end = '')

    print("".join("%02XH," % i for i in buffer))

    utime.sleep(1)

    buffer = self.uart.read(4) # 從串口讀取資料

    print("Read:", end = '')

    print("".join("%02XH," % i for i in buffer))

 

  def setVolume(self, volume):

    # 7E 03 31 1E EF

    self.player_volume = volume

 

    buffer=bytearray(5)

    buffer[0]=STA_BYTE

    buffer[1]=0x03

    buffer[2]=0x31 #CMD

    buffer[3]=volume

    buffer[4]=END_BYTE 

    self.command(buffer,5)

 

  def play(self):

    # 7E 02 01 EF

    buffer=bytearray(4)

    buffer[0]=STA_BYTE

    buffer[1]=0x02

    buffer[2]=0x01 #CMD

    buffer[3]=END_BYTE

    self.command(buffer,4)

 

  def pause(self):

    # 7E 02 02 EF

    buffer=bytearray(4)

    buffer[0]=STA_BYTE

    buffer[1]=0x02

    buffer[2]=0x02 #CMD

    buffer[3]=END_BYTE

    self.command(buffer,4)

 

  def PlayAll(self,onoff):

    # 7E 03 07 01 EF

    buffer=bytearray(5)

    buffer[0]=STA_BYTE

    buffer[1]=0x03

    buffer[2]=0x07 #CMD

    buffer[3]=onoff

    buffer[4]=END_BYTE

    self.command(buffer,5)

 

  def playStop(self):

    # 7E 02 0E EF

    buffer=bytearray(4)

    buffer[0]=STA_BYTE

    buffer[1]=0x02

    buffer[2]=0x0E #CMD

    buffer[3]=END_BYTE

    self.command(buffer,4)

 

  def setEqualizer(self,equalizerMode):

    buffer=bytearray(5)

    buffer[0]=STA_BYTE

    buffer[1]=0x02

    buffer[2]=0x32 #CMD

    buffer[3]=equalizerMode

    buffer[4]=END_BYTE

    self.command(buffer,5)

 

  def setLoopMode(self,mode):

    # 7E 03 33 0x EF

    buffer=bytearray(5)

    buffer[0]=STA_BYTE

    buffer[1]=0x03

    buffer[2]=0x33 #CMD

    buffer[3]=mode

    buffer[4]=END_BYTE

    self.command(buffer,5)

 

  def playFileByIndexNumber(self,fileNumber):

    buffer=bytearray(6)

    buffer[0]=STA_BYTE

    buffer[1]=0x04

    buffer[2]=0x41 #CMD

    buffer[3]=(fileNumber>>8) & 0xFF

    buffer[4]=fileNumber & 0xFF

    buffer[5]=END_BYTE

    self.command(buffer,6)

 

  def playMP3Folder(self, fileNumber):

    buffer=bytearray(6)

    buffer[0]=STA_BYTE

    buffer[1]=0x04

    buffer[2]=0x4A #CMD

    buffer[3]=(fileNumber>>8) & 0xFF

    buffer[4]=fileNumber & 0xFF

    buffer[5]=END_BYTE

    self.command(buffer,6)

 

  def deinit(self):

    # self.playStop()

    self.pause() # 暫停

    self.uart.deinit()

 

def key_int():

  global KeyDone

  KeyDone = True

 

# Start Function

if __name__ == '__main__':

  ledY = LED('ledy')

  ledY.off()

 

  KeyA = Switch('keya')    #Create button A

  KeyA.callback(key_int)

  KeyDone = False

 

  mp3 = GD3800(3)

  # mp3.PlayAll(0x01)

  # mp3.play() # 播放

  # mp3.playFileByIndexNumber(1)

  # mp3.setLoopMode(GD3800.MP3_LOOP_ALL) # 設置循環模式

  nextfile=1

  fileindex=1

 

  while True:

    if(nextfile==1) :

      mp3.playMP3Folder(fileindex)

      fileindex +=1

      nextfile=0

      if (fileindex==5) :

        fileindex=1

 

    utime.sleep(1)

    if(mp3.uart.any()): # 當串口有可讀數據時

      buffer = mp3.uart.read(4) # 從串口讀取資料

      print("Read:", end = '')

      print("".join("%02XH," % i for i in buffer))

      if (buffer[2]==0x80) :

        nextfile=1

 

    if KeyDone == True:    #Press A Key

      break

 

  mp3.deinit()

  KeyA.callback(None)

 

執行結果

https://www.youtube.com/watch?v=qNuA122Kc5g

 

沒有留言:

張貼留言