物联网开发118 - Micropython ESP32 C3连接Mini MP3 Player 播放器模块

                       

 一、目的

        这一节我们来学习如何使用合宙ESP32 C3,连接Mini MP3 Player 播放器模块。此模块可以看做是一个简易的MP3,可以直接当做MP3来使用。当然我们也可以连接到开发板上,然后通过串口开控制它。下面我们一起来学习一下吧!

二、环境

        ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+ Mini MP3 Player 播放器模块 + 几根杜邦线 + Win10商业版

        ESP32 C3和模块接线方法:


三、模块介绍

        这是一款体积小巧的 M p3 模块,可以直接接驳扬声器。模块配合供电电池、扬声器、按键可以单独使用,也可以通过串口控制,是任何有串口的单片机的一个模块。模块本身集成了Mp3 、 WAV 、 WMA的硬解码。同时简单的串口指令即可完成播放指定的音乐,以及如何播放音乐等功能,无需繁琐的底层操作,使用方便,稳定可靠。

        特点:
1、支持采样率(KHz):8/11.025/12/16/22.05/24/32/44.1 /48
2、24位DAC输出,动态范围支持:90dB,信噪比支持:85dB
3、完全支持FAT16、FAT32文件系统,支持32G(峰值)的TF卡,支
  持32G的U盘、64M字节的NORFLASH
4、多种控制模式可选。IO控制模式、串口模式、AD按键控制模式
5、广播语插播功能,可以暂停正在播放的背景音乐。广告播放完毕
  回到背景音继续播放
6、音频数据按文件夹排序,限多支持100个文件夹,每隔文件夹可以
  分配255首曲目
7、30级音量可调,6级EQ可调

        适用场景:
1、车载导航语音播报
2、公路运输稽查、收费站语音提示
3、火车站、汽车站安全检查语音提示
4、电力、通信、金融营业厅语音提示
5、车辆进、出通道验证语音提示
6、边防检查通道语音提示
7、多路语音告警或设备操作引导语音
8、电动观光车安全行驶语音告示
9、机电设备故障自动报警
10、消防语音报警提示
11、自动广播设备,定时播报

         模块引脚图:

        模块原理图:

         按键原理图:

 产品资料下载:

https://pan.baidu.com/s/1KLn_sSFwyX5YXM5cecE-WA  提取码: tb6m

资料参考(可直接打开):

https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299

JQ-8900-16P资料下载链接:

https://pan.baidu.com/s/1bqSSkDo6rkxGO-HAt7maPw  提取码: eyh2(软件在这份资料里)

四、示例代码

mp3_example.py

打开Thonny IDE,将一下代码拷贝到IDE中,运行:

from machine import Pin,UART
import time

# 创建UART串口
uart = UART(1,baudrate = 9600,tx = 0,rx = 1)
# 创建LED灯对象
led = Pin(12,Pin.OUT)
# 创建按键对象
key = Pin(5,Pin.IN,Pin.PULL_UP)

# 定义事件指令
up = bytearray(b'\x7e\xff\x06\x02\x00\x00\x00\xfe\xf9\xef')  #上一曲
on = bytearray(b'\x7e\xff\x06\x03\x00\x00\x02\xfe\xf6\xef')  #开灯
off = bytearray(b'\x7e\xff\x06\x03\x00\x00\x01\xfe\xf7\xef')  #关灯

# 创建按键函数
def KEY():
    if key.value() == False:  
        time.sleep(0.05)
        if key.value() == True:  # 如果按键值为false,则反转led灯状态
            led.value(not led.value())
            
            if led.value():  # 如果LED灯为真,则发送指令on,反之发off
                uart.write(on)
            else:
                uart.write(off)
            
            while not key.value():
                pass
            
# 创建main函数
def main():
    while True:
        KEY()
        
        
# 程序入口
if __name__ == "__main__":
    main()

演示效果:

        运行上述代码后,蓝色LED灯亮,当按一下按键后,蓝色LED灯熄灭,表示busy,板载红色LED灯亮,同时语音播报:“欢迎回家,灯光已开启”。

        然后当再按一下按键后,蓝色LED灯熄灭,表示busy,板载红色LED灯熄灭,同时语音播报:“期待相遇,灯光已关闭”。

五、环境

        命令介绍:

六、常见问题汇总

 七、串口命令控制

        我们也可以使用USB转TTL转接线,连接我们的电脑和MP3模块。使用串口工具发送命令进行控制。很简单,大家自己试验一下。

八、mp3模块购买地址

https://detail.tmall.com/item_o.htm?id=539104002603&pcdegrade=true&de_count=1&skuId=5044329371616icon-default.png?t=N5K3https://detail.tmall.com/item_o.htm?id=539104002603&pcdegrade=true&de_count=1&skuId=5044329371616

### 使用ESP32-C3通过I2S播放网络音频 为了实现ESP32-C3通过I2S接口播放来自互联网的音频流,需要完成几个主要部分的工作:获取并解析网络音频数据、配置I2S外设以及设置DAC或外部功放来输出声音。 #### 获取并解析网络音频数据 对于从网上抓取音轨而言,通常会涉及到HTTP请求发送至提供音乐资源的服务端口。这一步骤可以通过Wi-Fi连接到路由器之后利用`esp_http_client.h`库发起GET方法调用来达成目的[^1]。一旦接收到响应体中的二进制字节序列,则需依据特定编码格式(比如MP3, WAV)做解码处理;这里推荐采用第三方开源软件包如FFmpeg或是TinyMp3作为辅助工具来进行此操作。 #### 配置I2S外设 初始化I2S总线之前要先定义好参数结构体`i2s_config_t`内的成员变量值,例如采样率(sample_rate)应该匹配所选编解码算法的要求,默认情况下可设定为44.1kHz即CD品质级别。另外还需指定传输模式(tx_desc_auto_clear),当缓冲区满载时自动清除标志位以防止溢出错误发生。最后别忘了开启DMA功能以便高效地搬运大量样本点给后续环节使用[^2]。 ```c #include "driver/i2s.h" #define I2S_NUM I2S_NUM_0 #define SAMPLE_RATE (22050) void setup_i2s() { i2s_config_t i2s_config = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX), .sample_rate = SAMPLE_RATE, .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, .communication_format = I2S_COMM_FORMAT_I2S_MSB, .intr_alloc_flags = 0, .dma_buf_count = 8, .dma_buf_len = 64, .use_apll = false, .tx_desc_auto_clear = true, .fixed_mclk = 0 }; // Install and start I2S driver i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL); } ``` #### 设置DAC或外部功放输出声音 如果选用内置数模转换器(DAC),那么仅需简单调用函数即可将PCM格式的数据映射成模拟电压变化从而驱动扬声器发声。不过考虑到内部器件性能有限,在追求更高保真度的情况下建议额外接入专用集成电路(ASIC)类别的功率放大模块,它们往往具备更佳信噪比(SNR)表现力并且支持立体声道分离等功能特性[^3]。 ```c // Assuming the audio data is already decoded into PCM format as an array of short integers. short *pcm_data; size_t pcm_length; for(int i=0; i<pcm_length; ++i){ i2s_write(I2S_NUM, &(pcm_data[i]), sizeof(short), portMAX_DELAY); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都飘雪

您的1毛奖励是我创作的源源动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值