1:12 ASTRO CITY + PI
看到網路有神人將1:12的ASTRO CITY


弄成了像真的機台一樣 ,
自己也想來試看看 , 如下影片
由於模型的螢幕大概就是2吋左右,
所以打算用2.2吋TFT + RetroPie來實現功能 .
會遇到的問題 :
1.Pi 驅動2.2吋TFT .(花了我很多時間...YouTube一堆影片 , 但沒人有詳細說明)
2.如何將螢幕塞進去模型內
先從接線開始:
我買的是ILI9341 2.2吋 , 我覺得很便宜 NT.220左右 .
但是這款邊太大了 Orz 所以完全不懂電路版的我 , 稍微研究一 下那SD卡的部分 ,
判斷應該沒影響 , 所以大膽的把那一半切了 .
然後稍微拉個排線角度 , 就可以塞進模型內 .
焊接厲害的的人可以把排線焊長一點 , 也許就不用這麼辛苦了 .
弄完大概是這樣 , 由於面板左右不是很對稱 , 會差一點點 , 可能要在驅動上去調教了 .
接下來是接線的部分 ,
參考了很多網路的文章 ,
早期大家都是用git上 https://github.com/notro/fbtft這個專案 ,
來解決驅動SPI TFT的問題 . 但現在FBTFT Driver已經含在kernel裡面了 ,
但接線還是個問題 ,
這片TFT有SDO(MISO) , LED , SCK , SDI(MOSI) , D/C , RESET , CS , GND , VCC
幾個SPI跟電源(3.3V)好接 , 直接就對應Pi 上那幾個位置就好了
但是有幾條要接到GPIO的就頭痛了 ...
後來直接去看 kernal 的
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/tree/drivers/staging/fbtft/fbtft_device.c?h=staging-testing
https://git.kernel.org/cgit/linux/kernel/git/gregkh/staging.git/tree/drivers/staging/fbtft/fbtft_device.c?h=staging-testing
.name = "adafruit22a",
.spi = &(struct spi_board_info) {
.modalias = "fb_ili9340",
.max_speed_hz = 32000000,
.mode = SPI_MODE_0,
.platform_data = &(struct fbtft_platform_data) {
.display = {
.buswidth = 8,
.backlight = 1,
},
.bgr = true,
.gpios = (const struct fbtft_gpio []) {
{ "reset", 25 },
{ "dc", 24 },
{ "led", 18 },
{},
},
}
}
其中一段內容大概是這樣 , 所以就很明顯了 .
Reset接GPIO 25 , D/C接GPIO 24 , LED接GPIO 18
為何是選adafrut22a ? 因為網路上有人回答要用這個 , 雖然是ili9340(說實在我不知道9340跟9341有啥差別 , 還沒去研究) 裡面也有ili9341 name是rpi-disply 我沒試過 .
總之如果你有TFT要驅動 , 可以去看fbtft_driver.c , 去找到對應的 name也好 , modalias也好 ,
接線就參考gpios那一段 .
最後接線是這樣
SDO(MISO) ->Pin21(SPI_MISO) 應該是可以不用接給SD用的
LED -> Pin 12(GPIO 18)
SCK -> Pin 23(SPI_SCLK)
SDI(MOSI) -> Pin 19(SPI_MOSI)
D/C -> Pin18(GPIO 24)
RESET ->Pin 22(GPIO 25)
CS -> Pin 24(SPI_CE0)
GND -> Pin 6
VCC -> Pin 1
接完以後記得要啟動SPI , 我是到raspi-config去設定的 .
這時啟動RetroPie , TFT是還不會驅動的 .
進到console , 不管你是先退出ES 或是ssh連網進去都可
鍵入
sudo modprobe fbtft_device name=adafruit22a rotate=270 fps=60 (關機就會消失)
按下enter後 TFT螢幕會亮起 , 應該就是成功了 , 也可以dmesg|grep spi* 會出現一些資料
這時候鍵入ls /dev/fb*
應該會看到 /dev/fb0跟 /dev/fb1
fb0就是外接的hdmi
fb1就是接的tft
之後鍵入con2fbmap 1 1
就可看到console在TFT上出現了 , 恭喜完成一半 !!!
如果中間有問題 .
可能會需要做
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
來更新kernel支援fbtft
接下來就是如何讓ES出現在TFT上
原來我天真以為用FRAMEBUFFER=/dev/fb1 emulationstation可以啟動在TFT上 , 我錯了 .
後來想起之前用過的一個git專案(又一神人)
https://github.com/tasanakorn/rpi-fbcp
可以將fb0同步顯示在fb1
安裝步驟如下:
就可同步顯示 hdmi跟ES , 恭喜完成3/4
接下來就是如何啟動Pi後直接讓TFT顯示RetroPie來玩遊戲了
一樣參考notro的專案
sudo nano /etc/modules-load.d/fbtft.conf
內容如下 :
spi-bcm2835
fbtft_device
存檔
sudo nano /etc/modprobe.d/fbtft.conf
內容如下 :
options fbtft_device name=adafruit22a rotate=270 fps=60
存檔
上面fbtft_device的參數 可以視不同情況調整
(我有想過買2.4或是2.8直立調整rotate , 也許可以不用切PCB板)
到這裡可以reboot , 如果TFT有直接亮起就對了!
接下來的步驟就是啟動時利用fbcp將畫面同步顯示 ,
由於我是用5吋HDMI , 解析度是800x480
但TFT是320x240
所以這裡用了一個技巧
sudo nano /boot/config.txt
內容:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt=320 240 60 6 0 0 0
存檔(如果只是5吋HDMI 可以是hdmi_cvt=800 480 60 6 0 0 0)
這時要注意 , reboot後HDMI顯示可能會怪怪的 .
建議用ssh遠端登入 .
然後
sudo nano /etc/rc.local
加入
/usr/local/bin/fbcp &
存檔
原理就是
先掛載fbtft driver ->設定fb0的解析度固定為320x240 ->透過fbcp 將fb0畫面顯示在fb1上
reboot後應該可成功看到TFT直接進入RetroPie , 可以傷眼玩遊戲了!!!
接線就參考gpios那一段 .
最後接線是這樣
SDO(MISO) ->Pin21(SPI_MISO) 應該是可以不用接給SD用的
LED -> Pin 12(GPIO 18)
SCK -> Pin 23(SPI_SCLK)
SDI(MOSI) -> Pin 19(SPI_MOSI)
D/C -> Pin18(GPIO 24)
RESET ->Pin 22(GPIO 25)
CS -> Pin 24(SPI_CE0)
GND -> Pin 6
VCC -> Pin 1
接完以後記得要啟動SPI , 我是到raspi-config去設定的 .
這時啟動RetroPie , TFT是還不會驅動的 .
進到console , 不管你是先退出ES 或是ssh連網進去都可
鍵入
sudo modprobe fbtft_device name=adafruit22a rotate=270 fps=60 (關機就會消失)
按下enter後 TFT螢幕會亮起 , 應該就是成功了 , 也可以dmesg|grep spi* 會出現一些資料
這時候鍵入ls /dev/fb*
應該會看到 /dev/fb0跟 /dev/fb1
fb0就是外接的hdmi
fb1就是接的tft
之後鍵入con2fbmap 1 1
就可看到console在TFT上出現了 , 恭喜完成一半 !!!
如果中間有問題 .
可能會需要做
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
來更新kernel支援fbtft
接下來就是如何讓ES出現在TFT上
原來我天真以為用FRAMEBUFFER=/dev/fb1 emulationstation可以啟動在TFT上 , 我錯了 .
後來想起之前用過的一個git專案(又一神人)
https://github.com/tasanakorn/rpi-fbcp
可以將fb0同步顯示在fb1
安裝步驟如下:
sudo apt-get install cmake
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp
這時鍵入 fbcp &就可同步顯示 hdmi跟ES , 恭喜完成3/4
接下來就是如何啟動Pi後直接讓TFT顯示RetroPie來玩遊戲了
一樣參考notro的專案
sudo nano /etc/modules-load.d/fbtft.conf
內容如下 :
spi-bcm2835
fbtft_device
存檔
sudo nano /etc/modprobe.d/fbtft.conf
內容如下 :
options fbtft_device name=adafruit22a rotate=270 fps=60
存檔
上面fbtft_device的參數 可以視不同情況調整
(我有想過買2.4或是2.8直立調整rotate , 也許可以不用切PCB板)
到這裡可以reboot , 如果TFT有直接亮起就對了!
接下來的步驟就是啟動時利用fbcp將畫面同步顯示 ,
由於我是用5吋HDMI , 解析度是800x480
但TFT是320x240
所以這裡用了一個技巧
sudo nano /boot/config.txt
內容:
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt=320 240 60 6 0 0 0
存檔(如果只是5吋HDMI 可以是hdmi_cvt=800 480 60 6 0 0 0)
這時要注意 , reboot後HDMI顯示可能會怪怪的 .
建議用ssh遠端登入 .
然後
sudo nano /etc/rc.local
加入
/usr/local/bin/fbcp &
存檔
原理就是
先掛載fbtft driver ->設定fb0的解析度固定為320x240 ->透過fbcp 將fb0畫面顯示在fb1上
reboot後應該可成功看到TFT直接進入RetroPie , 可以傷眼玩遊戲了!!!
還沒有實際的成品 .(接下來的步驟都不難 , 就是拉線組裝而已)
因為怕忘記驅動TFT的步驟忘記了 ,
先弄個紀錄 .
困難的都解決了 ,
其它慢慢弄...
全篇仰賴網路上一堆神人 ,
我只是兜起來而已 XD
全篇仰賴網路上一堆神人 ,
我只是兜起來而已 XD
理論上 , Astro City模型裡面的空間 , 可以塞進去2.2 TFT螢幕 , Pi Zero, 小喇叭 ,
所以只要插上電跟GamePad就可以玩了 ,
Pi Zero沒有音源 .可以參考
https://learn.adafruit.com/introducing-the-raspberry-pi-zero/audio-outputs
https://learn.adafruit.com/adding-basic-audio-ouput-to-raspberry-pi-zero/pi-zero-pwm-audio
來實現Pi Zero Audio .
但我手邊沒有Pi Zero . 覺得還是太貴 , 為何說好5美元的東西 , 看到最便宜要NT.600 ...
我無法接受...
參考
http://marcosgildavid.blogspot.tw/2014/02/getting-ili9341-spi-screen-working-on.html
https://github.com/notro/fbtft/wiki#make-it-permanent-debian-jessie-arch-linux-systemd
https://github.com/tasanakorn/rpi-fbcp
https://learn.adafruit.com/introducing-the-raspberry-pi-zero/audio-outputs
....
族繁不及備載
參考
http://marcosgildavid.blogspot.tw/2014/02/getting-ili9341-spi-screen-working-on.html
https://github.com/notro/fbtft/wiki#make-it-permanent-debian-jessie-arch-linux-systemd
https://github.com/tasanakorn/rpi-fbcp
https://learn.adafruit.com/introducing-the-raspberry-pi-zero/audio-outputs
....
族繁不及備載
留言