10973| 5
|
[项目] 用ESP32-S3做一台gsm-fm桌面收音机 |
gsm-fm桌面收音机 野生程序员 一、项目介绍 闲暇之余制作一台桌面收音机。本项目使用ESP32-S3做为主控,FM芯片使用RDA5807,集成CS4344 I2S音频芯片可以播放音频、集成INA199可以采集整机工作电流。交互采用一个旋转编码器目前已完成功能: 1、 网络时钟。 2、 FM广播。 3、 天气预报。 4、 B站数据统计。 5、 老黄历。 6、 背光调节。 7、 定时关机。 8、温湿度显示。(2023年5月21日更新) 软件开源地址:https://gitee.com/gsm-fm 食用过程中有疑问可以通过下面联系方式与我联系: 微信:GM8988 QQ:1063503277 复刻群:607741525 注: 1、作品部分技术来源于网络,由于无法找到原作者不能注名出处,若发现有侵权请与我联系修改。 2、作品属于作者一人开发、设计、发帖等,若您发现作品有错误之处还望不吝赐教。 二、硬件介绍 2.1 ESP32-S3电路 ESP32-S3主控电路如图1所示,芯片选用内部带8MRAM+外接16M FLAM。 ![]() 图1 主控 2.2 电源自动切换电路 电源自动切换电路如图2所示,Q1是一个PMOS管,BAT+是电池,5V是充电器输入,当充电器未接入时Q1导通,BAT+流过Q1给VCC供电,当充电器介入时Q1截至5V流过D1给VCC供电。 ![]() 图2 电源自动切换电路 2.3 软件开关机电路 软件开关机电路如图3所示,U1是一个输出为3.3V的稳压芯片,该芯片带有使能功能,即第3(CE)脚,给该引脚输入高电平打开输出输入低电平关闭输入,VCC_KEY是按键脚,一端接到电源(VCC)另一端连接到单片机引脚(KEY_POWER)和U1使能脚电路。 按键开机过程:(在未插入充电时)当按键按下后VCC流过VCC_KEY、D4给CE脚一个高电平使能3.3V输出,此时整个系统得电单片机开始运行,程序首先检测KEY_POWER脚电平,如果该电压为高电平说明是按键开机控制POWER_IO脚输出高电平锁定CE脚电平,这时松开手后由于POWER_IO为高电平会继续使能U1输出。 充电开机过程:(在未按下按键时)插入充电器,此时5V得电经过D3给CE脚高电平使能3.3V输出单片机运行,程序开始检测KEY_POWER电平由于内部配置下拉输入所以识别到为低电平,程序判断案件为按下时运行即充电开机。 关机过程:进入关机功能确认关机后,系统拉低POWER_IO失能3.3输出。 ![]() 图3开关机与稳压 2.4 USB转串口电路+自动烧录电路 ESP32-S3支持串口下载,由于电脑没有TTL串口接口,所以需要一个USB转串口芯片,如图4,U7型号是CH340C,该芯片支持一路usb转串口ttl,带有RTS、DTR控制引脚,内部集成晶振大大简化了外部电路。 根据ESP3S3数据手册,进入串口下载模式需要在上电前拉低IO0,上面介绍了CH340C带有RTS、DTR引脚,可以在加入开关控制电路来实现自动复位和拉低IO0,如图5,Q6芯片型号是UMH3N,该芯片内部带有两个三极管并且集成偏置电压,如电路所示利用CH340C的RTS、DTR引脚可以实现自动下载程序。 ![]() 图4 USB转串口电路 ![]() 图5 自动下载电路 2.5 PCB设计 整个项目使用一张双层PCB,如图6、图7 ![]() 图6 PCB 背面 ![]() 图7 PCB正面 三、外壳设计 外壳使用Autodesk Fusion 360设计制作。 ![]() 图8 外壳设计 3.1屏幕安装 屏幕通过双面胶贴在PCB上。 3.2 PCB安装 PCB卡在外壳的内壁槽里,通过一颗螺丝固定。 ![]() 图9 PCB安装 3.3 天线安装 天线通过外壳孔槽插入内部,使用螺丝固定导线到外壳上。 ![]() 图10 天线安装 3.4 扬声器安装 扬声器直接卡在外壳槽里。 ![]() 图11 扬声器安装 3.5 电池安装 电池放在内部空余空间。 ![]() 图12 电池安装 3.6 外观颜色 设计好外壳后使用3D打印,然后使用自喷漆更换外壳颜色。 ![]() 图13 外观配色 四、软件部分简介 硬件电路设计并焊接完成后就可以开始编写代码了,这个项目使用的是乐鑫官方的ESP-IDF5.0。 代码部分就不全部展开介绍了,需要的朋友可以前往立创开源硬件平台搜索本项目(gsm-fm),项目描述中有完整的带注释的代码,可以自行阅读,下面简单介绍二处: 4.1 开机动画 开机动画使用的LVGL GIF库,在开发过程中使用VS模拟器可以正常播放,可是移植到ESP32播放开机动画时一直卡死,以为是动画太长原因,把动画剪切成了两部分还是不行,经过多种bug修复,最终使用预加载到PSRAM解决了该问题,具体实现代码如下: 1、定义两个空指针 char *p_gif1 = NULL; char *p_gif2 = NULL; 2、加载gif load_gif(&p_gif1,"/spiffs/power_on_gif_01.gif"); load_gif(&p_gif2,"/spiffs/power_on_gif_02.gif"); 3、加载过程
4、使用
5、使用完释放内存
整个系统通过spiffs_image/system/config.json配置文件配置参数,文件内容如下:
4.3 设计图 ![]() 图16 gsm-fm原理图1 ![]() 图15 gsm-fm原理图2 ![]() 图16 gsm-fm原理图3 4.4 屏幕面板 ![]() 图17 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed