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 &
 
Edit:
Na nettigo jest także świeży wpis na ten temat: https://starter-kit.nettigo.pl/2018/12/wyswietlacz-lcd-dla-raspberry-pi-niskim-kosztem/ 

17 komentarzy:

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

    OdpowiedzUsuń
  2. jak ustawić rozdzielczość 240x320 ? Bo najmniejsza w ustawieniach to 640x480, przez co na ekran jest słabo czytelny.

    OdpowiedzUsuń
  3. powinno sie samo dostosować - pewnie w "fbtft_device custom name=fb_ili9341" zapisane są ustawienia rozdzielczości

    OdpowiedzUsuń
  4. no właśnie u mnie się nie chce dostosować. zmienialem rozdzielczość w pliku config.txt i dalej bez skutku.

    OdpowiedzUsuń
    Odpowiedzi
    1. ale masz jakoś przycięty ekran,fragment, czy jak? Na pierwszym screenie jest mój pulpit po wgraniu - podobnie wygląda?

      Usuń
    2. owszem, wygląda podobnie. ale czy nie powinien być taki jak tutaj?
      https://www.youtube.com/watch?v=WLSwgyJH6v0
      w przyszłości chcę wgrać retropie i nie wiem czy będzie to dobrze widoczne :D

      Usuń
    3. No pulpit na tym filmiku wygląda zdecydowanie lepiej, może jakiś inny sterownik mają itp, ale co do retropie się nie przejmuj - tam będą aplikacje na cały ekran i będzie ok, bo sam się tym już bawiłem na tym wyświetlaczu.

      Usuń
    4. okej, wielkie dzięki :D

      Usuń
  5. Dodałem te komendy do pliku /etc/rc.local ale przy uruchomieniu wykonują się tylko dwie pierwsze a "fbcp" muszę wpisywać samemu. Mógłby ktoś pomóc?

    OdpowiedzUsuń
    Odpowiedzi
    1. A dodałeś jakiś sleep przed "fbcp &"? Na końcu napisałem, ze w retropi musiałem tak zrobić i pomogło.

      Usuń
  6. Testowanie telefonu w ten sposób to świetna sprawa, bo w sumie można sprawdzić możliwości oprogramowania. Rasperry nigdy w życiu w ręce nie miałam, ale może kiedyś, jak będzie jeszcze dostępny to owszem, skorzystam. Poza tym w moim zasięgu zainteresowań teraz jest oscyloskop, który staram się poznać tak, aby nie miał przede mną żadnych tajemnic :) Pozdrawiam serdecznie i życzę sukcesów w rozwoju bloga :)

    OdpowiedzUsuń
  7. Witam
    Za każdym razem gdy zrobię co jest powyżej to potem nie umiem się zalogować po ponownym uruchomieniu. Żąda hasła na koncie pi a "raspberry" nie dziala

    OdpowiedzUsuń
    Odpowiedzi
    1. nie wpisuj tego kodu "$ sudo FRAMEBUFFER=/dev/fb1 startx" pomin ta linijkę. Też miałem ten problem

      Usuń
  8. Wczoraj robiłem od nowa na raspberry 4 i nie chciało działąć. Okazało się ze po pobraniu najnowszego systemu do raspberry z dnia 01.08.2020 trzeba było pominąć aktualizacje. Bez aktualizacji bez problemu zadziałało,

    OdpowiedzUsuń