GAME with SPRESENSE
SPRESENSE で GAME。 2024.03.24
3.5 inch 480 x 320 LCD と Spresense で ゲーム を動かしました。
費用:2200円。( Spresenseを除く。LCD代は 73% )
LCD Interface は 300円です。
ディスプレーは 3.5inch 480 x 320 LCD with Touchを使用し 見やすいサイズです。
SPRESENSE と LCDの接続は LCD Interface基板を製作しました。
LCD Interface基板は 3.5″ ILI9488, 3.5″ ST7796, 2.8″ ILI9341 に対応しています。
基板の費用は コネクターと Level Shifter を含め 300円です。
LCD Interface基板:Gerber data を公開しました。
Down Load:SPRESENSE LCD V_1_pcbe.zip ( pdf になっています)
DL 又は pdf保存後に[ _-1.pdf ]を削除し[ SPRESENSE LCD V_1_pcbe.zip ]にします。
🔴 Gerber data(zip)を JLCPCBへ発注すれば 低価格 (1枚 110円)で使用できます。
発注時に PCB Thickness (基板の厚み) は 1.0mm にします。
発注の詳細は macsbug ESP32 S3 v2.1 を参照ください。
ケース:Raspberry Pi 3 Case (91x62x31mm) を使用し低価格 (266円)で 綺麗です 。
構成:
LCD Interface , LCD Side | LCD Interface , Spresense Side : 300円 |
上から LCD , LCD Interface , Spresense | Raspberry Pi 3 Case:266円 |
Raspberry Pi 3 Case に装着 | 3.5 inch 480×320 + Spresense |
Raspberry pi 4 Acrylic Case, 3.5″ LCD 520円。 アクリルケースは LCDを固定する ネジ穴4つの 工作のみで使用できます。 |
開発環境:
HARD:Spresense + Arduino 拡張基板
HARD:3.5inch 480×320 ILI9488 SPI LCD XPT2046 Touch
HARD:Spresense LCD Interface ( Gerber data public / macsbug production )
HARD:Raspberry Pi 3 Case
Dev environment : Arduino IDE 2.3.2
Board Manager : arduino-esp32 2.0.14
Library:LovyanGFX 1.1.12
Down Load:
Tetris_ILI9488_Spresense.zip : 3.5 inch ILI9488用
Tetris_ST7796_Spresense.zip : 3.5 inch ST7796用
Tetris_ILI9341_Spresense 2.zip : 2.8 inch ILI9341用
3D_Cube_ILI9488_spresense.zip
3D_Filled_Vector_ILI9488_Spresense.zip:18fps
Maze_generator_ILI9488_Spresense.zip
MovingCircles_ILI9488_Spresense.zip:7fps
Raytrace_ILI9488_Spresense.zip
Resistor_CALC_ILI9488_Spresense.zip
uncannyEyes_ILI9488_Spresense.zip:リアルな目。
Touch_Test_Spresense.zip :タッチ操作のテスト用。
DL 又は pdf保存後に「.pdf」を削除し 「xxx.zip」 にします。
回路図:
1. LCDのVCC(電源)は 5Vdcで Arduino拡張ボードの5Vを使用します。
LCDのVCC(電源)は 5Vdcであることを確認します。(3.3Vの物もある為)
2. LCDのSPI Display接続は Arduino拡張ボードの SPI4を使用します。
3. LCDのSPI Touch接続は MAINボードの SPI5を使用します。
4. Touch信号(3V3)は Level Shifter でレベル変換され SPI5(1V8)に接続。
基板:基板製作の経験ない人も基板を作れます。
Gerber data:SPRESENSE LCD V_1_pcbe.zipを入手します。
DL 又は pdf保存後に「.pdf」を削除し「spresense-lcd-v_1_pcbe.zip」 にします。
JLCPCBの発注方法は macsbug ESP32 S3 V2.1 か ネット記事を参照ください。
部品リスト1: 基本構成。
No. | Nomen Symbol |
Spec Quantity |
Purchase pcs, Price |
Price ¥/1 Set |
1 | SPRESENSE メインボード |
1 pcs | 秋月電子通商 114584 |
6050 |
2 | SPRESENSE 拡張ボード |
1 pcs | 秋月電子通商 114585 |
3850 |
TOTAL | ———- | ———- | 9900 |
部品リスト2: LCD と LCD Interface。
緑色を購入。灰色は参考です。灰色のLevel Shifterは検討が必要です。
費用:2200円。 LCDは 全体の73%で LCD Interface の費用は 300円です。
No. | LCD | Spec Quantity |
Purchase pcs, Price |
Price ¥/1 Set |
1 | ILI9488 , XPT2046 v1.0 , SKU=MPS3520 |
1 pcs | JR E-Shop 輸送期間 = 6 day |
1593 |
1 | ILI9488 , XPT2046 SKU=MPS3520 |
1 pcs | Hong Kong fend tai 輸送期間 = 9 day |
1592 |
1 | ST7796 , XPT2046 | 1 pcs | HEHUI Electronic 輸送期間 = 6 day |
1706 |
2 | LCD Interface |
1 pcs | JLCPCB 5 pcs , $3.46 538円 |
108 |
3 | ロープロファイル ピンヘッダ(低オス) 1×40(40P) 8.5mm For Main Board. 13pin x 2pcs |
1 pcs | 秋月電子通商 102899 1個 ¥40 |
40 |
4 | Level Shifter |
1 pcs | Diy-Modules 5 pcs 318円 |
64 |
4 | Level Shifter | 1 pcs | 秋月電子通商 113837 1個 ¥200 |
200 |
5 | シングルピンソケット (低メス) 1×20 (20P) For LCD. 14pin |
1 pcs | 秋月電子通商 103138 1個 ¥80 |
80 |
6 | ピンヘッダ 1×40 (40P) For Arduino Connector |
2 pcs | 秋月電子通商 100167 1個 ¥35 |
70 |
7 | Raspberry Pi 3 Case |
1 pcs | IC Supers 輸送期間=21 day ( 11 day ) |
266 |
7 | Raspberry pi 4 Acrylic Case, 3.5″ LCD |
1 pcs | DIYzone Store 1個 520円 輸送期間=7 day |
520 |
TOTAL | ———- | 2181 |
LCD:
JR E Shop の LCDは LCDからFlex Cableで Parallel信号も出ています。
Parallel動作をさせる時に Flex Connector で接続する事が出来ます。
RPi 3 Caseに入れる為に 基板工作時(切断)に便利な構造です。
参照:M5Stamp C3 BOX
Hong Kong fend の LCDは LCDから内部でハンダ付けされています。
参照:Use ILI9488 with M5Stack
HEHUI Electronics のST7796 LCD も同様のFlex wire接続です。
ただし Bus Freq_Writeは20MHz までで 表示速度は遅いです。
LCDの種類とLovyanGFXの設定:ILI9488は 複数の種類があります。
LovyanGFX | setup | bus | bus | panel | Touch | |
LCD | size | setRotation | spi_mode | freq_write | invert | offset_rotation |
ILI9488 JR E Shop |
3.5″ | 3 | 0 | 40MHz | false | 0 |
ILI9488 JR E Shop |
3.5″ | 3 | 0 | 40MHz | true | 0 |
ILI9488 v1.0 MSP3520 |
3.5″ | 1 | 0 | 40MHz | false | 6 |
ST7796 v1.1 | 3.5″ | 1 | 3 | 20MHz | true | 6 |
ILI9341 | 2.8″ | 3 | 0 | 40MHz | false | 4 |
Level Shifter:ピン配置は多種ある為に要注意です。
GND:HV GNDとLV GNDは共通で浮いています。
基板のピン配置:🔴 GND, HV, GND, LV の配置を確認してください。
注意:配置の異なる基板や接続は Spresenseを破損する恐れがあります。
異なる配置により破損した場合は 自己責任でお願いします。
参照:レベル変換(6)I2C その1 MOSFET。GNDは共通で浮いています。
Aliexpress EC-Buying ALLは ピン配置が異なり 使用しない事。
秋月電子通商の Level Shifterは 今回の基板配置と異なり 使用しない事。
Aliexpress Diy-Modules |
秋月電子通商 HV,GND, LV,GND は Aliexpressと逆の位置です。GNDは共通です。 左:HV, LVは 逆ですが 電源の位置は問題ありません。 右:GNDが共通の為に 🔴 HV(3V3)とLV(1V8)がSHORTします。 |
部品リスト3:スタンド。
スマホ用ですが 綺麗に乗せられます。LCDにタッチしても位置を保てます。
Aliexpresですが 2回とも3日で届きました。
No. | Nomen Symbol |
Spec Quantity |
Purchase pcs, Price |
Price ¥/1 Set |
1 | Stand |
1 pcs | Mr. A’s mobile phone accessories 1個 684円 輸送期間 3 day |
684 |
工作:
LCD基板:
Raspberry Pi 3 Case (91x62x31mm)に入れる為に加工します。
Raspberry Pi 3用のLCDは 高さのあるコネクターを使用していますので
SPRESENSEは入りません。
コネクタ:1 か 2 の方法があります。
1. ピン先を切る方法:
先端のバリ取りは必要ですが簡単でピンヘッダ交換不要です。
2. 高さ 8.5mmのピンヘッダを取り付けます。隙間のない長さが重要です。
交換:
ピンを一つづつ取り除き ロープロファイルピンヘッダ(低オス)をハンダ付け。
3.5inch LCDは ケースにピッタリ入ります。
LCD基板は長い為に 分解し SD SLOT側を切断します。
注意:スルーホールを痛めない事とLCDのガラスは割れ易い為に注意です。
LCD Interface:
1. 低メスシングルピンソケットを LCDコネクター部(右)へ取り付けます。
2. オスピンヘッダを Arduinoコネクター部と Main Board部へ取り付けます。
Main Boad部は Arduino側より低く 短いピン(8.5mm)を使用します。
🔴 注意:ピンヘッダは 垂直に取り付ける必要があります。
少しでも斜めになると SPRESENSE側のメスピンに正しく装着されず
SPRESENSE側のメスピンを曲げる事になります。
ハンダ付け前に SPRESENSEと接続し 位置極めをするのも手です。
そのままハンダ付けをすると コネクターのプラスチック部分が
溶けて溶着する場合があります。
完成後の装着時は 垂直に接続します。斜めに装着しますと
SPRESENSE側のピンが曲がり 入らなくなります。
3. Level Shiter基板を LCD IntaerfaceのSPRESENSE側へ取り付けます。
🔴 注意:逆向きに付けると1V8と3V3の電源がショートします・
LCD Interface基板とLevel Shift のスルーホールにハンダで埋めてから
基板を重ねハンダ付けします。GNDはハンダ付け不用で位置決めに使用します。
2.8 inch 320 x 240 ILI9341 + Spresense 版の製作:
画面が小さい為に ボタンの位置は 背景画像に重ねています。
2.8 inch 320 x 240 ILI9341 + Spresense |
LCDと接続方式: SPI接続とParallel接続について。
Arduino MEGAやDUEでは 既に 8bit/16bit Parallelのdisplayが動作しています。
2023から2024年にかけて ESP32界隈でのLCD は 8bit Parallel 接続の時代へ。
TTGO や MakerFabsは 8bit Parallel を採用しています。
Libraryは LovyanGFXを採用しています。
最速の経験は Making a board of ST7789 8bit Parallel Display です。
MovingCirclesで 115 fps を達成しています。
3D Filled Vector Ext では
Super M5Stack 16bit Parallel:146fps。
ESP32 S3 + ST7789 8bit Parallel :100fps を達成しています。
Spresens + SPI ILI9488 は 18fps です。SPIは 遅すぎます。
SpresenseとLCD:
LCDは 4inch 800×480 16bit Parallel LCD を希望ですが まだ その環境では無いです。
理由は Parallel接続の Libraryが無い為です。
Library開発に費用をかけても Parallelの効果は大きいです。
LovyanGFXでの Spresense Parallel 対応を期待しています。
SpresenseとSD:JPG , PNGを直接操作できません。2024.03現在。
LovyanGFXの SD操作は SDFat , JPG , PNG の対応が可能です。
つまり SD内の JPG , PNGデーターを LCDに容易に表示できます。
それは 以下の命令でできます。
lcd.drawJpgFile(SD,file,x,y); // JPG
lcd.drawPngFile(SD,file,x,y); // PNG
SDを指定し SD内の File(JPG,PNG)を x,y に表示します。
この命令が無いと JPGDecode Libraryが必要になり複雑になります。
速度:
TFT_Graphicstest_PDQで速度を計測し グラフは 短い方が速い事を示しています。
Display Library には AdafuritGFX , TFT-eSPI , LovyanGFX があります。
Adafurit-GFX は TFT-eSPI より遅く TFT-eSPI は LovyanGFX の1/2で遅いです。
結果 Adafurit-GFX は 大変遅く LovyanGFX をお勧めします。
参照:LCD and ESP32 speeds with LovyanGFX
Spresenseと ILI9488 , ST7796 , ILI9341 の速度を計測しました。
ILI9488 は bus freq_write = 40000000; で動作。( Max 40MHz )
ST7796 は bus freq_write = 20000000; で動作。( Max 20MHz )
結果 ILI9488 の方が速度は 速いです。
ILI9341 は bus freq_write = 40000000; で動作。( Max 40MHz )
ILI9488 を 320×240 サイズで測定。
16bit Parallel, 8bit Parallel, SPI の比較。
SPI:これまでの 比較で ILI9486 は 一番遅い Driver です。
ILI9488 SPI + Spresense は ILI9486 よりは速いですが 他より遅いです。
ILI9341 SPI + Spresense は M5Stack より遅いです。
結論:Spresense は SPI接続で ESP32 より遅いです。
対策:8bit 又は 16bit Parallel接続が必要です。
感想:
初めての SPRESENSEです。
見やすい 3.5inch 480×320 SPI LCD+Touchをを選択。
本家には Touchの接続方法や具体例は見つかりませんでした。
SPIは 低速ですが 高速なParallel接続の Libraryは無く 現状の選択です。
SPIは ESP32 Parallel 8bit と比較し Graphic表示で6倍遅いです。
3D_Filled_Vectorは 18fps , MovingCirclesは 7fps と遅いです。
SPRESENSEでは 我慢しかありません。
ケースは Raspberry Pi 3 Case (91x62x31 mm)(266円)を使用し ピッタリ収まります。
.
Spresense . LovyanGFX , Raspberry Pi 3 Case , SPI ,
コメントを残す