9237浏览
查看: 9237|回复: 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。

用ESP32-S3做一台gsm-fm桌面收音机图1

图1 主控


2.2 电源自动切换电路
电源自动切换电路如图2所示,Q1是一个PMOS管,BAT+是电池,5V是充电器输入,当充电器未接入时Q1导通,BAT+流过Q1给VCC供电,当充电器介入时Q1截至5V流过D1给VCC供电。

用ESP32-S3做一台gsm-fm桌面收音机图2

图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输出。

用ESP32-S3做一台gsm-fm桌面收音机图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引脚可以实现自动下载程序。

用ESP32-S3做一台gsm-fm桌面收音机图4

图4  USB转串口电路


用ESP32-S3做一台gsm-fm桌面收音机图5

图5 自动下载电路


2.5 PCB设计
整个项目使用一张双层PCB,如图6、图7

用ESP32-S3做一台gsm-fm桌面收音机图6

图6 PCB 背面

用ESP32-S3做一台gsm-fm桌面收音机图7

图7 PCB正面


三、外壳设计

外壳使用Autodesk Fusion 360设计制作。

用ESP32-S3做一台gsm-fm桌面收音机图8

图8 外壳设计


3.1屏幕安装
屏幕通过双面胶贴在PCB上。

3.2 PCB安装
PCB卡在外壳的内壁槽里,通过一颗螺丝固定。

用ESP32-S3做一台gsm-fm桌面收音机图9

图9  PCB安装


3.3 天线安装
天线通过外壳孔槽插入内部,使用螺丝固定导线到外壳上。

用ESP32-S3做一台gsm-fm桌面收音机图10

图10 天线安装


3.4 扬声器安装
扬声器直接卡在外壳槽里。

用ESP32-S3做一台gsm-fm桌面收音机图11

图11 扬声器安装


3.5 电池安装
电池放在内部空余空间。

用ESP32-S3做一台gsm-fm桌面收音机图12

图12 电池安装


3.6 外观颜色
设计好外壳后使用3D打印,然后使用自喷漆更换外壳颜色。

用ESP32-S3做一台gsm-fm桌面收音机图13

图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、加载过程
  1. bool load_gif(char **p,char *file)
  2. {
  3.     bool r_dat = false;
  4.     long size=0,r_size=0;
  5.     main_debug("加载文件:%s",file);
  6.     FILE* f = fopen(file, "r");
  7.     if (f != NULL)
  8.     {
  9.         main_debug("打开成功");
  10.         size = get_file_size(f);
  11.         main_debug("文件大小:%ld",size);
  12.         *p = malloc(size);
  13.         if(*p != NULL)
  14.         {
  15.             main_debug("内存申请成功");
  16.             r_size = fread(*p, 1, size, f);
  17.             if(r_size == size)
  18.             {
  19.                 main_debug("读取成功");
  20.             }
  21.             r_dat = true;
  22.         }else
  23.         {
  24.             main_debug("内存申请失败");
  25.         }
  26.         fclose(f);
  27.     }
  28.     return r_dat;
  29. }
复制代码

4、使用
  1. lv_gif_create_from_data(lvgl_power_on_data.cont_main, p_gif1);
  2. lv_gif_create_from_data(lvgl_power_on_data.cont_main, p_gif2);
复制代码
5、使用完释放内存
  1. free(p_gif1);
  2. free(p_gif2);
复制代码

4.2 修改配置文件
整个系统通过spiffs_image/system/config.json配置文件配置参数,文件内容如下:
  1. {
  2.     "wifi":[
  3.         {
  4.             "name":"name",       //wifi名
  5.             "password":"pin",  //wifi密码
  6.             "auto connect":"true"      //自动连接(暂未使用)
  7.         }
  8.     ],
  9.     "system set":[
  10.         {
  11.             "wifi switch":"on",            //wifi开关 (暂未使用)
  12.             "backlight":50,                 //背光强度
  13.             "language":0,                   //语言
  14.             "bilibili id":"430380301"  //b站数据ID
  15.         }
  16.     ],
  17.     "radio data":[
  18.         {
  19.             "background":1,       //后台播放开关
  20.             "p1":"89.1",              //存台1
  21.             "p2":"93.1",              //存台2
  22.             "p3":"95.7",              //存台3
  23.             "p4":"102.8",             //存台4
  24.             "p5":"104.8"              //存台5
  25.         }
  26.     ],
  27.     "clock data":[
  28.         {
  29.             "type":1,                 //时钟主类型(模拟/数字)
  30.             "style":1                 //时钟样式
  31.         }
  32.     ]
  33. }
复制代码

4.3 设计图

用ESP32-S3做一台gsm-fm桌面收音机图14

图16  gsm-fm原理图1



用ESP32-S3做一台gsm-fm桌面收音机图15

图15  gsm-fm原理图2


用ESP32-S3做一台gsm-fm桌面收音机图16

图16  gsm-fm原理图3


4.4 屏幕面板
用ESP32-S3做一台gsm-fm桌面收音机图18


图17



五、附件下载


Amos Young  中级技师

发表于 2023-7-26 11:23:37

好厉害,学习了
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-7-28 22:22:08

收音机?厉害厉害!
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-7-28 22:23:45

还有这么多功能,实在是太赞了!
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-29 21:35:39

厉害厉害!!!
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-29 21:36:41

太赞了,如果能触屏操作,屏幕大点就更好了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail