Miniaturowy wyświetlacz OLED jest idealnym sposobem na dodanie niewielkiego ekranu do dowolnego projektu opartego o Raspberry Pi. Wyświetlacze tego rodzaju dostępne są w szerokiej gamie rozmiarów, ale najpopularniejsze z nich to 128x32 oraz 128x64 pikseli. Tańsze moduły są monochromatyczne - kolorowe piksele (białe, żółte bądź niebieskie) na czarnym tle. Duża część tych ekranów ma wbudowany Interfejs I²C. Wymaga on podłączenia do Raspberry Pi jedynie czterech przewodów, aby wyświetlać obrazy na ekranie.
W poniższym poradniku znajdziemy opis krok po kroku, jak podłączyć typowy wyświetlacz OLED z interfejsem I²C do Raspberry Pi. Po skonfigurowaniu i uruchomieniu komunikacji z wyświetlaczem zaprezentowane zostaną przykładowe skrypty pozwalające na rysowanie tekstu czy kształtów na ekranie, a nawet wyświetlanie prostych animacji.
Moduł OLED
Omawianym w tym artykule modułem jest typowy wyświetlacz o przekątnej 0,96", który dostępny jest niemalże w każdym sklepie z modułami do Raspberry Pi, Arduino etc. Pokazany jest on na zdjęciach poniżej:
Moduł posiada zaledwie cztery piny. Dwa służą do zasilania (Vcc oraz GND), a dwa tworzą interfejs I²C (linie SDA i SCL). Może być konieczne przylutowanie pinów do modułu, jeśli fabrycznie nie jest on w nie wyposażony.
Aktualizacja systemu operacyjnego
Realizując jakikolwiek projekt na Raspberry Pi dobrze jest zacząć od aktualizacji systemu operacyjnego. W tym celu wpisujemy w terminalu dwie komendy:
Aktualizacja może zająć kilka minut, szczególnie jeśli mamy sporo pakietów do aktualizacji, ale z reguły to warte oczekiwania - oszczędza dużo frustracji w przyszłości.
[align=righ]
[/align]Podłączanie modułu wyświetlacza
Jak pisaliśmy powyżej - moduł OLED posiada zaledwie cztery piny - dwa zasilające i dwa sygnałowe. Na obrazku po prawej stronie pokazano sposób, w jaki należy podłączyć je do Raspberry Pi.
Można podłączyć je bezpośrednio do minikomputera, zgodnie z poniższą tabelką:
* Pin ten można podłączyć do dowolnej linii 3,3 V, czyli pinów 1 lub 17.
** Pin ten można podłączyć do dowolnej linii masy, czyli pinów 6, 9, 14 , 20, 25, 30, 34 lub 39.
Włączenie interfejsu I²C
Domyślnie interfejs ten jest w naszym komputerze wyłączony. Dlatego, jeżeli chcemy komunikować się z wyświetlaczem, musimy go włączyć. Wykorzystujemy do tego narzędzie konfiguracyjne, które uruchamiamy wpisując w terminalu komendę:
Dokładniejszy opis, jak to zrobić, znajdziemy na przykład tutaj.
Następnie musimy doinstalować jeszcze kilka przydatnych narzędzi Pythonowych, które pozwolą nam na zabawę interfejsem. Wystarczy spisać poniższą komendę w terminalu, aby je zainstalować:
Biblioteki te mogą być już wcześniej zainstalowane, ale apt-get sprawdzi, czy nic nie brakuje.
Znalezienie adresu modułu OLED
W kolejnym kroku musimy odnaleźć adres naszego wyświetlacza na szynie I²C, aby wiedzieć jak dokładnie z nim się komunikować.
Wystarczy, że skorzystamy z jednego z zainstalowanych narzędzi:
Przykładowy rezultat powyższej komendy pokazano poniżej:
Widzimy, że komputer wykrył urządzenie o adresie 0x3C. Jest to domyślny adres tego modułu, mimo że na płytce drukowanej zapisano 0x78...
Jeżeli korzystasz ze starszej 'Maliny (Raspberry Pi 1 Model B Rev 1), musisz pamiętać, że tam wykorzystano inny interfejs I²C w SoC, więc wpisać trzeba:
Reszta kroków będzie taka sama.
Instalacja bibliotek w Pythonie do obsługi wyświetlacza OLED
Aby wyświetlać na ekranie tekst, kształty czy obrazki, przydatna będzie biblioteka od Adafruit. Obsługuje ona wszystkie wyświetlacze oparte o kontroler SSD1306, w tym produkowane przez nich moduły o rozdzielczości 128x32 i 128x64 pikseli.
Aby zainstalować te biblioteki, wystarczy sklonować odpowiednie repozytorium z GitHuba:
Po zakończeniu zgrywania biblioteki, przejdźmy do folderu z pobranymi plikami i zainstalujmy biblioteki.
Dla Pythona 2.x wpisujemy:
A dla Pythona 3.x:
Po zakończeniu tej operacji będziemy mogli w dowolnym miejscu przywołać te biblioteki z pomocą słowa kluczowego include w skrypcie Pythona.
Przykładowe skrypty
W folderze z biblioteką znajdziemy także przykłady jej wykorzystania. Wystarczy, że przejdziemy do odpowiedniego folderu:
Tam znaleźć możemy szereg przykładów, między innymi następujące skrypty o wiele mówiących nazwach:
animate.py
buttons.py
image.py
shapes.py
stats.py
Aby je uruchomić, wystarczy wpisać:
lub jeśli korzystamy z Pythona 3:
Uruchomienie powyższych skryptów po kolei powinno dać efekty takie jak widzimy na obrazkach zebranych po lewej stronie. Modyfikując je, możemy stworzyć własne układy graficzne i tekstowe, dostosowane do naszej aplikacji.
Dostosowanie wielkości ekranu
Przykłady dostarczone przez Adafruit zakładają, iż nasz ekran ma rozdzielczość 128x32 piksele. Jeśli mamy większy wyświetlacz, także będą działały, ale można zapobiec późniejszym komplikacjom. Aby to zrobić wystarczy, że zmienimy w skrypcie linijkę odpowiedzialną za konfigurację - zakomentujemy (znakiem #) tą ustawiającą mniejszą i odkomentujemy tą, ustawiającą większą rozdzielczość. Po zmianach ta sekcja w skrypcie powinna wyglądać następująco:
Ten krok jest kluczowy, jeśli chcemy wyświetlacz na ekranie własne obrazy.
Tworzenie nowych obrazów
Jeśli przetestowaliście skrypt image.py i chcecie samodzielnie spróbować uzyskać taki efekt, to nie ma się co bać - to nic trudnego. Najpierw trzeba przygotować pojedynczy obrazek, wykorzystując dowolny program graficzny. Najlepiej, aby miał on następujące parametry:
Rozdzielczość 128x64 px
1-bitowy kolor (obrazek monochromatyczny, np. biało-czarny).
Domyślnie skrypt w image.py będzie konwertował obrazki na monochromatyczne, ale nie będzie zmieniał ich rozdzielczości, zakładając, że jest poprawna.
W skrypcie znaleźć możemy dwie linijki odpowiedzialne za ładowanie obrazka. Jedna, która konwertuje tylko głębię kolorów:
I drugą, która także zmienia rozmiar:
To, z której skorzystasz zależy tylko i wyłącznie od Ciebie. Pamiętaj jednak, że operacja przeskalowania obrazka zajmuje jakąś część zasobów, więc wydajniej jest używać wraz ze skryptem obrazków, które już zostały przeskalowane.
Przeskalowywanie i konwersja obrazów
Aby wykorzystać dowolny obrazek, trzeba załadować go dowolnego programu graficznego i wykonać następujące kroki:
* Otworzyć obrazek;
* Przeskalować go do rozdzielczości 128 x 64 px;
* Zmniejszyć głębie koloru do 1-bitowej (obraz monochromatyczny);
* Zapisać obrazek jako plik PNG lub PBM.
Teraz możemy skopiować go na Raspberry Pi i wczytać w skrypcie, wyświetlającym go na ekranie OLED.
Domyślnie znajdujący się w przykładzie plik posiada rozszerzenie .PPM - wynika to z faktu, że jest to kolorowy obrazek, który przeznaczony jest także do testowania kolorowych wyświetlaczy, ale w tym przykładzie jest w skrypcie rzutowany na 1-bitowy obraz.
Pliki PBM są preferowane, jako że domyślnie są biało-czarne i o wiele mniejsze niż PNG. Dodatkowo, Python o wiele szybciej je wczytuje, jako że nie musi dokonywać po drodze żadnej konwersji.
Zwiększanie prędkości interfejsu I²C
Jak pisaliśmy [url=]jakiś czas temu[/url], możliwe jest zwiększenie prędkości interfejsu OLED. Domyślnie działa on z prędkością 100 kbit/s, ale maksymalna prędkość kontrolera w wyświetlaczu to 400 kbit/s. Zwiększenie prędkości tego interfejsu sprawi, że dane będą przesyłane szybciej. To istotne zwłaszcza w przypadku obrazków i szybkich animacji.
Problemy w uruchamianiu wyświetlacza
Jeżeli pomimo zrobienia wszystkiego od początku zgodnie z powyższym opisem, ekran nie działa, dobrze jest sprawdzić kilka rzeczy:
* Czy na pewno włączyliśmy I²C w systemie?
* Czy zainstalowaliśmy python-smbus oraz i2c-tools?
* Czy nie pomieszaliśmy ze sobą linii SDA i SCL?
* Co pokazuje i2cdetect -y 1 - jaki jest adres kontrolera?
* Czy podaliśmy do skryptów odpowiedni adres wyświetlacza, jeżeli jest inny niż 0x3C?
Źródło: https://www.raspberrypi-spy.co.uk/2018/04/i2c-oled-display-module-with-raspberry-pi/[/quote]
W poniższym poradniku znajdziemy opis krok po kroku, jak podłączyć typowy wyświetlacz OLED z interfejsem I²C do Raspberry Pi. Po skonfigurowaniu i uruchomieniu komunikacji z wyświetlaczem zaprezentowane zostaną przykładowe skrypty pozwalające na rysowanie tekstu czy kształtów na ekranie, a nawet wyświetlanie prostych animacji.
Moduł OLED
Omawianym w tym artykule modułem jest typowy wyświetlacz o przekątnej 0,96", który dostępny jest niemalże w każdym sklepie z modułami do Raspberry Pi, Arduino etc. Pokazany jest on na zdjęciach poniżej:
Moduł posiada zaledwie cztery piny. Dwa służą do zasilania (Vcc oraz GND), a dwa tworzą interfejs I²C (linie SDA i SCL). Może być konieczne przylutowanie pinów do modułu, jeśli fabrycznie nie jest on w nie wyposażony.
Aktualizacja systemu operacyjnego
Realizując jakikolwiek projekt na Raspberry Pi dobrze jest zacząć od aktualizacji systemu operacyjnego. W tym celu wpisujemy w terminalu dwie komendy:
Code: bash
Aktualizacja może zająć kilka minut, szczególnie jeśli mamy sporo pakietów do aktualizacji, ale z reguły to warte oczekiwania - oszczędza dużo frustracji w przyszłości.
[align=righ]

Jak pisaliśmy powyżej - moduł OLED posiada zaledwie cztery piny - dwa zasilające i dwa sygnałowe. Na obrazku po prawej stronie pokazano sposób, w jaki należy podłączyć je do Raspberry Pi.
Można podłączyć je bezpośrednio do minikomputera, zgodnie z poniższą tabelką:
Pin wyświetlacza | Pin na Raspberry Pi | Uwagi |
Vcc | 1 * | 3.3V |
Gnd | 14 ** | Masa |
SCL | 5 | I2C SCL |
SDA | 3 | I2C SCA |
* Pin ten można podłączyć do dowolnej linii 3,3 V, czyli pinów 1 lub 17.
** Pin ten można podłączyć do dowolnej linii masy, czyli pinów 6, 9, 14 , 20, 25, 30, 34 lub 39.
Włączenie interfejsu I²C
Domyślnie interfejs ten jest w naszym komputerze wyłączony. Dlatego, jeżeli chcemy komunikować się z wyświetlaczem, musimy go włączyć. Wykorzystujemy do tego narzędzie konfiguracyjne, które uruchamiamy wpisując w terminalu komendę:
Code: bash
Dokładniejszy opis, jak to zrobić, znajdziemy na przykład tutaj.
Następnie musimy doinstalować jeszcze kilka przydatnych narzędzi Pythonowych, które pozwolą nam na zabawę interfejsem. Wystarczy spisać poniższą komendę w terminalu, aby je zainstalować:
Code: bash
Biblioteki te mogą być już wcześniej zainstalowane, ale apt-get sprawdzi, czy nic nie brakuje.
Znalezienie adresu modułu OLED
W kolejnym kroku musimy odnaleźć adres naszego wyświetlacza na szynie I²C, aby wiedzieć jak dokładnie z nim się komunikować.
Wystarczy, że skorzystamy z jednego z zainstalowanych narzędzi:
Code: bash
Przykładowy rezultat powyższej komendy pokazano poniżej:
Widzimy, że komputer wykrył urządzenie o adresie 0x3C. Jest to domyślny adres tego modułu, mimo że na płytce drukowanej zapisano 0x78...
Jeżeli korzystasz ze starszej 'Maliny (Raspberry Pi 1 Model B Rev 1), musisz pamiętać, że tam wykorzystano inny interfejs I²C w SoC, więc wpisać trzeba:
Code: bash
Reszta kroków będzie taka sama.
Instalacja bibliotek w Pythonie do obsługi wyświetlacza OLED
Aby wyświetlać na ekranie tekst, kształty czy obrazki, przydatna będzie biblioteka od Adafruit. Obsługuje ona wszystkie wyświetlacze oparte o kontroler SSD1306, w tym produkowane przez nich moduły o rozdzielczości 128x32 i 128x64 pikseli.
Aby zainstalować te biblioteki, wystarczy sklonować odpowiednie repozytorium z GitHuba:
Code: bash
Po zakończeniu zgrywania biblioteki, przejdźmy do folderu z pobranymi plikami i zainstalujmy biblioteki.
Code: bash
Dla Pythona 2.x wpisujemy:
Code: bash
A dla Pythona 3.x:
Code: bash
Po zakończeniu tej operacji będziemy mogli w dowolnym miejscu przywołać te biblioteki z pomocą słowa kluczowego include w skrypcie Pythona.
Przykładowe skrypty
W folderze z biblioteką znajdziemy także przykłady jej wykorzystania. Wystarczy, że przejdziemy do odpowiedniego folderu:
Code: bash
Tam znaleźć możemy szereg przykładów, między innymi następujące skrypty o wiele mówiących nazwach:
animate.py
buttons.py
image.py
shapes.py
stats.py
Aby je uruchomić, wystarczy wpisać:
Code: bash
lub jeśli korzystamy z Pythona 3:
Code: bash
Uruchomienie powyższych skryptów po kolei powinno dać efekty takie jak widzimy na obrazkach zebranych po lewej stronie. Modyfikując je, możemy stworzyć własne układy graficzne i tekstowe, dostosowane do naszej aplikacji.
Dostosowanie wielkości ekranu
Przykłady dostarczone przez Adafruit zakładają, iż nasz ekran ma rozdzielczość 128x32 piksele. Jeśli mamy większy wyświetlacz, także będą działały, ale można zapobiec późniejszym komplikacjom. Aby to zrobić wystarczy, że zmienimy w skrypcie linijkę odpowiedzialną za konfigurację - zakomentujemy (znakiem #) tą ustawiającą mniejszą i odkomentujemy tą, ustawiającą większą rozdzielczość. Po zmianach ta sekcja w skrypcie powinna wyglądać następująco:
Ten krok jest kluczowy, jeśli chcemy wyświetlacz na ekranie własne obrazy.
Tworzenie nowych obrazów
Jeśli przetestowaliście skrypt image.py i chcecie samodzielnie spróbować uzyskać taki efekt, to nie ma się co bać - to nic trudnego. Najpierw trzeba przygotować pojedynczy obrazek, wykorzystując dowolny program graficzny. Najlepiej, aby miał on następujące parametry:
Rozdzielczość 128x64 px
1-bitowy kolor (obrazek monochromatyczny, np. biało-czarny).
Domyślnie skrypt w image.py będzie konwertował obrazki na monochromatyczne, ale nie będzie zmieniał ich rozdzielczości, zakładając, że jest poprawna.
W skrypcie znaleźć możemy dwie linijki odpowiedzialne za ładowanie obrazka. Jedna, która konwertuje tylko głębię kolorów:
Code: python
I drugą, która także zmienia rozmiar:
Code: python
To, z której skorzystasz zależy tylko i wyłącznie od Ciebie. Pamiętaj jednak, że operacja przeskalowania obrazka zajmuje jakąś część zasobów, więc wydajniej jest używać wraz ze skryptem obrazków, które już zostały przeskalowane.
Przeskalowywanie i konwersja obrazów
Aby wykorzystać dowolny obrazek, trzeba załadować go dowolnego programu graficznego i wykonać następujące kroki:
* Otworzyć obrazek;
* Przeskalować go do rozdzielczości 128 x 64 px;
* Zmniejszyć głębie koloru do 1-bitowej (obraz monochromatyczny);
* Zapisać obrazek jako plik PNG lub PBM.
Teraz możemy skopiować go na Raspberry Pi i wczytać w skrypcie, wyświetlającym go na ekranie OLED.
Domyślnie znajdujący się w przykładzie plik posiada rozszerzenie .PPM - wynika to z faktu, że jest to kolorowy obrazek, który przeznaczony jest także do testowania kolorowych wyświetlaczy, ale w tym przykładzie jest w skrypcie rzutowany na 1-bitowy obraz.
Pliki PBM są preferowane, jako że domyślnie są biało-czarne i o wiele mniejsze niż PNG. Dodatkowo, Python o wiele szybciej je wczytuje, jako że nie musi dokonywać po drodze żadnej konwersji.
Zwiększanie prędkości interfejsu I²C
Jak pisaliśmy [url=]jakiś czas temu[/url], możliwe jest zwiększenie prędkości interfejsu OLED. Domyślnie działa on z prędkością 100 kbit/s, ale maksymalna prędkość kontrolera w wyświetlaczu to 400 kbit/s. Zwiększenie prędkości tego interfejsu sprawi, że dane będą przesyłane szybciej. To istotne zwłaszcza w przypadku obrazków i szybkich animacji.
Problemy w uruchamianiu wyświetlacza
Jeżeli pomimo zrobienia wszystkiego od początku zgodnie z powyższym opisem, ekran nie działa, dobrze jest sprawdzić kilka rzeczy:
* Czy na pewno włączyliśmy I²C w systemie?
* Czy zainstalowaliśmy python-smbus oraz i2c-tools?
* Czy nie pomieszaliśmy ze sobą linii SDA i SCL?
* Co pokazuje i2cdetect -y 1 - jaki jest adres kontrolera?
* Czy podaliśmy do skryptów odpowiedni adres wyświetlacza, jeżeli jest inny niż 0x3C?
Źródło: https://www.raspberrypi-spy.co.uk/2018/04/i2c-oled-display-module-with-raspberry-pi/[/quote]
Cool? Ranking DIY