Kilka miesięcy temu wyszła nowa wersja popularnej “Malinki” – Raspberry Pi Zero. Minikomputer ten ma kosztować docelowo 5$ (Aktualnie jest mało dostępny, a w sklepach jeśli dodać wysyłkę kosztuje jakieś ~47 zł). Ta wersja RPi jest kierowana do zastosowań, gdzie procesory AVR(np.: Arduino) nie dają rady, z powodu niskiej wydajności. Malinka pobiera mało prądu ~110mAh(to dalej wiele więcej od AVR), i pozwala na zasilanie ze zwykłem bateri(Jeżeli użyjemy konwertera STEP-UP, pozwala na zasilanie z 3V. U mnie na ogniwie 500mah 3.7V, malinka wytrzymała 3,5 godziny). Jeżeli dodamy wyświetlacz, można stworzyć np. przynośny emulator konsol retro (RetroPie). W tym poradniku opiszę podłączenie i konfigurację wyświetlacza na sterowniku ILI9341. Opis działa także z innymi wersjami Raspberry Pi.
Potrzebne przedmioty:
- Wyświetlacz ILI9341. Użyłem wyświetlacza “TFT LCD 2,2” 240x320px”
- Raspberry Pi. Ja użyłem Raspberry Pi Zero który nie jest jeszcze dostępny w polskich sklepach. Swój model zamówiłem z ThePiHut, sklepu w Wielkiej Brytani. Wkrótce można go będzie znaleść w Botlandzie.
- Garść kabelków do płytek stykowych
Podłączanie wyswietlacza
Wyświetlacz działa na magistrali SPI. Wszystkie wyprowadzenia powinny być opisane na wyświetlaczu.
Nazwa wyprowadzenia | Pin Maliny | Opis |
---|---|---|
VCC | +3V (!) | Zasilanie wyświetlacza |
GND | GND | Uziemienie |
CS | Pin CE0 *(Pod GPIO 25) | “Chip Select” |
RESET | GPIO 25 | Pin reset magistrali SPI |
D/C | GPIO24 | |
SDI(MOSI) | Pin MOSI | Pin MOSI magistrali SPI |
SCK | SCLK | Pin SCK magistrali SPI |
LED | GPIO18 | Podświetlenie |
SDO(MISO) | — | Dodatkowy pin karty SD |
Konfiguracja wyświetlacza
Po podłączeniu wyświetlacza uruchamiamy naszą malinę. Należy wejść do linii komend (połączyłem się po SSH, można także podpiąć klawiaturę).
- Aktualizujemy system komendą:
1sudo apt-get update && sudo apt-get upgrade
- Tymczasowo ładujemy sterowniki:
1sudo modprobe fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1
W tym miejscu, podświetlenie wyświetlacza, powinno sie zapalić - Teraz możemy uruchomić “Okienka” na wyświetlaczu lub linie komend. Aby uruchomić środowisko graficzne:
1FRAMEBUFFER=/dev/fb1 startx
Aby uruchomić linię komend:
1con2fbmap 1 1
- Aby system ładował sterowniki przy starcie, w /etc/modules dopisujemy:
1fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1
(Opcjonalne)Wyświetlanie /dev/fb0 (RetroPie / Emulation Station)
Kopiowanie framebuffera /dev/fb0 do /dev/fb1 jest przydatne, gdy chcemy uruchomić środowisko, którego nie da się uruchomić bezpośrednio na framebufferze /dev/fb1 (Np.: EmulationStation/RetroPie). Aby to ominąć, program fbcp kopiuje zawartość /dev/fb0 do /dev/fb1. Niestety, nie jest to rozwiązanie idealne: obraz jest lekko opóźniony.
- Aktualizujemy system (Jeżeli robiłeś to niedawno, nie musisz tego wykonywać):
1sudo apt-get update && sudo apt-get upgrade - Instalacja RPI-FBCP:
1sudo apt-get install rpi-fbcp
- fbcp uruchomimy komendą:
1fbcp
W tym miejscu obraz powinien pojawić się na wyświetlaczu.
Mam nadzieję że poradnik się spodobał. Pozdrawiam.
Fajny artykuł… Byłby, gdyby był napisany po polsku. Nie udało się jednego zdania napisać bez błędów interpunkcyjnych albo literówek.
I zanim usłyszę, że się czepiam: dbałość o formę powinna przejawiać się wszędzie. Jak ktoś stawia przecinki losowo, a “miliamperogodziny” zapisuje jako mah, a nie mAh, to jest duże ryzyko, że np. w opisie wyprowadzeń pomylił linię danych z zasilaniem (na przykład).
Z drugiej strony, jeśli tekst jest poprawny językowo, to znaczy że autor przyłożył się do publikacji i prawdopodobieństwo błędów jest niższe.
A zatem: 5 za staranie, pała za formę. Na szczęście formę łatwiej poprawić niż brak starania, więc początek jest to obiecujący :)
z tym mah to mógł być jeszcze inny błąd – może chodziło o MACH – układ testowano przy prędkości 500 machów, muszę przyznać, że dość sporej.
A tak serio – samo podłączenie jakoś nie pasuje mi na projekt – jakbyś go rozszerzył o uruchomienie czegoś fajnego, żeby go w pełni wykorzystać to byłoby super, więc tymczasowo się wstrzymam z oceną.
Nie, opis samego podłączenia też jest OK, tym bardziej że jest tu trochę o kopiowaniu między różnymi FB.
Dziękuję za sugestię, postarałem się poprawić artykuł.
CO to jest ‘angla’? Druga kropka…
“Malinka pobiera mało prądu ~110mah”
raczej ~110 mA (mAh to miara pojemności ;) )
myślę, że w porównaniu z procesorami AVR użytymi w Arduino to jednak całkiem sporo i nie mogę się zgodzić ze stwierdzeniem “mało prądu” chyba, że porównujemy z innymi “malinami”.
Kolejny artykuł typu ctrlC, ctrlV. Pokopiować komendy i wkleić w odpowiedniej kolejności.
Nic się nie dowiedziałem co z czym i dlaczego tak, a nie inaczej.
Jak zwykli ludzie mają się nauczyć tego cholernego Linuxa!!!!
Co do Linuksa, to nie całkiem wiem, czego oczekujesz, ale spróbuję wyjaśnić, co się tutaj dzieje:
sudo modprobe fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24,led:18 speed=16000000 rotate=90 bgr=1
-> jako root (sudo) ładujemy sterownik (modprobe) o nazwie fbtft_device – reszta to parametry dla sterownika, name to zapewne typ wyświetlacza TFT, gpios wskazuje po których pinach odbywa się sterowania, speed to zapewne prędkość komunikacji, rotate to orientacja obrazu, bgr to pewnie wskazówka, czy podświetlenie odbywa się stanem wysokim czy niskim
FRAMEBUFFER=/dev/fb1 startx
-> startx uruchamia serwer X (czyli środowisko graficzne), przy czym wcześniej ustawiamy zmienną środowiskową FRAMEBUFFER tak, żeby “celowała” na ekran TFT (pewnie domyślnie pisze po HDMI), dostępny jako urządzenie /dev/fb1. Framebuffer, czyli ramka obrazu, to obszar pamięci w którym zapisujemy dane do wyświetlania
con2fbmap 1 1
-> zgaduje, że nazwa polecenia to skrót od “console to framebuffer mapper”, czyli że dane graficzne konsoli będziemy kopiować do bufora ramki “1”.
/etc/modules -> lista sterowników (modułów) ładowanych przy starcie systemu.
A tak w ogóle, to Linuksa można się nauczyć na 3 sposoby:
– bierzesz cegłę o budowie systemów operacyjnych, w szczególności Linuksa, albo podobny kurs akademicki – potem sporo stanie się jasne
– odpalasz Linuksa, próbujesz sobie coś grzebać i zrozumieć co się dzieje
– czytasz taki artykuł jak ten i każde nieznane sobie pojęcie wrzucasz do Google i czytasz, czytasz, czytasz.
Sposób trzeci jest względnie najwygodniejszy, sposób pierwszy daje największą wiedzę w paradoksalnie względnie krótkim czasie, sposób drugi jest dla hardkorowców :-)
Dziękuję za dodatkowe wyjaśnienia. Trochę się wyjaśniło. Ja akurat uczę się tym drugim sposobem, bo w przypadku pierwszego nie bardzo wiem jaka byłaby dobra lektura tzn. nie chce się uczyć “jąder systemów” itp ale obsługi Linuxa tak aby można było korzystać swobodnie z komputera, coś DIY zrobić itp.
W związku z powyższym metoda 3 nie jest dobra, bo jak nie znasz podstaw to można czytać i czytać a to dalej czarna magia :)
Wiesz, wydaje mi się, że demonizujesz “jądra systemów” itp., to są rzeczy – jak już się otrząśniesz – intuicyjnie proste.
Ale tak czy inaczej: metoda 3 jest całkiem niezła, wiedza ma to do siebie, że przy pierwszym przejściu nie wiesz w jakim języku czytasz, przy drugim nie wiesz o czym czytasz, przy trzecim nie wiesz o co chodzi, a przy czwartym myślisz “no tak, to oczywiste” :-) I nie mówię, że trzeba czytać ciągle to samo :-) Coś jak z nauką obcego języka – na początku nic nie kumasz.
Jeżeli ktoś kupuje RPI, to raczej powinien znać przynajmniej podstawy(apt-get, modprobe itp). Wydaje mi się, że artykuł jest przydatny, musiałem dość długo szukać w google konfiguracji i obejścia problemu ze złym framebufferem.
Pewnie powinien, ale jest taki hype na RPi, że ludzie to kupują, a potem się zastanawiają po co :-)
I tak, artykuł jest przydatny.
Odpowiem Ci na swoim przykładzie, po co ludzie kupują malinę.
Najpierw kupiłem Arduino i dosyć szybko, tylko z guglem udało się opanować podstawy, prosty język, jakieś proste programy i trochę elektroniki. Tak mi się to spodobało, że postanowiłem podnieść poprzeczkę, kupić malinę i dodatkowo nauczyć się właśnie tego cholernego Linuxa :)
Udało mi się mn. skonfigurować ją do Flightradara24.
Ale muszę też przyznać, ze właśnie w przypadku RPi nie odbieram tej wiedzy podanej w sposób jak do Arduino tj. w sposób usystematyzowany, z prostymi przykładami pozwalającymi wgryzać się w temat i uczyć samodzielnie.
Większość tutoriali to takie właśnie kopiuj/wklej. A użytkownik nadal nie może poznać zasad ,co z czy i dlaczego.
Tak to odbieram.
Dosyć słaby tutorial. Nie dowiedziałem, się na przykład jak sterować tym wyświetlaczem z poziomu programu. Albo jakie funkcje ma biblioteka do jego obsługi. A to raczej jest potrzebne. I powinno się tutaj znaleźć.
To nie jest tak – żeby to działało z poziomu pythona itp to są inne biblioteki. Ta umożliwia wyświetlanie pulpitu na tym wyświetlaczyku.
Próbuję zrobic według tego poradnika i nie działa – pomijając fakt, że wcześniej trzeba zrobić expand karty, uruchomić spi i kilka innych rzeczy o których tu nie ma mowy po inicjalizacji lcdka faktycznie się zapala, a przy startx (oczywiście trzeba uruchomić z sudo co nie jest wspomniane) wyskakuje “modprobe: FATAL: Module g2d_23 not found.”, na innych forach piszą, że to jest ok i przechodzi dalej, jednak u mnie się na tym zawiesza, czy po prostu trzeba czekać parę minut na to?
już ogarnąłem w najbliższym czasie u mnie na blogu napiszę dokładniejszy poradnik z opisem co i jak, podlinkuję tu potem
Zapraszam tutaj po bardziej rozbudowany opis: http://projektydmb.blogspot.com/
Cześć.
Mam problem z framebufferem, chcę odpalić sobie apkę która działa tylko na fb0, więc kopiuje sobie do fb1 ale aplikacja jest nie do użytku ponieważ zawsze jak kliknę gdzieś na apkę to ekrane w tle czyli fb1 się uaktywnia i wchodzi mi na pierwszy plan. Da się jakoś temu zaradzić?
jakich kabli użyć??? męsko męskich? damsko damskich?