跳至主要內容

语音播放模块

大约 3 分钟约 858 字

语音播放模块

工作电压5V
类型执行模块
接口类型RJ12
外观尺寸20*25*33mm

  语音播放模块主要用于控制SD卡中存储的MP3文件的播放(需连接外 置有源喇叭)。该模块通过串口通信进行控制,允许用户灵活地选择和播放 存储在SD卡上的音频文件。这种设计使得语音播放模块非常适合应用于各 种需要背景音乐、语音提示或自动播报的场景,如公共广播系统、智能设备 以及自动化控制系统等。通过简单的串口指令,用户可以轻松实现对音频播 放的精确控制。 硬件连接示意图

①USB Type-C数据线
①USB Type-C数据线
②PH2.0-4P转RJ12线
②PH2.0-4P转RJ12线

程序代码

# -*- coding: utf_8 -*- 
from npython import *           # 导入npython模块 
import struct 
#语音播放接串口P0/P1 
''' 
语音模块说明(暂不支持中文名称): 
内置默认4首歌曲: 
mlh.mp3:茉莉花 
qcxlsc.mp3:青春修炼手册 
qjzx.mp3:奇迹再现 
slzxlm.mp3:失恋阵线联盟 
''' 
#初始化串口,波特率应为9600 
uart1=UART(1, baudrate=9600, rx=PINS[0], tx=PINS[1], 
timeout=10) 
#停止播放 
def Mp3_Stop(uartx): 
 uartx.write(b'\xaa\x04\x00\xae') 
 time.sleep_ms(200) 
#播放指定名称的歌曲(中文少于等于4个字,英文及数字少于
等于8个字节 大小写不区分) 
def Mp3_Run(uartx,str=""): 
 path="/"+str+'*mp3' #文件路径 
 #路径全部字母应为大写 
 path=path.upper() 
 #print(path) 
 oled.print(1,1,path,1) 
 pathlen=len(path)#文件路径长度 
 checksum=0xAA+0x08+pathlen+1+0x01 
 for i in range(pathlen): 
  checksum=checksum+int(ord(path[i])) 
 checksum=checksum%256 
 #发送指令码格式为AA 08 长度 盘符 路径 SM 
 uart_bytes=struct.pack('bbbb', 
0xAA,0x08,pathlen+1,0x01)+path+struct.pack('b', checksum) 
 uartx.write(uart_bytes) 
 print(uart_bytes) 
  
def set_vol(uartx, num):  # 音量设置函数  # 确保 num 在 0-255 范围内(低8位) 
    num = num & 0xFF 
    # 计算校验和 
    checksum = (0xAA + 0x13 + 0x01 + num) % 256 
    # 构建字节对象 
    result = bytes([0xAA, 0x13, 0x01, num, checksum]) 
    # 手动格式化输出(仅用于打印) 
    formatted_result = "b'" + ''.join('\\x{:02X}'.format(byte) for byte 
in result) + "'" 
    print(formatted_result) 
    # 发送实际的字节对象 
    uartx.write(result) 
    time.sleep(0.5) 
  
set_vol(uart1,20) #修改播放音量20 
#选定播放音乐播放 
Mp3_Run(uart1,"qjzx");#播放指定歌曲,只输文件名即可 
time.sleep(5) 
Mp3_Run(uart1,"slzxlm");#播放指定歌曲,只输文件名即可 
time.sleep(5) 
Mp3_Stop(uart1)

程序说明

语音播放模块接实验板通用接口。通过串口(P0/P1)控制,实现 对MP3文件的播放控制(需要外接有源喇叭)。 呈现效果 若接上外置(有源)喇叭,可以听到MP3文件播放的声音。

语音播放的注意事项

(1)需有SD卡且内置相应的扩展名为MP3的歌曲; (2)串口波特率只支持9600,而非常规的115200; (3)控制子程序定义需放到程序应用前或将程序写于文件中进行加载,不能直接调用函数(此函数定义未在固件中)