《超級馬里奧世界》可能是我兒時玩得最多的游戲之一。所以我與這個小小的水管工——馬里奧有著深厚的情感聯(lián)系。該系列的第一款游戲在 NES 上具有革命性意義,為 80 年代上半葉正處于糟糕階段的游戲行業(yè)帶來了極大的解脫。
本文將指導您以非常簡單的步驟創(chuàng)建一個動畫馬里奧時鐘,它可以成為任何環(huán)境的復古裝飾物。
補給品
ESP32 開發(fā)板(速賣通)
如果您想要一個即用型顯示控制器板,請考慮ESP32 Trinity
RGB LED 矩陣 64x64
固件
第 1 步:概念
我看到一些制造商正在使用 LED 矩陣制作幾個項目,并認為也許我可以用這個矩陣制作掛鐘,然后順時針的想法就出現(xiàn)了。Clockwise 的概念是成為一個智能掛鐘,我們可以在其中更改屏幕主題并添加對您的上下文有意義的小部件。把它想象成一個智能手表,但在墻上(并且分辨率較低)。
我最想擁有的表盤之一是馬里奧兄弟的表盤,他站在舞臺上敲擊積木來改變小時和分鐘。我記得在 Pebble 手表的美好時光看到并喜歡這種皮膚,并且一直想要類似的東西。我的意思是,這個想法太好了,我想在其他地方使用它。
除了這個表盤之外,我還制作了一個以文字顯示時間的表盤,另一個顯示世界地圖上的時間的表盤,以及另一個模擬模擬時鐘的表盤。所有這些都可以在順時針的網(wǎng)站上找到。除了時鐘的外觀,我還想添加一些功能,例如:電子郵件通知、天氣預報、新聞、交通、向順時針發(fā)送短信的可能性以及無數(shù)其他想法。但是對于這篇文章,讓我們關(guān)注馬里奧的時鐘。
LED 矩陣由 ESP32 控制,這就是我在開發(fā)初期使用的,如上圖所示。對于那些有興趣創(chuàng)建這個項目并且無法創(chuàng)建或購買將控制顯示器的 PCB 的人來說,一個簡單的 ESP32 開發(fā)板將像一個魅力一樣工作,并且取決于你如何組織這束電線,它可能是最終的版本也是。只需按照顯示驅(qū)動程序的 GitHub 上有關(guān)接線的說明進行操作,或者下一節(jié)中的接線圖可以提供幫助。
第 2 步:我自己的 PCB
完成時鐘的基本代碼后,我需要一塊 PCB。我真的很想把時鐘掛在墻上,所以我開始制作我的第一塊 PCB 的原型。我買了一臺低功率激光器并將其安裝到我的 3D 打印機上,這樣我就可以設計控制顯示器的電路板。這個設計工作得很好,雖然它需要一些改進。你可以在Github上找到它。
讓我們的 PCB 更專業(yè)
Tindie 一直是一個很棒的平臺,來自世界各地的制造商可以在這里創(chuàng)建和銷售他們的項目。Brian Lough 就是其中之一,幾年前我在社交網(wǎng)絡上認識了他,從那時起,他一直在 ESP32 Trinity 上工作,這是一個經(jīng)過測試且隨時可用的板來控制這些顯示器。在這種情況下,它再合適不過了,您所要做的就是將電路板插入顯示器,上傳固件,瞧。正因為如此,我已經(jīng)淘汰了我開發(fā)的 PCB,Trinity 已經(jīng)擁有我需要的一切,甚至更多,它甚至帶有觸摸感應按鈕、LDR(我們可以用它調(diào)節(jié)顯示器的亮度)、USB-C、電源控制等等,您可以點擊這里查看更多詳細信息
第 3 步:固件
如果您不想詳細了解代碼的工作原理、設置、配置,而只是想看看它是否正常工作。您可以使用 Mario Bros. Clock 安裝程序來上傳固件,而無需安裝任何東西,也無需任何努力,因為它已經(jīng)編譯。只需將 ESP32 插入 USB 端口,然后單擊 P-Switch 即可閃爍。點擊這里安裝程序。
配置 WiFi
第一次運行時,你需要配置WiFi,通過智能手機或筆記本電腦連接到密碼12345678的“Clockwise-Wifi”接入點,點擊“配置WiFi”并選擇你的AP,輸入你的密碼和您的時區(qū)并保存。然后時鐘可以連接到 NTP 服務器以獲取正確的時間。使用 2.4GHz WiFi 很重要,它不適用于 5G。
關(guān)于時區(qū)
WiFi Manager 負責收集時鐘中使用的時區(qū)參數(shù)以正確顯示時間。實例化 NTP 客戶端時,默認時間為 UTC,我們需要在 Wifi 設置過程中告知正確的時區(qū)。此處列出了所有可用的時區(qū)名稱,例如 America/New_York、Asia/Dubai、Europe/Paris 等。就我而言,我在 WiFi 管理器的時區(qū)字段中輸入“America/Sao_Paulo”,僅此而已。如果您想了解更多關(guān)于 NTP 服務器的工作原理,我建議您閱讀這篇文章。
第 4 步:源代碼
我通常使用 PlatformIO 為我的項目開發(fā)固件。如果你還不知道,我建議你試一試。但是對于這篇文章,我決定使用 Arduino IDE 來讓事情變得更簡單。存儲庫中的代碼已準備好與ESP32-HUB75-MatrixPanel-I2S-DMA庫一起使用,但我也使用了 PxMatrix并且一切正常。我相信您只需要替換庫而無需進一步更改代碼,因為基類是Adafruit_GFX。
為了讓它在 Arduino IDE 中工作,我不得不稍微修改一下項目結(jié)構(gòu),所有文件都與mariobros-clock.ino一起進入了根目錄,當你第一次看到它時可能會有點混亂。我會試著在這里整理東西。但在我忘記之前,源代碼可點擊這里找到。
該結(jié)構(gòu)由以下三個文件夾和文件樹組成。
clockface : 包含圖形、字體、圖標等以及馬里奧的實現(xiàn)
commons:包含通用實用程序,例如日期/時間和 Wifi 配置
engine : 包含一般顯示使用的實現(xiàn),如繪制風景、精靈、事件等的函數(shù)。
. ├── 表盤 │ ├── Clockface.cpp │ ├── Clockface.h │ └── gfx │ ├── assets.h │ ├── block.cpp │ ├── block.h │ ├── mario.cpp │ ├── mario.h │ └── Super_Mario_Bros__24pt7b.h ├── 公地 │ ├── CWDateTime.cpp │ ├── CWDateTime.h │ ├── IClockface.h │ └── WiFiConnect.h ├── 發(fā)動機 │ ├── EventBus.cpp │ ├── EventBus.h │ ├── EventTask.h │ ├── Game.h │ ├── Locator.cpp │ ├── Locator.h │ ├── Object.h │ ├── Sprite.cpp │ ├── Sprite.h │ └── Tile.h └── mariobros-clock.ino |
有了這種結(jié)構(gòu),就可以組裝看起來像所附圖像的時鐘?;旧衔覀冇徐o態(tài)物體的風景。我們有兩個元素,馬里奧和積木。馬里奧每分鐘跳躍一次并擊中積木,事件順序如下:
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
第 5 步: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 的時間- 搜索“timelib”。
WiFi Manager by tzapu - 一起搜索“wifimanager”
ezTime - 搜索同名
安裝所有庫并選擇正確的板后,只需上傳它,它應該可以工作。之后,按照固件部分提供的說明配置 wifi。
第 6 步:3D 打印
為了讓掛鐘更容易掛在墻上,我在 TinkerCAD 上創(chuàng)建了一個簡單的外殼。說實話,3D建模不是我的強項,但效果很好。只是一個建議,這個案例是在我家里的顯示器中建模的。不知道會不會兼容所有的顯示器型號,孔位可能不一樣。我喜歡這個案例,因為它更容易操作顯示器。
第 7 步:改進計劃
創(chuàng)建通知小部件并在手表上顯示它們,它們可以在網(wǎng)絡應用程序本身中進行配置
將 MQTT 集成到手表中,以便您可以從任何地方接收這些通知
評論
查看更多