1.3 Inch LCDをRaspberry Piと接続してRetroPieで使用してみました。
[関連記事]
1.3 inch IPS LCD Display Module
1.3 inch IPS Display Modul |
今までもこの1.3インチLCDは下記サイトを参考によく使用していました。
[参考リンク]
[過去の作例]
Raspberry Pi ZeroやPi 3 Model B+ではOSにStretchを選択すれば特に問題なかったので有難く使わせてもらっていたのですが、Pi 4、Zero2(もってないけど)やBusterのことを踏まえ別の接続方法を模索することにしました。
基本的にはRetroPieの使用用途しか考えていませんので注意して下さい。
raspberry Piとの接続は以前までの機器と互換性を持たせるため、今迄と同じ配置にしました。
GND → PIN20(GND)
VCC → PIN17(3V3:power)
SCL → PIN23(GPIO11:SPI_SCLK)
SDA → PIN19(GPIO10:SPI_MOSI)
RES → PIN13(GPIO27)
DC → PIN22(GPIO25)
BLK → PIN18(GPIO24)
Raspberry Pi 4と接続、RetroPieをSDカードにインストールする。
今回は"retropie-buster-4.7.1-rpi4_400.img.gz"を使用。
※SPIはオンにしない。
※試行の結果を書き留めるだけであり、正しい設定かはわかりません。
fbcp-ili9341をダウンロード
sudo apt-get install cmake
cd ~
git clone https://github.com/juj/fbcp-ili9341.git
cd fbcp-ili9341
display.hを変更(赤字を追記)
sudo vi display.h
#ifndef DISPLAY_SPI_DRIVE_SETTINGS
#define DISPLAY_SPI_DRIVE_SETTINGS (0)
#define DISPLAY_SPI_DRIVE_SETTINGS (1 | BCM2835_SPI0_CS_CPOL | BCM2835_SPI0_CS_CPHA)
#endif
ビルド
mkdir build
cd build
cmake -DSTATISTICS=0 -DST7789VW=ON -DGPIO_TFT_DATA_CONTROL=25 -DGPIO_TFT_RESET_PIN=27 -DGPIO_TFT_BACKLIGHT=24 -DSPI_BUS_CLOCK_DIVISOR=10 -DUSE_DMA_TRANSFERS=OFF ..
make -j
・-DSTATISTICS=0 :オーバーレイ統計の無効
・-DST7789VM=ON :ST7789有効
・-DSPI_BUS_CLOCK_DIVISOR=10 :表示速度の指定(6~30の偶数)
・-DGPIO_TFT_DATA_CONTROL=25 :データ/制御(DC)をGPIO25に
・-DGPIO_TFT_RESET_PIN=27 :リセットをGPIO27に
・-DGPIO_TFT_BACKLIGHT=24 :バックライトラインをGPIO24に
・-DUSE_DMA_TRANSFERS=OFF :DMA転送の無効
※現時点では/boot/config.txtは変更しません
/etc/rc.localに追記
sudo vi /etc/rc.local
sudo /home/pi/fbcp-ili9341/build/fbcp-ili9341 &
exit 0
再起動
sudo reboot
※設定変更時はディレクトリを削除後ビルドから
cd fbcp-ili9341
rm -rf build
標準の表示位置 |
これで画面が表示されたと思います。
画面の回転
画面の表示はできましたが、このままだと画面の向きが使いにくいので回転してみます。
以前Raspberry Pi 4使用時に画面の回転では苦労して、EmulationStation他それぞれ設定を行いなんとか画面を回転させましたがやはり面倒なので出来ればシステムごとの回転を模索しました。
180°回転が必要な場合は"-DDISPLAY_ROTATE_180_DEGREES=ON"をビルドオプションに追記すればいいかと思います。
[過去記事]
fbcp-ili9341にはその機能もあるようなのでそれを活用します。
fbcp-ili9341の機能を使用した場合、外部HDMIとは独立させて回転させることができます。
90°回転(反転前) |
90°回転
config.hを変更
cd fbcp-ili9341
sudo vi config.h
// If defined, rotates the display 180 degrees. This might not rotate the panel scan order though,
// so adding this can cause up to one vsync worth of extra display latency. It is best to avoid this and
// install the display in its natural rotation order, if possible.
//#define DISPLAY_ROTATE_180_DEGREES
// If defined, displays in landscape. Undefine to display in portrait.
//#define DISPLAY_OUTPUT_LANDSCAPE
270°回転
config.hを変更
cd fbcp-ili9341
sudo vi config.h
// If defined, rotates the display 180 degrees. This might not rotate the panel scan order though,
// so adding this can cause up to one vsync worth of extra display latency. It is best to avoid this and
// install the display in its natural rotation order, if possible.
#define DISPLAY_ROTATE_180_DEGREES
// If defined, displays in landscape. Undefine to display in portrait.
//#define DISPLAY_OUTPUT_LANDSCAPE
画面の反転
90°回転(反転後) |
270°回転(反転後) |
画面が鏡像になっている場合は以下の設定を行います。
st7735r.cppを変更
cd fbcp-ili9341
sudo vi st7735r.cpp
#if defined(DISPLAY_FLIP_ORIENTATION_IN_HARDWARE)
madctl |= MADCTL_ROW_COLUMN_EXCHANGE;
#endif
//madctl |= MADCTL_ROW_ADDRESS_ORDER_SWAP;
ここまで設定を行ったらディレクトリを削除後ビルドしてください。
これで思い通りの画面がでましたでしょうか?
コントラストの調整
コントラストを少し調整してみました。
st7735r.cppを変更
sudo vi st7735r.cpp
#ifndef ST7789VW // This is disabled on ST7789VW because it was observed to look visually bad, makes colors a bit too contrasty/deep
//SPI_TRANSFER(0x26/*Gamma Curve Select*/, 0x04/*Gamma curve 3 (2.5x if GS=1, 2.2x otherwise)*/);
#endif
元々2.4 Inch LCDの時とは違いそこまで悪くなかったので、変化がわかりにくいかも?
設定箇所もここではなくバックライトの項目のほうが良かったかもしれませんが、そこはまた後日にでも調べてみたいと思います。
config.txtの変更
ここまでの設定でSPI LCDは使用できるのですが、現在のconfig.txtの設定のままですと外部に接続したHDMIディスプレイに依存されます。
ここままのほうが使い易い場合もありますが、HDMIディスプレイを接続しないとSPI LCDには何も表示されなくなります。
また4:3のディスプレイを接続したら4:3に、16:9のディスプレイを接続したら16:9になると思います(これはある意味メリットかもしれませんが)
16:9のディスプレイを接続 |
このままの設定では使いにくいので設定を変更します。
/boot/config.txtを変更
sudo vi /boot/config.txt
hdmi_group=2
hdmi_mode=87
hdmi_cvt=640 480 60 1 0 0 0
hdmi_force_hotplug=1
"hdmi_cvt=640 480 60 1 0 0 0"の解像度の部分は任意で変更します。
※HDMIディスプレイの可否はディスプレイの仕様によると思います。
hdmi_cvt=240 240 60 1 0 0 0
1.3 inch IPS LCDの解像度が240x240なのでそのまま設定。
・RetroPIEメニューが画面いっぱいにできる
・HDMIディスプレイは映らない
・一部のエミュレーターの設定が必要となる。
hdmi_cvt=640 640 60 1 0 0 0
・RetroPIEメニューが画面いっぱいにできる
・HDMIディスプレイは映るがアスペクト比はおかしくなる。
・一部のエミュレーターの設定が必要となる。
hdmi_cvt=320 240 60 1 0 0 0
・HDMIディスプレイは映らない
hdmi_cvt=640 480 60 1 0 0 0
・HDMIディスプレイが多少ボケる。
と結局用途によると思います。
やはり"dtoverlay=vc4-fkms-v3d"を使用したまま回転できるのは大変楽で良いと感じます。
また自分のやり方が間違っていただけかもしれませんが、今回はKODI(メディアプレイヤー)が使用できるようになりましたので使用目的に幅ができました。
取り敢えずここまでで1.3 inch IPS LCDに表示することはできましたが、組み込み用にオーバースキャン等の設定も試してみたいのですがそれはまた後日に。
リンク
0 件のコメント:
コメントを投稿