
视神Mini-ESP32S3迷你播放器
简介
一个小小的视频播放器 :) 主打小和简 项目基于半年来一直在做的基于ESP32S3的音视频播放器项目优化而来
简介:一个小小的视频播放器 :) 主打小和简 项目基于半年来一直在做的基于ESP32S3的音视频播放器项目优化而来开源协议
:GPL 3.0
描述
先看几张实物图( 开心 :) )
全开源!!
项目使用的工程,请打开附件VD_ESP_MINI_Player.zip
详细工程讲解,移步:视神Mini - 基于ESP32的迷你播放器项目: 基于ESP32S3的迷你播放器,本仓库包含项目设计中的所有源码工程,供大家参考
项目使用的所有文件,请打开附件VD_SD_ROOT_FILE.zip(SD卡根目录文件)
视频讲解,移步:
一、项目背景
简单的说两句,项目的由来
在过去的半年中,我专注于ESP32音视频播放器方案的设计工作。目前,我已经完成了多个版本的设计,例如:
视频播放器验证机:这个可以说是简易版视频播放器(或者说验证版)
这一版验证ESP32S3最小系统,SPILCD驱动,SD卡,NS4168音频芯片,音视频播放器移植....
大屏版:搭载480x272 4.3寸SPI屏的视频播放器,但是视频播放效果不太理想(太卡了)
视神1:这一带使用ES8388作为音频芯片,替换掉前两代的NS4168
PlayerMicro:这一代其实是视神1的缩小版,打算打造一个1.5寸屏的版本(但是体积没能压缩下来,整机就一个小方盒)
简读电子书(即将开源):这一代将彩屏换成了墨水屏,其实音频底子还是一样的....
这些方案的核心均基于ESP32S3芯片,对于我而言,这套方案已经很成熟,本工程将会开源一个小而简的视频播放器。
二、项目定义
本项目旨在于基于现成的ESP32S3视频播放器项目,设计一个小而简的视频播放器
三、项目规格
项目规格书根据项目定义详细化而得,如下:
3.1预计规格
在项目开发规划阶段,基于初步设计、概念或我们定制以下项目规格。通过这个大致的框架,指导产品的初步开发方向和初步评估产品的可行性。
内容 | 设备/类型 | 详细规格 |
整机尺寸 | 屏幕尺寸 |
屏幕建议使用<=2.4寸的LCD屏 以下尺寸供参考(尺寸为 宽x高) 2.4寸液晶屏:42.72 x 60.26 分辨率320x240 2.0寸液晶屏 34.6x47.8 分辨率320x240 1.8寸液晶屏 34.00x47.83 分辨率160x128 1.69寸液晶屏 30.07x37.43 分辨率280x240 1.54寸液晶屏 31.52x33.72 分辨率240x240
综合考虑,初步选择2.0寸和1.69寸的显示屏 |
PCB尺寸 |
PCB尺寸原则上不应大于屏幕尺寸(若大于,屏幕会存在黑边,影响观感) 要求,PCB原则上不得大于屏幕最大黑边+屏幕宽度,即不能大于屏幕四边等宽的情况(否则影响观感) |
|
元器件封装 |
以0603封装的元器件为主,部分原件使用0805封装 |
|
处理器/MCU | MCU性能要求 |
原则上选择处理器应能实现最基本的音视频解码能力 1.音频解码能力 具备基本的PCM音频解码能力(软件解码) 具备IIS音频接口(必须是硬件IIS,不能是SPI模拟IIS) 2.视频解码能力 具备基本的MJPEG解码能力,要求快速(至少100ms/张 分辨率<320x240的图片) |
MCU外围器件要求 |
为了做体积控制,要求MCU外围器件尽量简单,数量尽量少 |
|
电源 | 锂电池 |
电池类型:使用聚合物锂电池 电池外形要求:使用方形锂电池(若预留大空间做音响箱体,可使用圆柱形电池,注意控制体积和长度) 标称电压:3.7V 充电电压:4.2V 充电电流:不应该超过锂电池充电芯片所能提供的最大电流 带保护板:是 电池尺寸:不得超过PCB最大尺寸,注意预留空间放置扬声器 |
锂电池充电 |
要求外部器件数量少(电路简单)的充电芯片 |
|
LDO |
RT9013 输入电压范围:4.3 - 3.7 输入电压方式:锂电池供电/充电芯片直接输入 输出电压:3.3V |
|
电源开关 | 拨动开关(物理开关) | |
显示屏 | LCD |
屏幕连接方式:FPC软排线连接,直接与PCB连接 屏幕类型:IPS 控制芯片:ST7789 颜色数量:65535色(十六位色) 分辨率:建议320x240(至少大于240x240) 驱动方式:4Wire-SPI(四线SPI 普通SPI) IO:SPICLK,SPIMOSI,SPICS,LCDWR,LCDCS,LCDRST 背光方式:LED背光,支持调亮度(本项目中未应用)
屏幕尺寸要求: 参考体积控制罗列的要求 |
存储设备 | 大容量存储设备 |
TF卡(microSD) 容量范围 <32G 支持的卡类型:SDSC SDHC SD卡电压:3.3V SD卡读取方式:文件系统,FATFS SD卡文件系统:支持FAT FAT32 |
音频方案 | IIS音频方案 |
音频芯片通讯协议:IIS 支持的音频采样位数:8、16(必须支持)、24
可选方案: 0.单片机直接输出 通过单片机的DAC或者PWM引脚输出音频信号 要求单片机至少需要具备高速DAC或高速PWM (播放44100的音频时,其时钟速度必须大于44.1KHz)
1.使用IIS蓝牙芯片输出音频到蓝牙耳机 单片机需要具备蓝牙,支持蓝牙音频协议 外扩IIS蓝牙模块(如BT401)
2.使用IIS数字功放输出音频到扬声器 可选方案NS4168
3.使用IIS音频芯片输出音频到耳机 可选方案ES8388 |
音频输出方案 |
扬声器: 选用8欧姆扬声器 控制扬声器体积
耳机插座: 选用3.5MM耳机插座 |
|
操作方案 | 实体按键方案 |
选用两种实体按键:拨轮按键和轻触按键 |
3.2详细规格
详细规格是指在产品开发完成后,经过详细设计、测试和验证后,最终确定的产品规格。
内容 | 设备/类型 | 详细规格 |
整机尺寸 | 屏幕尺寸 |
屏幕使用2.0寸屏幕,参数如下: 屏幕整体尺寸(含边框尺寸):34.6 x 47.8 mm 屏幕显示范围尺寸:30.6x40.8 mm 屏幕最大黑边尺寸:4.2mm(底部屏幕驱动芯片位置) |
PCB尺寸 |
PCB尺寸原则上不应大于屏幕尺寸(若大于,屏幕会存在黑边,影响观感) PCB理想尺寸:34.6x47.8 mm (与屏幕同款) PCB最大尺寸限制34.6+4.2 x47.8+4.2mm,即38.8x52.0 说明:达到PCB最大尺寸限制为PCB四边+屏幕最大黑边尺寸,此设计可实现四边等宽. |
|
处理器/MCU | ESP32S3 |
1.具备音频解码功能 支持WAV音频解码,最大可以到24bit 192K 支持软件解码MP3,FLAC等格式 自带硬件IIS接口,可接输出输入设备
2.具备视频解码能力
3.外围器件简单 使用ESP32-WROOM板卡开发,只需要两个外围电容即可 |
电源 | 锂电池 |
聚合物锂电池,方形 型号:402030 尺寸:40x20x30mm 标称电压:3.7V 充电电压:4.2V 电池容量:180mah 充电电流:0.05A(50mA) 带保护板:是 |
锂电池充电 |
TP4055充电芯片 充电电压 |
|
LDO |
RT9013 输入电压范围:4.3 - 3.7 输入电压方式:锂电池供电/TP4055充电芯片输入 输出电压:3.3V |
|
电源开关 | 拨动开关(物理开关) | |
显示屏 | LCD |
本项目使用的屏幕规格: 屏幕连接方式:FPC软排线连接,直接与PCB连接 屏幕类型:IPS 控制芯片:ST7789 颜色数量:65535色(十六位色) 分辨率:320x240 驱动方式:4Wire-SPI(四线SPI 普通SPI) IO:SPICLK,SPIMOSI,SPICS,LCDWR,LCDCS,LCDRST 背光方式:LED背光,支持调亮度(本项目中未应用)
屏幕尺寸要求: 屏幕使用2.0寸屏幕,参数如下: 屏幕整体尺寸(含边框尺寸):34.6 x 47.8 mm 屏幕显示范围尺寸:30.6x40.8 mm 屏幕最大黑边尺寸:4.2mm(底部屏幕驱动芯片位置) |
存储设备 | 大容量存储设备 |
TF卡(microSD) 容量范围 <32G 支持的卡类型:SDSC SDHC SD卡电压:3.3V SD卡读取方式:文件系统,FATFS SD卡文件系统:支持FAT FAT32 |
音频方案 | IIS音频方案 |
选用NS4168音频方案 1.外围器件简单 外围只需要三个电容+一个下拉电阻(控制扬声器关闭) |
音频输出方案 |
扬声器 选用8欧姆扬声器 |
|
操作方案 | 实体按键方案 |
选用两种实体按键:拨轮按键和轻触按键 |
四、方案介绍
4.1主控制器
首先来看主控制器:
主控制器选择ESP32S3,使用的是ESP32-WROOM-S3。
选用ESP32S3的三个理由:
1.使用成熟方案开发(此套方案我已验证+应用半年)
2.外围元器件少(只需要配两颗电容,其余元器件已被封装置板卡内)
3.邮票孔封装,便于焊接
在这里选用的是1U的板卡,相较于非1U板卡,WIFI天线非板载,可有效节省体积
复位电路和Boot按键电路
程序下载:本工程中直接使用ESP32板卡直接与USB连接,无需任何烧录器,也无需板载串口,直接使用USB烧录即可
USB下载电路
USB下载流程:
确认焊接无问题后,在安装ESP-IDF的电脑上打开下载器,我这里用的是VSCode
选择设备:
编译后直接点下载:
烧录完成:
4.2供电方案
供电能量流如下:
能量流说明:
焊接锂电池后,接通5V,关闭主电源开关,TP4055给锂电池供电,充电时充电LED点亮,充电完成后LED熄灭
焊接锂电池,接通5V,打开主电源开关,此时TP4055同时给RT9013供电和锂电池充电
未焊接锂电池,接通5V,打开主电源开关,此时TP4055给RT9013供电
焊接锂电池,不接通5V,打开主电源开关,此时锂电池给RT9013供电
注意,必须要连接USB,且打开主电源开关的情况下,主芯片才能进行下载(此时USB和供电同时进行)
4.2.1锂电池充电方案
先说充电方案,充电方案选用TP4055方案,产品特性可见下图(官方文档截图)
除了上述特性之外,对于我们这套项目而言,这套方案外围器件少,有效节约体积
使用一个独立开关控制锂电池到3.3V LDO的电源,使用一颗LED直接显示充电状态
调试说明
这里说明一下焊接过程中的调试,在焊接完成TP4055电路且用万用表测试均无短路断路后,接通电源不焊接电池不打开开关,此时观察到LED轻微发光,测量电池接口两端(这里是两个测试点),电压应在4.2 - 4.3V之间
焊接完成LDO电路后,用万用表测试均无短路断路后,打开开关,LED常量,表示正在充电(放电),测量LDO两端电压,应在3.2 - 3.4V之间
4.2.2LDO
这里选择的是RT9013,单颗RT9013完成整套项目的3.3V电源供电
注意:NS4168数字功放需要大电流供电,电源直接与锂电池连接。
4.2.3稳压二极管
项目中使用两颗稳压二极管保证电压稳定:
4.3显示屏
这里不使用显示屏模块(占用体积太大),转而使用裸屏,通过FPC排插与PCB连接
显示屏使用的是中景园的2.0寸SPI屏,主控芯片为ST7789
此屏显示效果佳(两寸 320x240 DPI还可以)
屏幕链接:2寸液晶屏2.0寸tft lcd显示屏2寸显示屏st7789串口屏240x320液晶-淘宝网
屏幕资料链接(转载):https://pan.baidu.com/s/13l7iQwqjKUjUb2d99sL2RA 提取码8888
4.4SD卡
使用MicroSD卡,板载卡座直插SD卡
4.5音频方案
音频方案使用的是Nisway的NS4168数字功放
该方案简单,只需要一个IO控制扬声器开关和声道,三根音频线传输音频即可自动播放IIS音频.
注意:本方案中的音频芯片使用独立开关控制(直接控制芯片电源),可以直接通过开关芯片的电源开关实现硬件级别的静音
4.6按键
这里主要介绍拨轮开关,如下
拨动开关:
这里补充一个说明:虽然单片机内自带上拉电阻,但为了保证按键稳定,建议在硬件上加一个10K的上拉电阻
有些朋友可能不会看这个拨轮开关的连接方式,以下是我的学习心得:
中间带箭头为活动按键,从箭头可看出,支持左右拨动和下按
8,7,6,5引脚并联,可知为拨轮开关的外壳,直接接低电平,通过观察PCB焊盘也可得知
1,2引脚,由图可以看出为拨轮开关的左右拨动按钮,需要接上拉电阻保证未按下时为高电平
判断方式:中间为活动端,箭头知识左拨接触1,右拨接触2,可知两个开关为左右拨动开关
4为拨轮开关的下按按键,需要接上拉电阻保证未按下时为高电平
判断方式:下按拨动开关,3.4连接,可知是按下开关
3为公共端,直接接下拉
注意,3与中间的活动拨杆连接,可判断3为公共端
五、配套开源工程文件
配套完整项目工程:VD_ESP_Mini_Player.zip
部分源码和工程学习自正点原子,再次向原子团队表示感谢!!!!!!!!
项目配套工程文件请参考附件,解压后得到以下文件夹,为ESP-IDF工程文件
所使用的工程版本为ESP-IDF5.1.2
关于开源工程的详细介绍,请前往Gitee:视神Mini - 基于ESP32的迷你播放器项目: 基于ESP32S3的迷你播放器,本仓库包含项目设计中的所有源码工程,供大家参考
工程名称 |
工程说明 |
00_lcd_basic | LCD测试程序,提供完整的LCD驱动程序和API使用说明 |
01_key_scan |
为拨轮按键,轻触按键开发的按键扫描程序,宏定义中包含按键按下的标识定义,后面的工程中会用到 提供按键按下检测,等待按键按下循环函数 |
02_fatfs_test |
测试SD卡和Ftafs文件系统 请准备test.txt文件放置在根目录下,拷贝该文件到SD卡的目录:/System/下 |
03_chinese_font | 字库测试 |
04_wav_player | 简单的WAV播放器 |
05_mjpeg_videoplayer | 简单的MJPEG(AVI)播放器(本项目的主工程文件) |
06_lvgl_basic | LVGL的简单适配 |
源工程全部上传,直接打开查看,无需任何激活码或任何验证方式才可打开!!!!!!
六、主要工程介绍
关于开源工程的详细介绍,请前往Gitee:视神Mini - 基于ESP32的迷你播放器项目: 基于ESP32S3的迷你播放器,本仓库包含项目设计中的所有源码工程,供大家参考
6.1 wav_player
本工程提供一个简单的WAV音频播放器,通过软件解码WAV音频文件,由I2S音频设备进行播放
程序的执行流程如下:
根据ESP32S3的IIS,我们不需要定时传入数据,只需要创建一个任务,在任务中循环调用IIS写数据函数,直接将PCM数据传入即可
本程序参考自正点原子music_play工程,在此基础上优化了按键操作,设计播放器基本UI
音乐播放器操作:
编译并烧录程序,并且将SD卡根目录文件拷贝到SD卡内(直接拷贝到根目录),插入SD卡,开机。
第一次执行的时候程序会自动下载字库,字库位于SD:/SYSTEM/FONT内,字库更新成功后,程序开始执行。
程序播放时,会循环播放SD:/MUSIC文件夹内的音乐文件,操作按键可以控制音乐播放器。
播放音乐的时候,按键操作如下:
拨轮操作:左右拨动:上/下一曲 拨轮按下:播放/暂停
按键操作:无
备注:如需修改按键键位,可以直接前往key.h修改按键指令宏定义。读取到某些字符时,UNI转GBK函数可能会卡死(出现的状态是机器自动重启)
6.2 video_play
本工程提供一个简单的视频播放器,通过软件解码AVI(Mjpeg格式)视频播放,支持分辨率240x180的视频播放
视频格式:
视频格式 |
AVI |
视频编码 | MJPEG(必须是MJPEG) |
视频画面大小 | < 320X180 推荐240x180 |
视频码率 | < 1000 |
视频每秒帧数 | < 12 |
音频格式 |
WAV |
音频编码格式 |
PCM |
音频位数 | 16 |
音频采样率 | 11025(<22050) |
音频声道数 | 2 |
使用格式工厂转码:
使用狸窝视频转换器转码:
本程序参考自正点原子music_play工程,在此基础上适配显示屏,优化了按键操作,设计播放器基本UI
本程序执行流程:
简单的讲解视频解码流程:
视频以"流"的形式存储在数据区域,每一个流后面紧跟着数据,流头标注着流信息(音频流还是视频流)
解码视频时依靠定时器提供的时钟节拍,解析一帧的数据,程序会判断流类型,并且送入音频/视频解码
视频播放器操作
编译并烧录程序,并且将SD卡根目录文件拷贝到SD卡内(直接拷贝到根目录),插入SD卡,开机。
第一次执行的时候程序会自动下载字库,字库位于SD:/SYSTEM/FONT内,字库更新成功后,程序开始执行。
程序播放时,会循环播放SD:/VIDEO文件夹内的视频文件,操作按键可以控制音乐播放器。
播放音乐的时候,按键操作如下:
拨轮操作:左右拨动:快进/快退 按下:无操作
按键操作:BOOT按键——下一个视频
备注:
如需修改按键键位,可以直接前往key.h修改按键指令宏定义。
读取到某些字符时,UNI转GBK函数可能会卡死(出现的状态是机器自动重启)
请确保视频格式正确,若视频格式不正确,屏幕不会有显示,标识视频格式出错,请检查视频格式!!
视频格式出错可能是:1.视频编码格式错误 2.视频分辨率错误(表现为显示位置不正确,或者显示溢出) 3.视频音频编码格式错误
七、更新日志
若有更新日志,我会在这里记录日志。
八、演示视频
演示视频如下
设计图

BOM


评论