wifiboy32 library for Arduino 的設計說明


  • wbo

    wifiboy32 library 打包在此:wifiboy32.zip (version 101317)

    --

    WiFiBoy32 這個有趣的開發板,因為把 WiFi/BT IoT 模組裝上了 LCD 螢幕,再加上幾個按鍵,一個發聲器,就突然變得好玩起來了。

    由於 ESP32 內建的是雙核的 MIPS CPU,以 240Mhz 運行,效能相當足夠,絕對能滿足大多數 IoT 應用的運算需求。

    即使要用來做遊戲,也比當年流行的紅白機或超任快上數百倍,甚至後來的 GBA, NDSL 的運算核心,都沒有 ESP32 快,而且若不論圖形加速晶片的話,連 Playstation 都還略遜 ESP32 一籌。

    WiFiBoy32 有兩個這麼快的 CPU,只是處理一些 WiFi, BT 的通訊協定,運算之餘其實還有很多空檔時間,這些剩餘的超強能力,不用來做些有趣的事就實在太浪費了。

    不過,若要做為一個有趣的遊戲機平台,並不是 CPU 夠強,就能把一切搞定的。

    顯示的部份,沒有圖形加速晶片,而市場上的 SPI LCD driver 的功能也都很陽春,要用於流暢的圖像顯示或遊戲開發,還是需要軟體來精打細算幫些忙的。

    因此,WiFiBoy32 的 LCD 若要求流暢的視覺效果,就必須做一個自己的 wifiboy32 library,把各個繪圖功能與遊戲圖形引擎,都做一遍最佳化的精算。

    比較特別的需求是 SPI LCD 的指令是透過標準 GPIO 來處理,速度非常有限。如果常常透過 GPIO 下指令到 LCD,會是非常慢的。

    全螢幕 240x320 個點的更新,雖然只有 76800 個點,但若每個點都要以 I/O 指令來設定點座標,需要好幾個指令週期,這樣一點一點畫完全螢幕一次,如果以一個點需耗時 20us,就需要 76800 x 0.02ms = 1.536秒以上,用於遊戲,低於 1fps 的畫面,就只能做些比較靜態的應用或遊戲。在 Arduino 玩家中,多數人愛用的 Adafruit Industry 的 LCD 驅動程式,就是要大約 1 秒多才能完成清除一個黑色畫面,根本不敢想像能如何用於遊戲製作。

    我們的解決辦法就是要大量減少與 LCD I/O 的溝通次數,最好是一個畫面更新,只要一次設定,依序把圖像(顏色序列)送上 LCD 的 display ram 就好。

    根據 ESP32 的硬體 SPI 速度設定,最高可以達到 80Mhz,也就是一秒可以送出大約 8000萬個 bit,每個點 16bit color 大約可以送出 8000/16= 500萬點,這樣就可以有 500/7.68 = 65 fps 的畫面更新率了。

    當然這只是理論值,除了一些 I/O 的必要負擔,LCD Driver 接資料能力也要考慮。

    WiFiBoy32 採用的是最好的 SPI LCD Driver,在 80Mhz SPI 速度下,還是常常會有資料漏接的問題。

    所以我們保守以半速 40Mhz 來送資料,平均一個畫面大約需要 0.031 秒來傳送。

    也就是 1 / 0.031 = 32.6 fps。

    這個超過 30fps 的全螢幕更新速度,應該就可以做出流暢的動作遊戲了。

    因為我們採用的 2.4" TFT LCD 畫面,其實還有液晶殘響問題,反應速度也不是很快,以 30fps 來處理畫面,應該是很 OK 的。

    如果再繼續減到 20fps,也就是大約 24.6Mhz 的 SPI 速率,更是已經符合 ESP32 全雙工的硬體 SPI 速率,穩定傳送資料絕對沒問題。

    還有個問題就是不管實測如何威風,在 TFT LCD Driver 的部份,原廠都會在資料手冊上寫到速度限制為 10Mhz 或 20Mhz,也就是說 40Mhz SPI 是不能保證傳輸穩定的。

    但我們做了大量的實測,結果還好,設定為 40Mhz的 SPI 速度,用於連續傳送圖像給 TFT LCD Driver 晶片,大致還是 OK 的。就算偶有一個畫面有小瑕疵,在高速動態中,也不一定看得出來。

    --

    (今日夜深,明日再續,不是只有做好全畫面更新率 30fps 就能做出流暢的遊戲,其中關於遊戲畫面處理的技巧還很多...)

    (我們這個全畫面更新30fps的效果,若用於精算的 3D Rendering,也是足夠做出許多有趣的 Realtime 3D 效果!WiFiBoy.Org 的成員,已經嘗試為 WiFiBoy32 製作 3D 引擎,效果尚稱流暢,只是貼圖記憶體不足,視覺效果大打折扣,還需要新一代的 ESP-WROVER 4MB PSRAM 的版本來支持。)



  • 請問能否提供 WB3218V1 的 wifiboy32 library for Arduino?謝謝!!



看起來你的連線到 WiFiBoy.Club 已經遺失,請稍等一下我們嘗試重新連線。