5.31 综合案例2.0 - 在线MP3音乐播放器
创始人
2024-03-27 15:00:49
0

综合案例2.0 - 在线MP3音乐播放器

  • 一、案例说明
  • 二、准备器件
  • 三、案例连线
  • 四、代码
      • 代码说明
      • 复制
  • 五、测试

一、案例说明

在这里插入图片描述
本案例制作一个联网下载声音文件的MP3播放器。

  • 案例功能说明:
    • 案例使用一块IC035串口屏和两个按键
    • 通过按键可以切换音乐,下载播放或删除声音文件
    • 案例可以实时显示当前SD卡内的文件数量,可以直观看到文件是否下载完成
  • JC035串口屏使用请参考产品资料说明或者参考haas506 2.0开发教程-example-JC035串口屏饮料机
  • 案例使用M601开发板,中断引脚选择GPIO44,GPIO20。使用M320请注意IO口选择,M320部分IO口暂不支持中断。
  • 代码选择GB2312编码

二、准备器件

本案例需要的硬件

器材数量
HaaS506开发板1
JC025串口屏(480x320)1
触摸按键1
SIM卡1
喇叭1
SD卡1

三、案例连线

在这里插入图片描述

四、代码

代码说明

1.代码总共4个文件
在这里插入图片描述
2.如果要显示中文代码烧录时选择GB2312编码
在这里插入图片描述

复制

mian.py

import net_connect
import  mp3
import utime
from driver import UART
from driver import GPIO#按键使能
key1=GPIO(10,10)
key2=GPIO(10,10)
key1.open("key1")
key2.open("key2")
#菜单目录
data = {'test1.mp3':'http://music.szyywdz.huntercat.cn/haas506.mp3','test2.mp3':'http://music.szyywdz.huntercat.cn/audio/m601test.mp3','test3.mp3':'http://music.szyywdz.huntercat.cn/audio/syserror.mp3'}
num = ['test1.mp3','test2.mp3','test3.mp3']
name = num[0]
#按键
buttons1 = 4
buttons2 = 0
buttons3 = 0
degree = 0
play_stop = True#切换键
def key1_callback(args):global degree,play_stop,buttons1,buttons2,buttons3print('--------  切换  ---------')play_stop = True#设定按键次数degree += 1if degree > 2:degree = 0if degree == 0:buttons1 = 4buttons2 = 0buttons3 = 0if degree == 1:buttons1 = 0buttons2 = 4buttons3 = 0if degree == 2:buttons1 = 0buttons2 = 0buttons3 = 4#获取文件个数catalogue = mp3.search()UART_send("DCV32(120,5,'在线音乐播放器',1);BTN(40,50,400,60,%s,1,5,2,%d);BTN(40,110,400,60,%s,1,5,2,%d);BTN(40,170,400,60,%s,1,5,2,%d);BTN(60,230,360,40,'本地文件个数: %d',1,0,1,0);BTN(40,270,64,32,'下载播放',0,0,2,0);BTN(400,270,64,32,'切换',0,0,5,0);\r\n"%(num[0],buttons1,num[1],buttons2,num[2],buttons3,catalogue))utime.sleep_ms(100)key1.disableIrq()key1.clearIrq()#播放&删除键
def key2_callback(args):global degree,play_stop,buttons1,buttons2,buttons3print('======= 播放 =========')if play_stop:    #播放print(data[num[degree]],num[degree],'----------------------------------------------')mp3.download(data[num[degree]],num[degree])catalogue = mp3.search()UART_send("DCV32(120,5,'在线音乐播放器',1);BTN(40,50,400,60,%s,1,5,2,%d);BTN(40,110,400,60,%s,1,5,2,%d);BTN(40,170,400,60,%s,1,5,2,%d);BTN(60,230,360,40,'本地文件个数: %d',1,0,1,0);BTN(40,270,64,32,'本地删除',0,0,1,0);BTN(400,270,64,32,'切换',0,0,5,0);\r\n"%(num[0],buttons1,num[1],buttons2,num[2],buttons3,catalogue))play_stop = Falsemp3.play(num[degree])else:            #删除mp3.delete(num[degree])play_stop = Truecatalogue = mp3.search()UART_send("DCV32(120,5,'在线音乐播放器',1);BTN(40,50,400,60,%s,1,5,2,%d);BTN(40,110,400,60,%s,1,5,2,%d);BTN(40,170,400,60,%s,1,5,2,%d);BTN(60,230,360,40,'本地文件个数: %d',1,0,1,0);BTN(40,270,64,32,'下载播放',0,0,2,0);BTN(400,270,64,32,'切换',0,0,5,0);\r\n"%(num[0],buttons1,num[1],buttons2,num[2],buttons3,catalogue))utime.sleep_ms(100)key2.disableIrq()key2.clearIrq()def UART_send(data):writeBuf0=bytearray(data)uart0.write(writeBuf0)if __name__ == '__main__':uart0=UART()uart0.open("serial1")utime.sleep_ms(1000)UART_send("CLR(0);DIR(3);\r\n")net_connect.connect_network()key1.enableIrq(key1_callback)key2.enableIrq(key2_callback) catalogue = mp3.search()UART_send("DCV32(120,5,'在线音乐播放器',1);BTN(40,50,400,60,%s,1,5,2,%d);BTN(40,110,400,60,%s,1,5,2,%d);BTN(40,170,400,60,%s,1,5,2,%d);BTN(60,230,360,40,'本地文件个数: %d',1,0,1,0);BTN(40,270,64,32,'下载播放',0,0,2,0);BTN(400,270,64,32,'切换',0,0,5,0);\r\n"%(num[0],buttons1,num[1],buttons2,num[2],buttons3,catalogue))while True:utime.sleep_ms(10)

mp3.py

import  uos
import utime
import http
from audio import Audiouos.mountsd()def download(url,name):print('filename in directory:',uos.listdir('/sdcard0'))htp=http.client()htp.download(url,'/sdcard0/'+name)print('filename in directory:',uos.listdir('/sdcard0'))catalogue = []
def search():global cataloguecatalogue = uos.listdir('/sdcard0')return len(catalogue)-1def delete(name):print('before removing files:',uos.listdir('/sdcard0'))uos.remove('/sdcard0/'+name)print('after removing files:',uos.listdir('/sdcard0'))def play(name):print('------------------------Audio play start--------------------')aud=Audio()aud.set_pa()aud.setVolume(5)utime.sleep(1)aud.play('/sdcard0/'+name)# utime.sleep(3)# aud.stop()# print('------------------------Audio play done--------------------')

net_connect.py

import network
import utimeg_connect_status = False
def on_4g_cb(args):global g_connect_statuspdp = args[0]netwk_sta = args[1]if netwk_sta == 1:g_connect_status = Trueelse:g_connect_status = Falsedef connect_network():global net,on_4g_cb,g_connect_statusnet = network.NetWorkClient()g_register_network = Falseif net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:g_register_network = Trueelse:g_register_network = Falseif g_register_network:net.on(1,on_4g_cb)net.connect(None)else:print('!!! connect_network  false !!!')while True:if g_connect_status:print('connect_network ok')breakutime.sleep_ms(20)

board.json

{"name": "haas506","version": "2.0.0","io": {"key1": {"type": "GPIO","port": 44,"dir": "irq","pull": "pullup","intMode":"falling"},"key2": {"type": "GPIO","port": 20,"dir": "irq","pull": "pullup","intMode":"falling"},"serial1":{"type":"UART","port":0,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"},"serial2":{"type":"UART","port":1,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"},"serial3":{"type":"UART","port":2,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"}},"debugLevel": "ERROR","repl":"enable","replPort":0}

五、测试

1.上电后屏幕显示如下

  • 按开发板key1键可以切换文件
  • 按下触摸按键可以下载文件并播放,再次按下删除文件
  • 本地文件个数实时刷新
    在这里插入图片描述
    2.log测试
    在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...