資料介紹
描述
目標
我著手做一個簡單而省力的 Arduboy 游戲機。設計目標是
- 便宜又簡單
- 電視輸出
- 不錯的控件
- 各種有趣的游戲
我現在對使用 ESP32 和 Arduboy 代碼感到很自在,并認為這將是一個有趣的項目,可以推動自己學習一些新事物。
將目標一一確定
便宜又簡單
KISS - 保持簡單愚蠢。
幾乎唯一要購買的大產品就是這個
TTGO T-Display ESP32,這個板實際上比我買它時很多沒有顯示器的板便宜,但幾乎任何 ESP32 板都可以。
我一直在不斷地構建控件,這一次我希望我可以利用 ESP32 中的一些額外硬件來實現這一目的。我選擇了 PS3 控制器,任何無線通用 PS3 控制器都應該是完美的。
你還需要一些 RCA 插孔,我選擇了母頭,這樣我就可以在電視和我的電腦之間快速輕松地來回運行,還需要一根公對公延長線,以便將背面也插入電視。 .. 最終我確實得到了一個 RCA 到 HDMI 轉換器并將它連接到我的第二臺顯示器,我對設備非常滿意,并且在閃爍和測試之間的周轉時間更少。
電視輸出
電視輸出是我真正想了解更多的第一個也是最重要的事情。
我啟動并運行了它,看到我從裸 ESP32 發送到電視的一些實際視頻信號真的很酷。
未修改的代碼存在一些問題,它實際上是為帶有 PSRAM 的 ESP32 設計的,它將通常可用的 520kb 增加了另外 8mb!
問題是做顏色會占用大量空間,并且對于庫和它的工作方式,它有非常嚴格的時間要求,所以你實際上使用了一個雙緩沖區,這意味著當你繪制一個緩沖區(屏幕)時,您致力于更新另一個緩沖區。在完成對一個緩沖區的渲染時,將其換出,然后顯示該緩沖區,然后開始繪制到備用緩沖區。這允許您在游戲處理下一幀時將一個緩沖區連續渲染到電視。
通過從彩色轉換為黑白,我繞過了我所面臨的大小限制,這使緩沖區從一個字節縮小了 8 倍......所以我們又回到了游戲中:)
生成電視信號的另一個有趣問題是,它需要滿足非常嚴格的時序約束,而 ESP32 有 2 個內核,我通過將其中一個內核專門用于電視信號來解決這個問題。
我本可以走另一條路,得到一個帶有 PSRAM 的 ESP32,大多數相機模塊都有它們,因為它們經常咀嚼超過 520kb,盡管回到我最初的廉價和簡單的目標,即沒有額外內存的“裸”ESP32更容易掌握。
不錯的控件
我最初的選擇是使用藍牙,它實現了我的一些目標,它很好的控制,硬件內置在 ESP32 中(雖然需要一些軟件黑客),而且因為我們正在做電視輸出,所以它'當我們玩的時候,會給我們一些范圍來打沙發。
我碰巧有一個廢棄的 PS3 和 2 個控制器,所以在弄亂了一些原始的藍牙外圍設備之后,我決定看看使用這些。
PS3 控制器幾乎是一個令人著迷的案例,從技術上講,它使用藍牙,但通過序列號有一個自定義配對過程。
我將我的 PS3 控制器連接到我的 PC 并使用 SixAxisPair 工具將其序列號設置為 01:02:03:04:05:06(我知道非常原始!)
我從這里得到了這個網站,這似乎是合法的....
使用 Wifi 和藍牙啟動 ESP32 項目時要注意的一件事是庫非常龐大!你炸掉大約 1Mb 的 ROM 只是為了獲得 BT 和 Wifi 堆棧,我相信有更輕的可用,但不是我可以使用 Arduino。
完成此操作后,我的輸入和輸出開始工作了!
現在我的游戲在哪里!
各種各樣的游戲
到目前為止,Arduboy 已經給我帶來了一個有趣的世界,它是我放在面包板上的第一個真正的硬件,然后焊接到原型板上并構建了我自己的 ESP32 版本,最后現在制作了一個電視輸出版本。我對我在這個生態系統中和周圍的樂趣感到非常滿意。我什至構建了一款令我引以為豪的游戲 Game Plug ArduRacer https://community.arduboy.com/t/arduracer-a-trackmania-type-time-trial-game/8850 ,它具有平滑滾動、放大功能起跑線和 10 個關卡為特色!
一個早期的控制臺原型(錯誤的芯片,但我保證我有一個非常相似的帶有按鈕的 Arduino Pro Micro)。
啟動和運行它的實際過程非常有趣。
最初我嘗試使用 Blinky 先生的圖書館
https://github.com/MrBlinky/Arduboy-homemade-package
這很棒,并且在不同的屏幕上為許多不同類型的 Arduboy 和 Arduino 的不同引腳做了訣竅。經過一堆錯誤的開始后,我找到了 ESPBoy https://www.espboy.com/的 ESP8266 轉換
一旦我抓住了這個,我做的第一件事就是讓它在它所構建的硬件上啟動并運行,所以我抓住了一個 ESP8266、一個兼容的屏幕和面包板,一直在研究它,直到我啟動并運行它(并且然后玩了一會兒游戲)
完成此操作后,接下來的步驟是更換處理器,進行了很多更改,但主要是刪除和更改庫。我將列出一些亮點
- PROGMEM 不是 ESP32 上的東西,刪除引用
- avr/pgmspace.h 已移至 ESP32 上的 pgmspace.h
- EEPROM不是很好,必須工作
- 音調不起作用,不得不重新編寫代碼,它仍然有點hacky
- 更改控件以使用 PS3 控制器
- 將輸出代碼大幅更改為線程化并輸出到電視
- 因為需要線程,我不得不修改每個游戲的代碼!
PROGMEM - 這有點簡單,你需要做的就是#define PROGMEM 沒有任何意義,等 viola,完成
avr/pgmspace.h - 我有點懶,在 Visual Studio Code 中對整個文件夾進行了完整的搜索和替換,這很快就解決了這個問題
Tones - 我寫了一些非常適用于詛咒地下墓穴的 hacky 代碼,我喜歡它!不幸的是,其他一些游戲也在為此苦苦掙扎……我應該稍后再研究一下
EEPROM - 我在游戲過程中運行良好,可以存儲它,但實際上它需要一個完整的實現,我希望它知道哪個游戲正在運行并將 EEPROM 文件存儲在 SPIFFS 分區上,這更像文件系統并允許文件,可能是與游戲名稱匹配的格式,并將特定游戲 EEPROM 存儲在 SPIFFS 上的文件中,因此它永遠不會被覆蓋。待定
PS3 控制器連接- PS3 庫實際上有一個經常運行的通知檢查,我只是將它的值存儲在一些全局變量中,然后我可以在 Arduboy2Core::buttonsState 過程中使用它來設置值。
電視輸出- Arduboy 有它自己的幀緩沖區,理想情況下我會使用它來避免代碼重復和復制,但它的水平條紋格式有點奇怪。緩沖區模仿您一次寫入幾個水平像素的屏幕的方式,這使得我的電視輸出代碼很難使用,所以我有一個過程,我把它放入 Arduboy 輸出代碼中,而不是輸出到屏幕,它準備緩沖區并使用鎖處理緩沖區的交換。有一個線程一直在運行,只是使用當前設置的輸出緩沖區進行 TV 輸出,當它們準備好時,它將獲取更改。
修改每個游戲的代碼- 這實際上非常有趣,因為它意味著源代碼兼容我想找到一種修改每個 Arduboy 游戲的方法,我研究了很多解決方案。但讓我先設置前提。
我需要為線程添加初始化代碼,電視輸出代碼對于它生成的 NTSC 信號非常敏感,所以我希望它本身有一個完整的核心。默認情況下,Wifi 和藍牙代碼也在默認使用的一個核心上運行。這對電視輸出來說是有問題的,所以我希望它在不同的核心上。
第一次嘗試- 手動修改游戲這是一件很痛苦的事情,并且不能對所有游戲進行維護或擴展。
第二次嘗試- 用我自己的替換主 ino 文件,同時將 ino 重命名為 mytvgame.cpp 或類似的,我能夠通過一兩個游戲擺脫這個問題,但由于一些原因而出現了一些問題。Ino 文件就像一個全局命名空間,可以按照您喜歡的任何順序定義函數(就像您在導入的頭文件中指定它們一樣),但是當我以編程方式生成頭文件時,我開始遇到更多錯誤。這是一個單一的源文件,一旦它們被復制到 CPP 文件中,它實際上就能夠從我的 Arduino INO 文件https://fossil-scm.org/home/doc/trunk/src/makeheaders.html制作標題。
第三次嘗試- 實際上我需要的只是將 setup() 和 loop() 重命名為其他名稱,然后創建自己的啟動和循環方法來調用它們!
我最近在 Python 上玩得很開心,并決定在其中編寫腳本。首先,瀏覽所有 GAMES 目錄,尋找與文件夾名稱匹配的 a.ino 文件(這是我從未理解的 Arduino IDE 限制,但謝謝!)
找到文件后,請進行備份(始終進行備份!)。然后復制到我愿意修改的文件,我運行了一些更改
最后,一旦完成所有磨機更改,它會使用我的新設置和循環創建一個新的 ino 文件,一旦完成,它就會調用重命名的游戲設置和循環方法
我的設置運行游戲設置代碼并為游戲邏輯循環設置線程。
我幾乎可以在這里做任何我想做的事情,目前它只是嘗試進行無線更新,但以后可能會添加一個 flash 菜單,如果我們有 SD 卡,你可以在設備上玩多個游戲
你會看到循環只是一種延遲方法。它不需要做任何 gameLogicLoop 線程負責運行原始循環代碼的事情。
其中一個不錯的功能是實際上使其可多次運行(有點冪等),因此每次運行它時,它都會修改原始文件而不是已經更改的文件,這對快速迭代有很大幫助。
從這里到哪里
如果您有興趣四處尋找,可以查看我的所有代碼
https://github.com/tonym128/ESP32_Arduboy
這個項目目前都在 tvout 分支下
我已經在 BSides Cape Town 2019 Badge 上運行了它,我在這里詳細介紹了徽章項目本身的軟件。
ESP32 電子紙顯示器
現在有了帶有 PS3 控制器的電視輸出,我認為這是最簡單、最快捷的方式來開始這一點并獲得一些樂趣。
我希你在我的旅程中發現了一些有趣的地方,如果你想聊聊這方面的任何事情,請給我留言,我很樂意參與。
在那之前,我會玩一些該死的地下墓穴。
?
- 帶有ESP32的Arduino物聯網云
- 帶有ESP32和Thingspeak的AGSM
- 帶有英飛凌3D磁傳感器2Go的射頻遙控器
- 樂鑫ESP32-S3_技術參考手冊
- 樂鑫ESP32-S3-MINI-1參考設計
- 樂鑫ESP32-S3-MINI-1U參考設計
- 樂鑫ESP32-S3-WROOM-2參考設計
- 樂鑫ESP32-S3-WROOM-1參考設計
- 樂鑫ESP32-S3-WROOM-1U參考設計
- 基于esp32 PICO D4物聯網遙控器原理圖 4次下載
- esp32-s3_datasheet
- 帶有BME280的ESP32 Web服務器的高級氣象站 18次下載
- 空調遙控器維修資料下載 18次下載
- PS3官方維修手冊 197次下載
- PS3游戲手柄 14次下載
- 萬能遙控器的設置和使用方法 1.2w次閱讀
- 基于ESP32-S3的高性能開發板介紹 8718次閱讀
- ESP32-C3硬件定時器簡介及使用 4255次閱讀
- 如何創建基于MAXQ的“學習”遙控器 922次閱讀
- 遙控器的組成 9432次閱讀
- 開發TV端默認界面和視頻播放界面以及手機遙控端默認界面 1586次閱讀
- 如何在ESP32上使用代碼運行TensorFlow模型? 4526次閱讀
- 基于一個micro USB連接器串行IC對ESP32芯片實現編程 3063次閱讀
- 基于語音專用芯片UniSpeech和39VF080存儲器實現DVD/TV遙控器的設計 2791次閱讀
- fireflyAIO-3288J紅外遙控器介紹 1617次閱讀
- fireflyAIO-3288C主板紅外遙控器簡介 1567次閱讀
- 同欣智能科技LPRX315遙控器 1885次閱讀
- 一文弄懂工業無線遙控器是什么 1.4w次閱讀
- 帶你了解遙控器的發展歷史 1.6w次閱讀
- 一文弄懂無線遙控器 8883次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多