macsbug

GAME with SPRESENSE

leave a comment »

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 ,

Written by macsbug

3月 24, 2024 @ 2:08 pm

カテゴリー: SPRESENSE

コメントを残す