資料介紹
描述
目標(biāo)
我著手做一個(gè)簡(jiǎn)單而省力的 Arduboy 游戲機(jī)。設(shè)計(jì)目標(biāo)是
- 便宜又簡(jiǎn)單
- 電視輸出
- 不錯(cuò)的控件
- 各種有趣的游戲
我現(xiàn)在對(duì)使用 ESP32 和 Arduboy 代碼感到很自在,并認(rèn)為這將是一個(gè)有趣的項(xiàng)目,可以推動(dòng)自己學(xué)習(xí)一些新事物。
將目標(biāo)一一確定
便宜又簡(jiǎn)單
KISS - 保持簡(jiǎn)單愚蠢。
幾乎唯一要購買的大產(chǎn)品就是這個(gè)
TTGO T-Display ESP32,這個(gè)板實(shí)際上比我買它時(shí)很多沒有顯示器的板便宜,但幾乎任何 ESP32 板都可以。
我一直在不斷地構(gòu)建控件,這一次我希望我可以利用 ESP32 中的一些額外硬件來實(shí)現(xiàn)這一目的。我選擇了 PS3 控制器,任何無線通用 PS3 控制器都應(yīng)該是完美的。
你還需要一些 RCA 插孔,我選擇了母頭,這樣我就可以在電視和我的電腦之間快速輕松地來回運(yùn)行,還需要一根公對(duì)公延長(zhǎng)線,以便將背面也插入電視。 .. 最終我確實(shí)得到了一個(gè) RCA 到 HDMI 轉(zhuǎn)換器并將它連接到我的第二臺(tái)顯示器,我對(duì)設(shè)備非常滿意,并且在閃爍和測(cè)試之間的周轉(zhuǎn)時(shí)間更少。
電視輸出
電視輸出是我真正想了解更多的第一個(gè)也是最重要的事情。
我啟動(dòng)并運(yùn)行了它,看到我從裸 ESP32 發(fā)送到電視的一些實(shí)際視頻信號(hào)真的很酷。
未修改的代碼存在一些問題,它實(shí)際上是為帶有 PSRAM 的 ESP32 設(shè)計(jì)的,它將通常可用的 520kb 增加了另外 8mb!
問題是做顏色會(huì)占用大量空間,并且對(duì)于庫和它的工作方式,它有非常嚴(yán)格的時(shí)間要求,所以你實(shí)際上使用了一個(gè)雙緩沖區(qū),這意味著當(dāng)你繪制一個(gè)緩沖區(qū)(屏幕)時(shí),您致力于更新另一個(gè)緩沖區(qū)。在完成對(duì)一個(gè)緩沖區(qū)的渲染時(shí),將其換出,然后顯示該緩沖區(qū),然后開始繪制到備用緩沖區(qū)。這允許您在游戲處理下一幀時(shí)將一個(gè)緩沖區(qū)連續(xù)渲染到電視。
通過從彩色轉(zhuǎn)換為黑白,我繞過了我所面臨的大小限制,這使緩沖區(qū)從一個(gè)字節(jié)縮小了 8 倍......所以我們又回到了游戲中:)
生成電視信號(hào)的另一個(gè)有趣問題是,它需要滿足非常嚴(yán)格的時(shí)序約束,而 ESP32 有 2 個(gè)內(nèi)核,我通過將其中一個(gè)內(nèi)核專門用于電視信號(hào)來解決這個(gè)問題。
我本可以走另一條路,得到一個(gè)帶有 PSRAM 的 ESP32,大多數(shù)相機(jī)模塊都有它們,因?yàn)樗鼈兘?jīng)常咀嚼超過 520kb,盡管回到我最初的廉價(jià)和簡(jiǎn)單的目標(biāo),即沒有額外內(nèi)存的“裸”ESP32更容易掌握。


不錯(cuò)的控件
我最初的選擇是使用藍(lán)牙,它實(shí)現(xiàn)了我的一些目標(biāo),它很好的控制,硬件內(nèi)置在 ESP32 中(雖然需要一些軟件黑客),而且因?yàn)槲覀冋谧鲭娨曒敵觯运?當(dāng)我們玩的時(shí)候,會(huì)給我們一些范圍來打沙發(fā)。
我碰巧有一個(gè)廢棄的 PS3 和 2 個(gè)控制器,所以在弄亂了一些原始的藍(lán)牙外圍設(shè)備之后,我決定看看使用這些。
PS3 控制器幾乎是一個(gè)令人著迷的案例,從技術(shù)上講,它使用藍(lán)牙,但通過序列號(hào)有一個(gè)自定義配對(duì)過程。
我將我的 PS3 控制器連接到我的 PC 并使用 SixAxisPair 工具將其序列號(hào)設(shè)置為 01:02:03:04:05:06(我知道非常原始!)
我從這里得到了這個(gè)網(wǎng)站,這似乎是合法的....

使用 Wifi 和藍(lán)牙啟動(dòng) ESP32 項(xiàng)目時(shí)要注意的一件事是庫非常龐大!你炸掉大約 1Mb 的 ROM 只是為了獲得 BT 和 Wifi 堆棧,我相信有更輕的可用,但不是我可以使用 Arduino。
完成此操作后,我的輸入和輸出開始工作了!
現(xiàn)在我的游戲在哪里!
各種各樣的游戲
到目前為止,Arduboy 已經(jīng)給我?guī)砹艘粋€(gè)有趣的世界,它是我放在面包板上的第一個(gè)真正的硬件,然后焊接到原型板上并構(gòu)建了我自己的 ESP32 版本,最后現(xiàn)在制作了一個(gè)電視輸出版本。我對(duì)我在這個(gè)生態(tài)系統(tǒng)中和周圍的樂趣感到非常滿意。我什至構(gòu)建了一款令我引以為豪的游戲 Game Plug ArduRacer https://community.arduboy.com/t/arduracer-a-trackmania-type-time-trial-game/8850 ,它具有平滑滾動(dòng)、放大功能起跑線和 10 個(gè)關(guān)卡為特色!


一個(gè)早期的控制臺(tái)原型(錯(cuò)誤的芯片,但我保證我有一個(gè)非常相似的帶有按鈕的 Arduino Pro Micro)。

啟動(dòng)和運(yùn)行它的實(shí)際過程非常有趣。
最初我嘗試使用 Blinky 先生的圖書館
https://github.com/MrBlinky/Arduboy-homemade-package
這很棒,并且在不同的屏幕上為許多不同類型的 Arduboy 和 Arduino 的不同引腳做了訣竅。經(jīng)過一堆錯(cuò)誤的開始后,我找到了 ESPBoy https://www.espboy.com/的 ESP8266 轉(zhuǎn)換
一旦我抓住了這個(gè),我做的第一件事就是讓它在它所構(gòu)建的硬件上啟動(dòng)并運(yùn)行,所以我抓住了一個(gè) ESP8266、一個(gè)兼容的屏幕和面包板,一直在研究它,直到我啟動(dòng)并運(yùn)行它(并且然后玩了一會(huì)兒游戲)
完成此操作后,接下來的步驟是更換處理器,進(jìn)行了很多更改,但主要是刪除和更改庫。我將列出一些亮點(diǎn)
- PROGMEM 不是 ESP32 上的東西,刪除引用
- avr/pgmspace.h 已移至 ESP32 上的 pgmspace.h
- EEPROM不是很好,必須工作
- 音調(diào)不起作用,不得不重新編寫代碼,它仍然有點(diǎn)hacky
- 更改控件以使用 PS3 控制器
- 將輸出代碼大幅更改為線程化并輸出到電視
- 因?yàn)樾枰€程,我不得不修改每個(gè)游戲的代碼!
PROGMEM - 這有點(diǎn)簡(jiǎn)單,你需要做的就是#define PROGMEM 沒有任何意義,等 viola,完成

avr/pgmspace.h - 我有點(diǎn)懶,在 Visual Studio Code 中對(duì)整個(gè)文件夾進(jìn)行了完整的搜索和替換,這很快就解決了這個(gè)問題
Tones - 我寫了一些非常適用于詛咒地下墓穴的 hacky 代碼,我喜歡它!不幸的是,其他一些游戲也在為此苦苦掙扎……我應(yīng)該稍后再研究一下
EEPROM - 我在游戲過程中運(yùn)行良好,可以存儲(chǔ)它,但實(shí)際上它需要一個(gè)完整的實(shí)現(xiàn),我希望它知道哪個(gè)游戲正在運(yùn)行并將 EEPROM 文件存儲(chǔ)在 SPIFFS 分區(qū)上,這更像文件系統(tǒng)并允許文件,可能是與游戲名稱匹配的格式,并將特定游戲 EEPROM 存儲(chǔ)在 SPIFFS 上的文件中,因此它永遠(yuǎn)不會(huì)被覆蓋。待定
PS3 控制器連接- PS3 庫實(shí)際上有一個(gè)經(jīng)常運(yùn)行的通知檢查,我只是將它的值存儲(chǔ)在一些全局變量中,然后我可以在 Arduboy2Core::buttonsState 過程中使用它來設(shè)置值。
電視輸出- Arduboy 有它自己的幀緩沖區(qū),理想情況下我會(huì)使用它來避免代碼重復(fù)和復(fù)制,但它的水平條紋格式有點(diǎn)奇怪。緩沖區(qū)模仿您一次寫入幾個(gè)水平像素的屏幕的方式,這使得我的電視輸出代碼很難使用,所以我有一個(gè)過程,我把它放入 Arduboy 輸出代碼中,而不是輸出到屏幕,它準(zhǔn)備緩沖區(qū)并使用鎖處理緩沖區(qū)的交換。有一個(gè)線程一直在運(yùn)行,只是使用當(dāng)前設(shè)置的輸出緩沖區(qū)進(jìn)行 TV 輸出,當(dāng)它們準(zhǔn)備好時(shí),它將獲取更改。
修改每個(gè)游戲的代碼- 這實(shí)際上非常有趣,因?yàn)樗馕吨创a兼容我想找到一種修改每個(gè) Arduboy 游戲的方法,我研究了很多解決方案。但讓我先設(shè)置前提。
我需要為線程添加初始化代碼,電視輸出代碼對(duì)于它生成的 NTSC 信號(hào)非常敏感,所以我希望它本身有一個(gè)完整的核心。默認(rèn)情況下,Wifi 和藍(lán)牙代碼也在默認(rèn)使用的一個(gè)核心上運(yùn)行。這對(duì)電視輸出來說是有問題的,所以我希望它在不同的核心上。
第一次嘗試- 手動(dòng)修改游戲這是一件很痛苦的事情,并且不能對(duì)所有游戲進(jìn)行維護(hù)或擴(kuò)展。
第二次嘗試- 用我自己的替換主 ino 文件,同時(shí)將 ino 重命名為 mytvgame.cpp 或類似的,我能夠通過一兩個(gè)游戲擺脫這個(gè)問題,但由于一些原因而出現(xiàn)了一些問題。Ino 文件就像一個(gè)全局命名空間,可以按照您喜歡的任何順序定義函數(shù)(就像您在導(dǎo)入的頭文件中指定它們一樣),但是當(dāng)我以編程方式生成頭文件時(shí),我開始遇到更多錯(cuò)誤。這是一個(gè)單一的源文件,一旦它們被復(fù)制到 CPP 文件中,它實(shí)際上就能夠從我的 Arduino INO 文件https://fossil-scm.org/home/doc/trunk/src/makeheaders.html制作標(biāo)題。
第三次嘗試- 實(shí)際上我需要的只是將 setup() 和 loop() 重命名為其他名稱,然后創(chuàng)建自己的啟動(dòng)和循環(huán)方法來調(diào)用它們!
我最近在 Python 上玩得很開心,并決定在其中編寫腳本。首先,瀏覽所有 GAMES 目錄,尋找與文件夾名稱匹配的 a.ino 文件(這是我從未理解的 Arduino IDE 限制,但謝謝!)
找到文件后,請(qǐng)進(jìn)行備份(始終進(jìn)行備份!)。然后復(fù)制到我愿意修改的文件,我運(yùn)行了一些更改

最后,一旦完成所有磨機(jī)更改,它會(huì)使用我的新設(shè)置和循環(huán)創(chuàng)建一個(gè)新的 ino 文件,一旦完成,它就會(huì)調(diào)用重命名的游戲設(shè)置和循環(huán)方法

我的設(shè)置運(yùn)行游戲設(shè)置代碼并為游戲邏輯循環(huán)設(shè)置線程。
我?guī)缀蹩梢栽谶@里做任何我想做的事情,目前它只是嘗試進(jìn)行無線更新,但以后可能會(huì)添加一個(gè) flash 菜單,如果我們有 SD 卡,你可以在設(shè)備上玩多個(gè)游戲
你會(huì)看到循環(huán)只是一種延遲方法。它不需要做任何 gameLogicLoop 線程負(fù)責(zé)運(yùn)行原始循環(huán)代碼的事情。
其中一個(gè)不錯(cuò)的功能是實(shí)際上使其可多次運(yùn)行(有點(diǎn)冪等),因此每次運(yùn)行它時(shí),它都會(huì)修改原始文件而不是已經(jīng)更改的文件,這對(duì)快速迭代有很大幫助。
從這里到哪里
如果您有興趣四處尋找,可以查看我的所有代碼
https://github.com/tonym128/ESP32_Arduboy
這個(gè)項(xiàng)目目前都在 tvout 分支下
我已經(jīng)在 BSides Cape Town 2019 Badge 上運(yùn)行了它,我在這里詳細(xì)介紹了徽章項(xiàng)目本身的軟件。
ESP32 電子紙顯示器
現(xiàn)在有了帶有 PS3 控制器的電視輸出,我認(rèn)為這是最簡(jiǎn)單、最快捷的方式來開始這一點(diǎn)并獲得一些樂趣。
我希你在我的旅程中發(fā)現(xiàn)了一些有趣的地方,如果你想聊聊這方面的任何事情,請(qǐng)給我留言,我很樂意參與。
在那之前,我會(huì)玩一些該死的地下墓穴。
?
- 帶有ESP32的Arduino物聯(lián)網(wǎng)云
- 帶有ESP32和Thingspeak的AGSM
- 帶有英飛凌3D磁傳感器2Go的射頻遙控器
- 樂鑫ESP32-S3_技術(shù)參考手冊(cè)
- 樂鑫ESP32-S3-MINI-1參考設(shè)計(jì)
- 樂鑫ESP32-S3-MINI-1U參考設(shè)計(jì)
- 樂鑫ESP32-S3-WROOM-2參考設(shè)計(jì)
- 樂鑫ESP32-S3-WROOM-1參考設(shè)計(jì)
- 樂鑫ESP32-S3-WROOM-1U參考設(shè)計(jì)
- 基于esp32 PICO D4物聯(lián)網(wǎng)遙控器原理圖 4次下載
- esp32-s3_datasheet
- 帶有BME280的ESP32 Web服務(wù)器的高級(jí)氣象站 18次下載
- 空調(diào)遙控器維修資料下載 18次下載
- PS3官方維修手冊(cè) 201次下載
- PS3游戲手柄 14次下載
- 遙控器解碼器怎么使用 1034次閱讀
- 萬能遙控器的設(shè)置和使用方法 1.5w次閱讀
- 基于ESP32-S3的高性能開發(fā)板介紹 1w次閱讀
- ESP32-C3硬件定時(shí)器簡(jiǎn)介及使用 4899次閱讀
- 如何創(chuàng)建基于MAXQ的“學(xué)習(xí)”遙控器 1072次閱讀
- 遙控器的組成 1.1w次閱讀
- 開發(fā)TV端默認(rèn)界面和視頻播放界面以及手機(jī)遙控端默認(rèn)界面 1791次閱讀
- 如何在ESP32上使用代碼運(yùn)行TensorFlow模型? 4818次閱讀
- 基于一個(gè)micro USB連接器串行IC對(duì)ESP32芯片實(shí)現(xiàn)編程 3301次閱讀
- 基于語音專用芯片UniSpeech和39VF080存儲(chǔ)器實(shí)現(xiàn)DVD/TV遙控器的設(shè)計(jì) 2961次閱讀
- fireflyAIO-3288C主板紅外遙控器簡(jiǎn)介 1715次閱讀
- 同欣智能科技LPRX315遙控器 2041次閱讀
- 一文弄懂工業(yè)無線遙控器是什么 1.4w次閱讀
- 帶你了解遙控器的發(fā)展歷史 1.7w次閱讀
- 一文弄懂無線遙控器 9194次閱讀
下載排行
本周
- 1PC4401_DC-DC 42V反激式隔離開關(guān)電路
- 0.85 MB | 3次下載 | 免費(fèi)
- 2GPRS智能超聲波液位監(jiān)測(cè)終端
- 835.55 KB | 2次下載 | 免費(fèi)
- 3NS4862 500mA鋰電池充放電管理IC中文手冊(cè)
- 2.27 MB | 次下載 | 免費(fèi)
- 4NS4892B藍(lán)牙耳機(jī)充電倉-線性鋰電池充放電管理IC中文手冊(cè)
- 1.79 MB | 次下載 | 免費(fèi)
- 5AIWA HS-JX3000/HS-JX3000D維修手冊(cè)
- 14.78 MB | 次下載 | 10 積分
- 6先鋒CDJ-1000MK3打碟機(jī)圖紙
- 9.79 MB | 次下載 | 10 積分
- 7NS4823雙聲道AB/D類音頻功率放大器(內(nèi)置BOOST升壓)中文手冊(cè)
- 1.26 MB | 次下載 | 免費(fèi)
- 8西門子PLC-模擬量采集計(jì)算使用方法
- 0.07 MB | 次下載 | 2 積分
本月
- 1第十一屆 藍(lán)橋杯 單片機(jī)設(shè)計(jì)與開發(fā)項(xiàng)目 省賽 程序設(shè)計(jì)試題及源碼
- 90.88KB | 23次下載 | 3 積分
- 2NR-E531TX-XN冰箱說明書
- 8.64 MB | 23次下載 | 免費(fèi)
- 3Python從入門到精通背記手冊(cè)
- 18.77 MB | 20次下載 | 1 積分
- 4STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖
- 0.78 MB | 17次下載 | 免費(fèi)
- 5華碩主板架構(gòu)認(rèn)識(shí)
- 1.42 MB | 11次下載 | 免費(fèi)
- 6SX1308應(yīng)用電路圖與SX1308升壓電路圖
- 0.18 MB | 8次下載 | 1 積分
- 7東芝彩色電視機(jī)29SF6C維修說明書
- 4.86 MB | 8次下載 | 1 積分
- 8單電源板1875電路圖
- 0.06 MB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191377次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183336次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81584次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論