如果你住在远离广播塔的地方,或者家里刚好被山峦或建筑挡住了信号,那么你一定体验过传统收音机那种“沙沙声比节目内容还要多”的痛苦。为了解决这个问题,我决定动手制作一台“简单、纯粹、且永远不会有信号噪音”的时钟收音机。它能够通过Wi-Fi播放来自互联网的电台流媒体,可以精准同步网络时间,还带有闹钟功能。外观上,我称它为“隐形”(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Ω的电阻,来让两块功放板以立体声模式协同工作。具体的接线图和原理图如下:


供电方面需要注意:
- 将DC圆孔电源座直接连接到ESP32开发板的5V和GND引脚。
- 调试阶段可以暂时使用USB供电,但要确保USB口能提供足够的电流以驱动所有外设,同时需留意电流不足可能导致的不稳定。
按键部分使用了10kΩ的下拉电阻。为了便于固定和布线,我将这些电阻焊接在了一小块打孔板上,再用导线与主板连接。
制作过程概览
- 面包板测试所有模块:确保显示、音频、按钮、旋钮均能正常工作。
- 在原型板上进行焊接布局:将测试成功的电路在原型板上固定下来,形成稳定的主板。
- 装入3D打印外壳:将前面板、显示屏、喇叭、电位器、旋钮等部件安装到外壳的预留位置。
- 后盖磁吸固定:盖上后盖,利用磁铁固定,便于随时打开检修。
- 首次上电并进行Web配置。
- 开始日常使用。


程序结构:三份核心源码与外部库
软件部分主要包含3个关键文件:
- 主程序
StealthClockRadioInstructable.ino
- 负责保存/读取配置数据的头文件
configSave.h
- 用于自定义数码管上电台ID显示字符的头文件
displayText.h

这些代码主要完成两项核心工作:
- 将Wi-Fi、日夜显示时间、电台列表等配置信息保存到闪存,并在启动时加载。
- 处理七段数码管上电台ID的“自定义字符显示”,例如将“CBC1”显示为特定的组合。
项目依赖一系列外部库,包括数码管驱动、旋转编码器、音频I2S支持、WiFiManager等。建议在开始前先打开工程,浏览一下这些库的引用以及各个 .h 文件,以了解整体逻辑。
关于时间设置,程序中提供了本地时区和夏令时偏移的配置代码。你需要根据自己所在的地区调整这些参数。如果想做得更完善,也可以考虑将这些设置移至网页配置界面中,实现更灵活的网络配置。
使用体验
1. 第一次上电:轻松进入配置模式
按住“Radio”按键开机,设备便会进入配置模式。此时ESP32会创建一个Wi-Fi热点(如“RadioAP”)。用手机连接该热点后,打开浏览器会自动跳转或手动输入管理IP,即可进入配置页面。在网页中你可以:
- 设置家庭Wi-Fi的SSID和密码。
- 添加你喜爱的电台流媒体URL(最多支持10个)。
- 为每个电台设置一个简短易记的ID(显示在数码管上)。
- 设置夜间自动熄屏和白天自动开启的时间。
- 选择设备启动后默认播放的电台。
保存所有配置后,设备会自动重启,并尝试连接你设置的家庭Wi-Fi,进入正常工作模式。




2. 日常使用:复古而直接的操作
- 旋转编码器:顺时针/逆时针旋转以切换上一个/下一个电台。
- 电位器旋钮:旋转以调节音量大小。
- 功能按键:“Radio”键控制收音播放的开关,“Alarm”键用于设置和开关闹钟。
- 数码管显示:常态显示时间,操作时会短暂显示电台ID、音量等级或闹钟状态。
- 夜间模式:在设定的夜间时段,显示屏会自动关闭以节省功耗并避免光污染。
- 电容触控条:在夜间屏幕关闭时,轻轻触碰即可唤醒显示屏亮起约5秒,方便查看时间。
结语:一台简单,但能长期陪伴你的设备
这台基于 ESP32 打造的流媒体时钟收音机,真正践行了“少即是多”的设计理念。它没有复杂的智能系统,却在“报时、收音、闹钟”这三件基础事情上做到了精准、稳定与可靠。它不依赖任何云平台或手机App,无需注册账户,也永远不会弹出广告。它更像是一件属于你个人的、安静的桌面工具,不吵不闹,却能在你需要时提供时间与声音的陪伴。
如果你正在寻找一个适合在周末动手实践的 ESP32 开源实战小项目,并希望制作一件有实用价值的硬件,那么这个“隐形”时钟收音机会是一个非常不错的选择。整个过程不仅能让你深入了解 I2S 音频、网络协议和硬件交互,最终还能获得一个独一无二的实用作品。欢迎来云栈社区的开发者广场分享你的制作成果或提出疑问。