超级马里奥主题时钟

基于 ESP32 的马里奥动画时钟

Cherry

喜欢

224
浏览
0
喜欢

> 更多图片

项目状态:已完成
开放度:公开
所属分类:电子
发布时间:2022-09-26
最近更新:2022-10-27

详细说明


这是一款超级马里奥主题的时钟,基于 ESP32 和彩色点阵制造,非常生动有趣。

马里奥会站在舞台上顶起砖块来更新时间数字。除了马里奥表盘之外,我们还会制作了一个会文字显示时间的表盘,显示世界地图上的时间的表盘和一个模拟时钟的表盘。所有这些资料都可以在 Clockwise's 网站上找到。除了时钟的外观,之后我们还考虑添加一些其他功能,例如:电子邮件通知、天气预报、新闻、交通、向顺时针发送短信等。

链接表


教程

组件清单
  • ESP32 开发板/ESP32 Trinity × 1
  • 64x64 RGB LED × 1
  • 5v 电源 × 1

自制 PCB 板


期初开发的时候,我使用 ESP32 来控制 LED 矩阵。对于没法自制 PCB 板的新手来说 ESP32 开发板是非常不错的选择。如何利用好板子取决于你拍线的能力。你只需按照 GitHub 上显示驱动程序的接线的说明进行操作,也可以寻求接线图的帮助。

具体可以参考:
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA#2-wiring-esp32-with-the-led-matrix-panel

在完成时钟的基本代码后,我准备自制一块的 PCB 板。它可以控制显示器的电路板。具体详情可查看:
https://github.com/jnthas/clockwise/tree/main/firmware

推荐一个很棒的平台——Tindie,全球各地的制造商都会在这里创建和销售他们的项目。在这里我找到更好的板子——ESP32 Trinity,它带有触摸感应按钮、LDR(可以用它调节显示器的亮度)、USB-C、电源控制等。

查看更多信息:
https://github.com/witnessmenow/ESP32-Trinity

刷固件

如果你不想了解代码的工作原理、设置和配置,只是想检查它是否正常工作,你可以使用 Mario Bros. Clock 安装程序,然后上传固件。因为它已经编译,你无需安装任何东西。 将 ESP32 插入 USB 端口,然后单击 P-Switch 闪烁即可。

https://jnthas.github.io/mariobros-clock/

配置 WiFi

第一次运行时,需要配置 WiFi。通过智能手机或笔记本电脑连接到 “Clockwise-Wifi”,密码为:12345678,再点击配置 WiFi,选择你的 AP,输入密码和时区并保存。然后时钟就可以连接到 NTP 服务器并获取正确的时间。它使用的是 2.4GHz WiFi,不适用于 5G。

关于时区

WiFi Manager 可以收集时钟中使用的时区参数并确保显示正确的时间。例如 NTP 客户端时,默认时间为 UTC,我们需要在 Wifi 设置中告知正确的时区。所有时区可点解这里查看:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

对于我而言,在 WiFi 管理器的时区字段中输入“America/Sao_Paulo”即可。如果你想了解更多关于 NTP 服务器工作的信息,可点击此处查看:
https://lastminuteengineers.com/esp32-ntp-server-date-time-tutorial/

源代码

通常,我会使用 PlatformIO 开发固件,如果你不知道,推荐试试。但在本项目中,我使用 Arduino IDE ,项目会更简单一些。存储库中的代码与 ESP32-HUB75-MatrixPanel-I2S-DMA 库一起使用,同时我也使用了 PxMatrix 并且一切正常。你只需要替换库而不需要进一步更改代码,因为都是基于 Adafruit_GFX。

https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA

https://github.com/2dom/PxMatrix

为了让它在 Arduino IDE 中工作,我需要稍微修改一下项目结构,所有文件都与 mariobros-clock.ino 一起进入根目录。第一次看到时可能会有点混乱,我会试着在这里整理一下。

源代码可点击这里查看:
https://github.com/jnthas/mariobros-clock

该结构是由三个文件夹和文件树组成。

clockface:包含图形、字体、图标等以及马里奥的显示。
commons:包含通用实用程序,例如日期、时间和 Wifi 的配置。
engine:包含显示器中一般使用功能的实现,例如绘制风景、精灵、事件等功能。

.
├── clockface
│   ├── Clockface.cpp
│   ├── Clockface.h
│   └── gfx
│       ├── assets.h
│       ├── block.cpp
│       ├── block.h
│       ├── mario.cpp
│       ├── mario.h
│       └── Super_Mario_Bros__24pt7b.h
├── commons
│   ├── CWDateTime.cpp
│   ├── CWDateTime.h
│   ├── IClockface.h
│   └── WiFiConnect.h
├── engine
│   ├── EventBus.cpp
│   ├── EventBus.h
│   ├── EventTask.h
│   ├── Game.h
│   ├── Locator.cpp
│   ├── Locator.h
│   ├── Object.h
│   ├── Sprite.cpp
│   ├── Sprite.h
│   └── Tile.h
└── mariobros-clock.ino

有了这种结构,组装好后就能够显示出图片中的时钟了。在静态物体的风景的基本上,我们有两个动态的小精灵,马里奥和积木。马里奥每分钟跳跃一次并击中积木。

代码逻辑如下:

1) mario.jump()              // changes the sprite and starts the jump animation
2) mario.collidesWith(block) // if collision is detected, mario reverses the movement and starts to fall,
                             // the blocks starts an upward movement already with the new time set
3) Block reaches the ascent limit and starts to fall until it reaches the starting position.
4) Mario hits the ground and returns to the initial state

IDE 设置

在运行之前,需要从 Arduino Library Manager 安装一些库。

1、ESP32-HUB75-MatrixPanel-I2S-DMA:搜索 ESP32 HUB75 MATRIX。
2、Adafruit GFX:搜索 Adafruit GFX。
3、FastLED:搜索 FastLED。
4、Fabrice Weinberg 的 NTPClient - 搜索 NTPClient。
5、Adafruit BusIO:搜索同名。
6、Michael Margolis版本的Time:搜索 timelib。
7、tzapu的WiFi Manager:搜索 wifimanager。
8、ezTime:搜索同名。

安装所有库并选择正确的板后,将它们上传后就可以工作了。按照固件部分提供的说明配置 wifi。

3D 打印

为了让钟更容易挂在墙上,我在 TinkerCAD 创建了一个外壳。3D 建模并不是我的强项,但效果很好。我以家里的显示器为例建模。

不同的显示器,孔位可能会不一样。仅供参考:
https://www.tinkercad.com/login?next=%2Fthings%2FgP3D1qztRwr-clockwise-case%2Fedit%3Fsharecode%3DLPX3iBTkKpqTlIak9r4VNBfhXKJX-1F97O5nIp6MXyw

可以改进的地方

1、通过 WebSerial API 更改表盘。创建一个网络应用程序,你只需选择所需的表盘即可更新固件。可参考 https://clockwise.page/
2、创建通知小部件并在表盘上显示它们,它们可以在网络应用程序中进行配置。
3、将 MQTT 集成到表盘中,以便在任何地方都可以接收这些通知。
4、创建更多表盘。

该项目是开源的,大家也可以自行二次开发。