马里奥时钟 · ESP32 HUB75 64×64 LED 模拟器
by sunxiaojianpublished on项目简介
Mario Clock 是一款基于 ESP32 + HUB75 64×64 LED 面板 的复古游戏时钟。屏幕上 Mario 在奔跑,背景 Mario 风格滚动,敌人从两侧来袭,Mario 自动发射火球自卫。顶部显示当前时间、星期和秒钟。
本项目提供 浏览器内完整模拟器,完整复刻了实机的所有物理引擎和渲染逻辑。你可以在网页上实时体验所有功能,无需任何硬件。
🎮 点击打开在线模拟器 →
完整物理引擎 · 实时参数调整 · 无需硬件
核心功能
🎮 实机级物理模拟
- Mario 4 帧行走动画,奔跑时上下摆动
- 抛物线跳跃物理(重力 + 初速度)
- 自动识别前方管道并起跳躲避
- 踩中敌人弹跳 + 火球碰撞消灭敌人
- Mario 所在位置屏幕居中,世界向反方向滚动
🌄 3 层视差滚动背景
- 远景层(0.3x):缓慢滚动的蘑菇山和树木
- 中景层(0.7x):中等速度的灌木和丘陵
- 近景层(1.0x):快速滚动的主地形和管道
- RGB565 → RGB888 精确色彩还原,242px 无缝循环宽度
👾 智能敌人 AI
- Goomba:每 7 秒随机在左右两侧生成,缓慢朝中心移动
- Koopa:同款生成逻辑,速度略快
- Mario 自动检测敌人位置 — 敌人在身后时转身面对
- 前方有敌人时,间隔 1.5 秒自动发射火球攻击
⏰ 时间显示系统
- HH:MM:左上角 24 小时制时间显示
- ×N:金币图标 + 星期数(x1=周一,x7=周日)
- SS:右上角秒钟显示(1-60)
- 整点庆祝:每过一分钟 Mario 自动跳跃一次
🌡️ 自动亮度控制
- LDR 光敏电阻实时采样环境光强度
- 平衡点校准:设定目标阻值 + 期望亮度
- 灵敏度调节:正负双向,数值越大调节越剧烈
- 夜间模式:18:00-6:00 自动切换黑夜背景
🔧 Web 配置界面
- ESP32 上电自建 Web 服务器,无需安装 App
- 浏览器访问即可调整所有参数
- WiFiManager 一键配网,断网自动重连
- NTP 自动校时,支持自定义服务器地址
硬件规格
| 主控芯片 | ESP32(任何型号,推荐 WROOM-32) |
| 显示面板 | HUB75 64×64 LED 矩阵(P3/P4) |
| 分辨率 | 64×64 = 4096 像素,RGB565 (65536 色) |
| 光敏电阻 | GPIO 35,10K 分压电阻 |
| 按键 | GPIO 32,上拉输入,短按切换夜间模式 |
| HUB75 E-pin | GPIO 18 |
| 电源 | 5V 2A USB 供电(全亮约 1.5A) |
| 总成本 | ≈ 60-80 元人民币 |
源码结构
- MarioClock.ino — 主程序:游戏循环、物理、渲染、Web 配置界面(821 行)
- mario_sprites.h — 所有精灵像素数据:Mario 行走/跳跃、Goomba、Koopa、火球(RGB565)
- bg_layer1.h / bg_layer2.h / bg_layer3.h — 三层视差背景像素数据(242×64 像素,各 122KB)
模拟器控制面板
右侧控制面板与实机 Web 界面一致,可实时调整:
- 最低/最高亮度:限制自动调节的上下限
- 平衡点环境阻值:你希望屏幕保持目标亮度的 LDR 阈值
- 平衡点亮度:该阻值下你期望的屏幕亮度
- 灵敏度:环境光变化时的调节响应速度(可正可反)
- FPS 限制:10-60 帧,匹配实机性能
- 滚动速度:背景移动倍率
- 敌人生成间隔:1000ms - 30000ms
浏览器模拟器按钮
- ⏩ 方向:切换左右行进方向
- ⏸ 暂停:冻结所有运动和渲染
- 🌙 夜间模式:强制切换黑白背景
- ⟳ 重置:Mario 归位、清除所有敌人