找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1003

积分

0

好友

125

主题
发表于 前天 09:07 | 查看: 8| 回复: 0

如果你住在远离广播塔的地方,或者家里刚好被山峦或建筑挡住了信号,那么你一定体验过传统收音机那种“沙沙声比节目内容还要多”的痛苦。为了解决这个问题,我决定动手制作一台“简单、纯粹、且永远不会有信号噪音”的时钟收音机。它能够通过Wi-Fi播放来自互联网的电台流媒体,可以精准同步网络时间,还带有闹钟功能。外观上,我称它为“隐形”(Stealth)风格,像一台融合了复古与神秘气息的桌面小设备。

最关键的一点是——它的实现真的很简单。没有花哨的界面,没有复杂的操作逻辑,就是一台专注于“时间、收音、闹钟”核心功能的工具机。

融合了隐形战机与科技感的ESP32 Stealth时钟收音机正面

项目优势

1. 彻底摆脱传统收音机的信号困扰
它并非传统的FM/AM收音机,而是通过Wi-Fi直接播放网络电台流。这意味着没有噪音、没有杂点,理论上你可以收听世界上任何一个提供在线流的广播电台。

2. 时钟永远精准,不惧断电
设备上电后会自动从网络同步时间。即使遭遇断电后重新启动,也无需手动校时,预设的闹钟功能也会自动恢复。

3. 极简显示,专注核心信息
界面由一个四位数码管提供,只显示时间、电台ID、音量等级和闹钟状态。没有滚动歌名,没有多余信息,呈现的是传统时钟般的干净与直接。

4. 配置灵活,无需硬编码Wi-Fi信息
首次启动时,设备会创建一个Wi-Fi热点。你只需用手机连接,通过网页即可配置家庭Wi-Fi、自定义电台列表、设置夜间熄屏时间等所有参数。保存后,设备会自动连接到你的网络。

5. 兼具复古感与现代风的硬朗外形
外壳通过3D打印制作,线条棱角分明,造型硬朗,灵感来源于迷你隐形战机。摆放在室内不仅实用,也极具DIY的个性与酷感。

主要硬件清单

  • ESP32开发板 (核心控制器)
  • MAX98357A I2S音频放大模块 (一块用于单声道,两块可组成立体声)
  • 4位七段数码管 (驱动芯片为TM1637)
  • 两个3W小喇叭
  • 旋转编码器 (用于切换电台、选择菜单)
  • 线性电位器 (用于调节音量)
  • 两个轻触按键 (分别用于闹钟设置、收音开关)
  • 电容触控条 (用于夜间唤醒显示)
  • 5V电源适配器
  • 原型板、连接线材、3D打印外壳

外壳的后盖通过磁铁吸附固定,结构简洁,也极大方便了后期的维护与调试。

时钟收音机内部电路结构,包含多块电路板与彩色连接线

它是如何工作的?

整个系统的核心由 ESP32 掌控,它负责以下所有任务:

  • 通过Wi-Fi连接互联网。
  • 从预设的URL地址拉取广播音频流。
  • 通过 I2S 接口将音频数据输出到 MAX98357A 放大器。
  • 控制TM1637数码管显示当前时间、电台等信息。
  • 读取旋转编码器、按键、电容触控条等输入设备的状态。
  • 同步网络时间并管理闹钟逻辑。
  • 在首次启动时,提供Web配置界面。

所有的配置信息(如Wi-Fi密码、电台URL列表、闹钟时间、夜间模式开关时间等)都会被保存到ESP32的闪存中,设备重启后依然有效。

电路搭建:先分模块调试,再整体焊接

建议先在面包板上分别验证各个模块功能正常:

  • TM1637数码管显示
  • 旋转编码器输入
  • SPIFFS文件系统(用于存储配置)
  • Audio库的I2S音频输出
  • WiFiManager库的配置热点功能
  • MAX98357功放模块

TM1637和旋转编码器都有现成的Arduino库,可以先运行库自带的示例程序确认硬件工作正常,再将其代码整合到主工程中。

在接线方式上,我采用了排针加母座的“插拔式”连接来固定显示屏、编码器、电位器、按键和开关。这样做的好处是,如果需要维护或更换某个部件,只需拔插端子即可,避免了反复焊接的麻烦。

关于功放部分,我参考了MAX98357数据手册中关于立体声应用的电路。关键在于使用一个约56kΩ的电阻,来让两块功放板以立体声模式协同工作。具体的接线图和原理图如下:

ESP32时钟收音机详细接线指南表格

MAX98357A/B立体声应用电路原理图

供电方面需要注意:

  • 将DC圆孔电源座直接连接到ESP32开发板的5V和GND引脚。
  • 调试阶段可以暂时使用USB供电,但要确保USB口能提供足够的电流以驱动所有外设,同时需留意电流不足可能导致的不稳定。

按键部分使用了10kΩ的下拉电阻。为了便于固定和布线,我将这些电阻焊接在了一小块打孔板上,再用导线与主板连接。

制作过程概览

  1. 面包板测试所有模块:确保显示、音频、按钮、旋钮均能正常工作。
  2. 在原型板上进行焊接布局:将测试成功的电路在原型板上固定下来,形成稳定的主板。
  3. 装入3D打印外壳:将前面板、显示屏、喇叭、电位器、旋钮等部件安装到外壳的预留位置。
  4. 后盖磁吸固定:盖上后盖,利用磁铁固定,便于随时打开检修。
  5. 首次上电并进行Web配置
  6. 开始日常使用

设备背面特写,展示接线与外壳

安装在3D打印外壳内的设备正面,顶部有HACK按钮和开关

程序结构:三份核心源码与外部库

软件部分主要包含3个关键文件:

  • 主程序 StealthClockRadioInstructable.ino
  • 负责保存/读取配置数据的头文件 configSave.h
  • 用于自定义数码管上电台ID显示字符的头文件 displayText.h

项目源码文件列表:configSave.h, displayText.h, StealthClockRadioInstructable.ino

这些代码主要完成两项核心工作:

  1. 将Wi-Fi、日夜显示时间、电台列表等配置信息保存到闪存,并在启动时加载。
  2. 处理七段数码管上电台ID的“自定义字符显示”,例如将“CBC1”显示为特定的组合。

项目依赖一系列外部库,包括数码管驱动、旋转编码器、音频I2S支持、WiFiManager等。建议在开始前先打开工程,浏览一下这些库的引用以及各个 .h 文件,以了解整体逻辑。

关于时间设置,程序中提供了本地时区和夏令时偏移的配置代码。你需要根据自己所在的地区调整这些参数。如果想做得更完善,也可以考虑将这些设置移至网页配置界面中,实现更灵活的网络配置。

使用体验

1. 第一次上电:轻松进入配置模式
按住“Radio”按键开机,设备便会进入配置模式。此时ESP32会创建一个Wi-Fi热点(如“RadioAP”)。用手机连接该热点后,打开浏览器会自动跳转或手动输入管理IP,即可进入配置页面。在网页中你可以:

  • 设置家庭Wi-Fi的SSID和密码。
  • 添加你喜爱的电台流媒体URL(最多支持10个)。
  • 为每个电台设置一个简短易记的ID(显示在数码管上)。
  • 设置夜间自动熄屏和白天自动开启的时间。
  • 选择设备启动后默认播放的电台。

保存所有配置后,设备会自动重启,并尝试连接你设置的家庭Wi-Fi,进入正常工作模式。

手机搜索到的设备热点RadioAP

WiFiManager管理界面主页

网页配置表单,可设置Wi-Fi、热点密码、电台等

电台URL列表配置示例

2. 日常使用:复古而直接的操作

  • 旋转编码器:顺时针/逆时针旋转以切换上一个/下一个电台。
  • 电位器旋钮:旋转以调节音量大小。
  • 功能按键:“Radio”键控制收音播放的开关,“Alarm”键用于设置和开关闹钟。
  • 数码管显示:常态显示时间,操作时会短暂显示电台ID、音量等级或闹钟状态。
  • 夜间模式:在设定的夜间时段,显示屏会自动关闭以节省功耗并避免光污染。
  • 电容触控条:在夜间屏幕关闭时,轻轻触碰即可唤醒显示屏亮起约5秒,方便查看时间。

结语:一台简单,但能长期陪伴你的设备

这台基于 ESP32 打造的流媒体时钟收音机,真正践行了“少即是多”的设计理念。它没有复杂的智能系统,却在“报时、收音、闹钟”这三件基础事情上做到了精准、稳定与可靠。它不依赖任何云平台或手机App,无需注册账户,也永远不会弹出广告。它更像是一件属于你个人的、安静的桌面工具,不吵不闹,却能在你需要时提供时间与声音的陪伴。

如果你正在寻找一个适合在周末动手实践的 ESP32 开源实战小项目,并希望制作一件有实用价值的硬件,那么这个“隐形”时钟收音机会是一个非常不错的选择。整个过程不仅能让你深入了解 I2S 音频、网络协议和硬件交互,最终还能获得一个独一无二的实用作品。欢迎来云栈社区开发者广场分享你的制作成果或提出疑问。




上一篇:深度解析DCDC芯片:为何TPS54302等标称3A实际输出能力却不同?
下一篇:Relink技术解析:GraphRAG如何动态构建证据图谱提升多跳问答精度
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-6 09:49 , Processed in 0.302651 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表