一種使用ESP32 LORA顯示模塊的簡易游戲機(jī)
這是我的個人項(xiàng)目,我自己編寫了一些街機(jī)游戲。代碼完全是從頭編寫的,并且是可修改的。
我一直想設(shè)計(jì)一個游戲機(jī),因?yàn)槲乙恢敝杂?a href="/tags/游戲機(jī)" target="_blank">游戲機(jī)是如何將硬件、軟件和圖像融合在一起的。因?yàn)槲矣幸粋€基于ESP32的LORA(遠(yuǎn)程)開發(fā)板,我想使用它。整個電路在5V電壓下工作。控制臺只使用一個按鈕,可以執(zhí)行多個任務(wù)。固件是可升級的,但對于我的初始項(xiàng)目,我添加了三個很酷的游戲,既有趣又易于編碼!
項(xiàng)目簡介
動機(jī)很簡單:
?這是一個簡單的游戲控制臺,運(yùn)行在ESP32上,內(nèi)置0.96英寸OLED顯示屏。
?游戲、導(dǎo)航和游戲都是由一個按鈕完成的。
?ESP32模塊上的內(nèi)置顯示器充當(dāng)屏幕。
?led在各種動畫中亮起,顯示開始/贏/輸?shù)取?
?蜂鳴器以不同的頻率發(fā)出不同的聲音。
?易于定制和固件升級。
主要游戲:
?Hamba Match:在這個游戲中,一個圖像在屏幕上不斷移動,要想獲勝,你需要在正確的時間按下按鈕,將圖像嵌入到它的輪廓中。
?Hamba Run:我嘗試在Chrome上重現(xiàn)你玩的恐龍游戲。跳起來躲避障礙物!
?數(shù)字保持游戲:在這個游戲中,在屏幕上顯示一個隨機(jī)數(shù)字和一個不斷變化的數(shù)字。您需要在正確的時間按下,以便連續(xù)數(shù)字與隨機(jī)數(shù)完全匹配。
?更多游戲:我將繼續(xù)在我的GitHub上添加更多簡單有趣的游戲。(連結(jié)如下)
硬件與電路
硬件方面非常簡單。在這里,我使用面包板來容納所有組件。該電路是圍繞ESP32 LoRa模塊構(gòu)建的,它作為主控制器。ESP32完美地放在面包板上,將所有引腳留在板的兩側(cè)。
系統(tǒng)由來自USB的5V供電。開發(fā)板包含一個3.3V穩(wěn)壓器,用于燈和按鈕輸入。
開發(fā)板不能輸出足夠的電流,所以我使用通用的PNP晶體管(BC557)來切換led和蜂鳴器。led并聯(lián)連接,因此它們同時閃爍。
輸入按鈕連接到1k上拉電阻(未按下時讀取HIGH),這是避免鬼觸發(fā)的好方法。
由于我們將使用中斷來讀取按鈕輸入,因此與開關(guān)連接的額外100nF電容器對于抵消脫頻效應(yīng)非常重要。
套管
你知道你可以數(shù)控塑料嗎?JLCCNC提供多達(dá)5軸銑削工藝!而且成本很低。
代碼:
我試圖保持代碼簡單,讓每個人都能理解。通過創(chuàng)建一些自定義庫可以使代碼更整潔,但現(xiàn)在,我將所有內(nèi)容保存在main.cpp下
#重要:要使用開發(fā)板的內(nèi)置OLED顯示屏,需要對代碼進(jìn)行一些調(diào)整。在Heltec板上,OLED顯示器可以打開/關(guān)閉,因此要打開它,在初始設(shè)置時將GPIO 16引腳拉到HIGH。我附上了代碼的截圖。
代碼分為不同的部分,我在下面討論了不同的代碼塊:
菜單是通過調(diào)用兩個函數(shù)創(chuàng)建的:
drawMenu()顯示名稱和圖標(biāo)
和menuAction()執(zhí)行選中的游戲
輸入按鈕被編碼為中斷,以便按鈕功能在游戲的某個點(diǎn)上運(yùn)行而沒有任何延遲。
必須添加ICACHE_RAM_ATTR以避免意外復(fù)位。
Hamba比賽游戲功能:
持號游戲功能:
Hamba Run游戲功能:
“void loop()”下的代碼只檢查按鈕的狀態(tài),玩哪個游戲,何時停止游戲,并顯示菜單。
所有的注釋都被添加到代碼中,所以您可以隨心所欲地調(diào)整代碼!
上傳代碼
要上傳代碼,您可以直接復(fù)制main.cpp文件,粘貼到Arduino IDE中,安裝必要的庫,然后點(diǎn)擊上傳。
如果你像我一樣使用Visual Studio Code (platformIO),使用下面的platformIO .ini文件上傳代碼沒有任何問題:
從圖像生成字符數(shù)組
最初,我在Illustrator上畫了一些圖片,并將它們導(dǎo)出為PNG格式。把它上傳到網(wǎng)站上,并做了相應(yīng)的調(diào)整。
截圖顯示了為牛角生成字符代碼的過程。
不過分辨率不是很好。
結(jié)束
這樣就完成了!這個游戲玩起來很有趣!對我來說就像一個煩躁的玩具。我期待著添加更多的游戲,并與大家分享。
本文編譯自hackster.io





