马里奥时钟 · ESP32 HUB75 64×64 LED 模拟器

by
published 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-pinGPIO 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 归位、清除所有敌人