niedziela, 5 czerwca 2016

Raspberry Pi i ILI9341



Dzisiaj chciałbym przedstawić jak uruchomić wyświetlacz ze sterownikiem ILI9341 na Raspberry Pi. Powstało to pod wpływem artykułu z Majsterkowa: link – stwierdziłem, że to mega prosta sprawa i w 5 krokach uda się to zrobić… w 5 krokach… po 5 godzinach, kilku instalacji systemu w końcu udało się to ładnie zrobić.

 

Postanowiłem więc napisać swoją wersję tego poradnika. Dla 100% pewności wszystko zostało powtórzone na czystej wersji systemu, ponieważ autor zapewne miał już na systemie zrobione kilka rzeczy, które są niezbędne do odpalenia wyświetlacza, a nie był tego świadomy. Szczerze już zdążyłem się przyzwyczaić, że większość poradników nie działa na 100% i trzeba korzystać z kilku jednocześnie. Więc do działa!



Oczywiście pierwszą rzeczą jest przygotowanie karty SD z systemem. Ja używam Jessie z dnia 18.03.2016r.
Na nowym systemie pierwszym punktem jest powiększenie używanej partycji. W konsoli wpisujemy:

$ sudo raspi-config

I wybieramy opcję „1: Expand Filesystem”, prze okazji możemy wejść w „advanced options” i uruchomić SPI ( o tym nie było info w bazowym poradniku, a bez tego otrzymujemy błąd przy próbie odpalenia wyświetlacza ). Robimy reboot systemu.
Teraz kolejna standardowa operacja – aktualizacja wszystkiego za pomocą komendy:

$ sudo apt-get update && sudo apt-get upgrade

Może to potrwać dość długo – u mnie około godziny. Po tym wszystkim nie zaszkodzi reboot systemu.
Mamy dopiero „bazę” naszego systemu, polecam tutaj zrobić sobie kopię systemu na komputerze, gdyby coś poszło nie tak nie będziemy czekać na ponowną aktualizację itp.
Teraz podłączmy wyświetlacz do naszego raspberry – tutaj odeślę was do Majsterkowa: link- nie będę kopiował tego bezpośrednio.
Teraz, aby sprawdzić poprawność podłączenia wpisujemy:

$ sudo modprobe fbtft_device custom name=fb_ili9341  gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1

Jeśli wcześniej nie uruchomiliśmy SPI wyskoczy nam błąd, jeśli wszystko zrobiliśmy dobrze wyświetlacz powinien się zapalić. Teraz teoretycznie po komendzie:

$ sudo FRAMEBUFFER=/dev/fb1 startx

Powinniśmy zobaczyć nasz ekran, niestety u mnie pojawia się błąd:


modprobe: FATAL: Module g2d_23 not found
I na tym wszystko się blokuje. Jednak możemy łatwo sprawdzić, czy wyświetlacz cokolwiek wyświetla wpisując randomowe dane do jego bufora za pomocą:



$ cat /dev/urandom > /dev/fb1


Na wyświetlaczu zobaczymy wtedy takie coś:




No to teraz działamy dalej. W jaki sposób przechwycić dane z głównego ekranu na nasz – będzie do tego potrzebny programik o nazwie fbcp. Jego instalacja przebiega następująco:
 



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
Następnie uruchamiamy go:
$ fbcp &
 
Teraz powinniśmy zobaczyć ekran system na wyświetlaczyku:



Możemy już pograc w minecrafta:




Ok, teraz kwestia jak zrobić, żeby wszystko uruchamiało się ze startem systemu. Nie wiem czemu u mnie opcja z dodaniem info do pliku /etc/modules/ nie zadziałała. Dodatkowo pozostaje jeszcze kwestia autologowania (bez tego nie uruchomi się pulpit) i automatycznego wystartowania zarówno wyświetlacza jaki i fbcp. Do tego celu dodamy odpowiednie linijki w pliku rc.local.
$sudo nano /etc/rc.local
Przed linijką „exit 0” dopisujemy:
Sudo modprobe fbtft_device custom name=fb_ili9341  gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1
su -l pi -c startx
fbcp &
Teraz jeszcze załatwienie kwestii autologowania (bez tego na ekranie zobaczymy dopiero cokolwiek, gdy zalogujemy się np. przez ssh)
$ sudo nano /etc/inittab
 
I w pliku dopisujemy:
 
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1

I to już koniec :)
 
UWAGA: 
Dla retropie robimy troszke inaczej w pliku rc.local:
sudo modprobe fbtft_device custom name=fb_ili9341  gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1
sleep 1
fbcp &

2 komentarze:

  1. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
    Odpowiedzi
    1. tak - ten można śmiało podmienić

      Usuń