桌面上的笔筒,大多数时候都很安静。它负责收纳几支笔,偶尔接住一把尺子,然后在显示器旁边默默“站岗”。但如果这个笔筒会自己发出电子音,会在屏幕上播放 GIF,会展示雷达界面,还能把你输入的一句话翻译成一串机器人语音呢?
Hackster.io 创作者 Arnov Sharma 制作的 Stationery Unit D2,就是这样一台不太安分的桌面收纳装置。它以 R2-D2 的视觉语言为灵感,将 ESP32-P4 触摸屏开发板、扬声器、物理按键、Wi-Fi、本地网页和 3D 打印外壳组合在一起。背面仍然是实用的笔筒,正面却变成了一台会显示、会发声、会响应操作的桌面机器人。
这大概就是电子项目最有趣的地方:同样是一只笔筒,加上计算、显示、声音和交互以后,它突然就有了“性格”。
“笔筒”的功能
Stationery Unit D2 的基础功能可以分成四部分:
- 桌面收纳:后部结构可以放置笔和其他小件文具;
- 屏幕交互:正面显示雷达 UI、GIF 和电影字幕式文字;
- 声音反馈:扬声器播放程序实时生成的机器人鸣叫声和隐藏曲目;
- 网页控制:手机或电脑通过局域网网页切换内容、发送文字和查看状态。
设备顶部还有两枚实体按键:
-
GPIO 48 对应的按键触发“彩蛋歌曲”; -
GPIO 47 对应的按键在雷达界面和 GIF 模式之间切换。
即使没有打开网页,用户也能直接操作设备。这种“网页控制 + 实体按键”的双入口设计,比把所有功能都塞进手机页面更适合桌面产品。
设计思路
如果设备只在被按下按钮时才发声,它更像一件工具;如果它偶尔会自己做点什么,人就很容易把“主动性”投射到它身上。
作者为 Stationery Unit D2 设置了后台任务:设备每隔约 20 秒,会自行播放一段约 5 秒的机器人鸣叫声。声音并不是从固定音频文件里随机抽取,而是由程序实时生成。
每次发声时,程序选择不同的起始频率、结束频率和持续时间,生成一段发生音高滑动的正弦波,再把 PCM 数据送到 ES8311 音频编解码器和扬声器。其核心思路可以简化为:
确定起始频率与结束频率↓逐个计算正弦波采样点↓让频率随播放进度滑动↓把 PCM 缓冲区送入音频输出
同一句“哔——啵——嘀”如果永远按相同节奏播放,很快就会显得机械;加入频率变化和随机组合后,每次回应都略有不同,于是设备便产生了一种正在“思考”或自言自语的错觉。
作者还设计了一个文字转机器人语音功能。网页收到文字后,以每个字符的 ASCII 值作为计算种子,为其生成对应的音高和时长。相同文字能够得到相对稳定的声音序列,不同文字又会产生不同的电子音模式。
这当然不是真正的语音合成,更不是让机器人读出自然语言,但作为一种“角色化反馈”,它既轻量又很有趣。
为什么选择ESP32-P4?
项目核心硬件是 Waveshare ESP32-P4-WIFI6-Touch-LCD-4.3 开发板,主要包含:
-
双核 400 MHz RISC-V 高性能处理器; -
一颗低功耗 RISC-V 核心; -
4.3 英寸、480 × 800 分辨率 IPS 电容触摸屏; -
USB 2.0 OTG High-Speed; -
MIPI-CSI 摄像头接口和图像信号处理能力; -
40 针 GPIO 扩展接口; -
板载 ESP32-C6-MINI 无线协处理模块。
这里有个容易混淆的地方:ESP32-P4 本身没有集成 Wi-Fi 和蓝牙。这块开发板通过 ESP32-C6-MINI 提供 Wi-Fi 6 和 BLE 连接能力。这种分工很适合图形交互项目:ESP32-P4 负责显示、音频、界面和应用逻辑,ESP32-C6 负责无线连接。
外形设计
作者没有复刻经典的圆柱形机器人,而是在 Fusion 360 中设计了一种扁平、适合桌面摆放的结构。
这种改变并不只是为了“做得不一样”,而是在解决几个实际问题:
-
4.3 英寸矩形屏幕需要一块相对平整的正面; -
开发板、扬声器和电池需要足够的内部空间; -
顶部要容纳两个按键及其执行结构; -
背部还要留下能真正放笔的收纳区域; -
外壳必须能够拆装,方便接线和维护。
最终外壳分成前、后两大部分,通过四颗 M2 螺钉固定。前壳负责承载显示屏和 R2-D2 风格外观,后壳既是封盖,也是笔筒本体。
设计细节
项目使用白色 PLA 打印前壳,用蓝色 PLA 打印后壳、按键执行件以及多个装饰细节。这些装饰件在模型设计中常被称为 greebles:它们不一定承担复杂功能,却能通过格栅、条形结构、圆形部件和层次变化,让原本平整的表面产生机械感。
打印参数为:
-
0.4 mm 喷嘴; -
0.2 mm 层高; -
25% 填充; -
蓝色部件基本不需要支撑; -
白色前壳倒置打印,内部结构需要支撑。
装配时,格栅采用接近零间隙的压配方式固定,其他装饰件则使用少量瞬间胶粘接。
这里体现了一个很实用的设计原则:功能件应该考虑定位、受力和可维护性;纯装饰件则可以采用更轻量的安装方案,没有必要把每个细节都设计成复杂的螺钉结构。
按键设计
顶部两个按键安装在一块约 20 × 20 mm 的小型 PCB 上,板上放置两枚 4 × 4 mm 轻触开关,并通过连接器引出信号。
外壳内部设计了两条定位筋。装配时先放入 3D 打印的按键执行件,再把开关板滑入下方。按压外部执行件时,力量会传递到 PCB 上的轻触开关。
这种结构比直接把裸开关粘在外壳里更可控:
-
两个按钮的高度和间距更一致; -
焊接和检查可以在外部完成; -
PCB 与外壳由设计尺寸共同定位; -
后续拆装时不容易拉扯开关焊点。
实际接线为:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
硬件装配
扬声器安装在 ESP32-P4 板上方,利用背面的 3M 双面胶固定,同时避开连接器和其他元件。
显示开发板从前壳内侧放入。作者使用热熔胶在屏幕四角附近固定板卡。对于不承受明显机械载荷的原型,热熔胶确实快速有效;但如果准备反复拆装或长期使用,更推荐增加可拆卸压板、螺柱或卡扣。
电池通过 JST 连接器接入开发板,然后固定在显示屏另一侧。最后盖上带笔筒的后壳,并用四颗 M2 螺钉锁紧。
软件架构
项目使用 ESP-IDF 5.4 开发,启动时依次初始化:
SD 卡 → 程序化音频 → LVGL 显示 → Wi-Fi → 本地 Web 服务
SD 卡需要优先挂载,因为字体、GIF 等资源由显示和音频子系统使用。无线网络获得 IP 地址后,设备同步时间并启动网页服务器。
软件可以大致拆成五层:
- 资源层:SD 卡保存字体和 GIF;
- 音频层:生成 PCM 波形并通过音频编解码器播放;
- 显示层:LVGL 绘制雷达、动画、文字和 GIF;
- 网络层:ESP32-C6 协助连接 Wi-Fi;
- 应用层:Web API 和物理按键共同控制设备状态。
这样的拆分比把显示、发声、联网和按键全写进一个超长的 while 循环更容易维护,也方便后续增加新模式。
本地网页:浏览器就是遥控器
ESP32 在局域网内运行一个 Star Wars 风格的 Web Dashboard。前端 HTML、CSS 和 JavaScript 被直接编入固件,不依赖外部云平台。
通过网页可以:
-
选择并播放 GIF; -
在设备屏幕上显示电影字幕式文字; -
输入文本并转换为机器人鸣叫声; -
查看当前显示模式和系统时间; -
触发不同交互状态。
前端使用 fetch() 调用本地 API。例如,输入文字后向 /api/speak 发送 HTTP POST;后端收到文本后,一边更新屏幕文字,一边创建后台任务生成声音,然后立即返回响应。
网页还会定时访问 /api/status 获取 JSON 状态,使浏览器显示与物理设备保持同步。
由于 Web 服务和 LVGL 任务可能运行在不同核心上,同时修改界面会造成竞争。项目在更新 LVGL 对象前后使用显示锁,避免两个任务同时操作图形对象。
这部分是项目中很有价值的工程细节:联网不只是“能打开网页”,还要处理响应延迟、共享资源和并发访问。
原作者还关闭了 Wi-Fi 节能模式,以减少 HTTP 操作可能出现的数百毫秒延迟。代价是功耗会上升,因此如果设备主要依靠电池供电,需要在响应速度与续航之间重新权衡。
六首“彩蛋歌曲”
Button 1 可以触发六段由机器人电子音重新演绎的彩蛋曲目,包括生日歌、星球大战主题、超级马里奥主题等。
从技术角度看,它们并不是高保真音乐播放,而是把旋律拆成音符频率与时长,再调用音频合成函数逐个生成。
这种实现的优势是:
-
不需要保存大型音频文件; -
可以实时改变音高、速度和音色; -
很容易把旋律与灯光、屏幕动画联动; -
能帮助初学者理解采样率、频率、波形和缓冲区。
当然,蜂鸣声版的经典旋律能不能算“音乐欣赏”,可能要看办公室同事的耐心。
至少它成功解决了一个问题:你的笔筒再也不会因为过于安静而被忽略。
值得学习的地方
Stationery Unit D2 看上去像一个轻松有趣的桌面玩具,背后却串起了相当完整的产品开发流程:
-
Fusion 360 结构设计; -
3D 打印与装配公差; -
小型按键 PCB; -
ESP32-P4 与 ESP32-C6 协同; -
I2S 音频和实时波形生成; -
LVGL 图形界面; -
FreeRTOS 后台任务与互斥锁; -
本地 Web Server 与 REST 风格接口; -
电池供电和整机装配。
更重要的是,它没有为了技术而技术。屏幕、声音、随机行为、实体按键和网页控制,全都服务于同一个目标:让一件静态桌面用品拥有更自然、更有趣的互动体验。
完整代码由作者与 Aahan Sharma 协作完成,可在项目仓库中查看:https://github.com/AahanDoesGit/r2d2
完整制作过程、STEP 文件和更多原图,可点击文末“阅读原文”查看。
总结
当显示、Wi-Fi、扬声器和电池被装进一个紧凑外壳后,新的问题也会随之出现:
-
扬声器发声时,电源轨是否出现明显跌落? -
Wi-Fi 发射与屏幕刷新同时发生时,系统是否会重启? -
触摸屏、实体按键和 Web 请求并发出现时,会不会发生状态冲突? -
电池电压下降后,音频失真和显示稳定性会怎样变化? -
长时间运行时,板卡温度和内存占用是否稳定?
这些问题不能只靠“多运行一会儿看看”,而需要用合适的仪器和方法找到证据。
DigiKey 得捷与硬禾科技联合推出的免费电子书:《精度之源:电子工程师的工具与测量指南》,围绕示波器、数据采集系统、逻辑分析仪、万用表、压接工具和自动化测试展开,帮助工程师把偶发复位、通信异常、电源波动和长期漂移等模糊现象,转化为可记录、可分析、可验证的数据。
免费下载电子书
扫描下方二维码,填写有效信息即可获取完整 PDF:
扫码免费下载电子书pdf
电子书介绍页面:https://www.eetree.cn/page/activity/ebooks
外形让项目被人记住,测量则让项目稳定运行。
愿你的下一个桌面作品,不仅会“嘀嘀咕咕”,也能经得起一次认真的工程验证。
免责声明:本篇所发布的内容主要经 AI 整理、翻译国外技术网站与开源社区,版权归原作者所有,图片摘自原文,本文仅用于学习交流。如涉及侵权,请联系我们删除或更正。
项目原文(或点击“阅读原文”):
https://www.hackster.io/Arnov_Sharma_makes/stationery-unit-d2-1e7b8b
点击阅读原文查看项目细节