2022-12-14 10:29:41 [显示全部楼层]
10997浏览
查看: 10997|回复: 1

自制一个基于 ESP32 制造的超级马里奥主题时钟

[复制链接]


这周和大家分享一款超级马里奥主题的时钟,基于 ESP32 和彩色点阵制造,非常有趣。

自制一个基于 ESP32 制造的超级马里奥主题时钟图1

马里奥会站在舞台上顶起砖块来更新时间数字。

除了马里奥表盘之外,还有文字显示时间的表盘——显示世界时间的表盘和一个模拟时钟表盘。

自制一个基于 ESP32 制造的超级马里奥主题时钟图2

所有这些资料都可以在 Clockwise的网站[1]上找到。

除了时钟的外观,之后还考虑添加一些其他功能,例如:电子邮件通知、天气预报、新闻、交通、向顺时针发送短信等。
组件清单
  • ESP32 开发板/ESP32 Trinity × 1
  • 64×64 RGB LED × 1
  • 5v 电源 × 1

自制 PCB 板

自制一个基于 ESP32 制造的超级马里奥主题时钟图3

初期开发的时候,作者使用 ESP32 来控制 LED 矩阵。对于没法自制 PCB 板的新手来说, ESP32 开发板是非常不错的选择。

可以按照 GitHub 上显示驱动程序的接线说明进行操作,也可以查看接线图来辅助。

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

自制一个基于 ESP32 制造的超级马里奥主题时钟图4

在完成时钟的基本代码后,作者准备自制一块的 PCB 板。它可以控制显示器的电路板。

具体详情可查看:

https://github.com/jnthas/clockwise/tree/main/firmware/

自制一个基于 ESP32 制造的超级马里奥主题时钟图5

自制一个基于 ESP32 制造的超级马里奥主题时钟图6

另外,作者推荐了一个很棒的平台——Tindie,全球各地的制造商都会在这里创建和销售他们的项目。

在这里作者找到更好的板子——ESP32 Trinity,它带有触摸感应按钮、LDR(可以用它调节显示器的亮度)、USB-C、电源控制等。

具体可以查看:https://github.com/witnessmenow/ESP32-Trinity/

自制一个基于 ESP32 制造的超级马里奥主题时钟图7

自制一个基于 ESP32 制造的超级马里奥主题时钟图8

刷固件
自制一个基于 ESP32 制造的超级马里奥主题时钟图9

如果你不想了解代码的工作原理、设置和配置,只是想检查它是否正常工作,你可以使用 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 管理器的时区字段中输入Asia/Shanghai即可。如果你想了解更多关于 NTP 服务器工作的信息,可点击此处查看:https://lastminuteengineers.com/esp32-ntp-server-date-time-tutorial/

源代码
自制一个基于 ESP32 制造的超级马里奥主题时钟图10

通常,我们会使用 PlatformIO 开发固件,如果你不知道,推荐试试。但在本项目中,我们使用 Arduino IDE ,项目会更简单一些。

存储库中的代码与 ESP32-HUB75-MatrixPanel-I2S-DMA (网址:https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/ ) 库一起使用,同时我们也使用了 PxMatrix (网址:https://github.com/2dom/PxMatrix/ ) 并且一切正常。你只需要替换库不需要进一步更改代码,因为都是基于 Adafruit_GFX。

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

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

该结构是由三个文件夹和文件树组成。
  • clockface: 包含图形、字体、图标等以及马里奥的显示。
  • commons: 包含通用实用程序,例如日期、时间和 Wi-Fi 的配置。
  • engine: 包含显示器中一般使用功能的实现,例如绘制风景、精灵、事件等功能。
  1. .
  2. ├── clockface
  3. │   ├── Clockface.cpp
  4. │   ├── Clockface.h
  5. │   └── gfx
  6. │       ├── assets.h
  7. │       ├── block.cpp
  8. │       ├── block.h
  9. │       ├── mario.cpp
  10. │       ├── mario.h
  11. │       └── Super_Mario_Bros__24pt7b.h
  12. ├── commons
  13. │   ├── CWDateTime.cpp
  14. │   ├── CWDateTime.h
  15. │   ├── IClockface.h
  16. │   └── WiFiConnect.h
  17. ├── engine
  18. │   ├── EventBus.cpp
  19. │   ├── EventBus.h
  20. │   ├── EventTask.h
  21. │   ├── Game.h
  22. │   ├── Locator.cpp
  23. │   ├── Locator.h
  24. │   ├── Object.h
  25. │   ├── Sprite.cpp
  26. │   ├── Sprite.h
  27. │   └── Tile.h
  28. └── mariobros-clock.ino
复制代码


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

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

IDE 设置
在运行之前,需要从 Arduino Library Manager 安装一些库。
  • ESP32-HUB75-MatrixPanel-I2S-DMA:搜索ESP32 HUB75 MATRIX
  • Adafruit GFX:搜索Adafruit GFX
  • FastLED:搜索FastLED
  • Fabrice Weinberg 的 NTPClient:搜索NTPClient
  • Adafruit BusIO:搜索同名
  • Michael Margolis版本的Time:搜索timelib
  • tzapu的WiFi Manager:搜索wifimanager
  • ezTime:搜索同名。

安装所有库并选择正确的板后,将它们上传后就可以工作了。

按照固件部分提供的说明配置Wi-Fi。

3D 打印
自制一个基于 ESP32 制造的超级马里奥主题时钟图11

为了让钟更容易挂在墙上,我们在 TinkerCAD 画了一个外壳。效果很不错(以家里的显示器为例建模)

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

可以改进的地方


1、通过 WebSerial API 更改表盘。创建一个网络应用程序,之后只需选择所需的表盘即可更新固件。可参考https://clockwise.page/

2、创建通知小组件并在表盘上显示它们,它们可以在网络应用程序中进行配置

3、将 MQTT 集成到表盘中,好在任何地方都可以接收这些通知。

4、创建更多表盘。

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

参考资料[1]
Clockwise的网站: https://jnthas.github.io/clockwise/

原文链接:https://www.instructables.com/Mario-Bros-Clock/
原文作者:jnthas
译文首发于:趣无尽
转发请注明出处与原作者信息

lililiu  见习技师

发表于 2023-2-10 23:14:28

时区设置后无法更新时间,差8小时,请问啥问题啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail