Wyświetlacz OLED SSD1306 - tekst

Wyświetlacz OLED typu SSD1306 i Raspberry Pi

Podobnie jak poprzednio – mamy dziś bardzo prostą instrukcję dla tym razem wyświetlacza. Śledząc dyskusje na grupie Malinowe Pi, Hubert Wu podzielił się linkiem do wyświetlacza 128×64. Jest to wyświetlacz monochromatyczny o całkiem słusznej rozdzielczości 128×64 wykonany w technologii OLED. Pomyśleć, że mój pierwszy komputer miał także rozdzielczość 640×400 i monochrom. Wyświetlacz kosztuje około 20-25 PLN i występuje najczęściej pod nazwą: ”0.96″ I2C IIC Serial 128X64” w popularnych serwisach aukcyjnych i wygląda podobnie do oryginalnego wyświetlacza Adafruit SSD1306 – którego właśnie użyłbym.

Wyświetlacz OLED SSD1306 - grafika
Wyświetlacz OLED SSD1306 – grafika

Czego będziemy potrzebować?

Software:

  • git, python-devel, python-pip (programy do zainstalowania w dystrybucji Raspbian na RPi)
  • Bibliotekę z przykładami od Adafruit: Adafruit_Python_SSD1306

Hardware:

  • Raspberry Pi – 1B, 1A, 2B, 3B – właściwe dowolne z zainstalowanym Raspbianem (wystarcza wersja mini)
  • Wyświetlacz OLED SSD 1306 lub zgodny

Zastosowanie

Podłączony do RPi wyświetlacz (który jest zupełnie niezależny od wyjść HDMI czy Composite), przydaje się oczywiście do niezliczonych projektów, ale gdy zapytać konkretnie – to jednym z podstawowych jest wyświetlenie adresu IP 🙂

Podłączamy

Najpierw podłączamy zasilanie i masę – VCC i GND do 3,3 i GND RPi, a następnie SDA i SCL do GPIO0 (GPIO 2 w RPi B+, 2 i 3) i GPIO1 (GPIO 3 w RPi B+, 2 i 3):

Wyświetlacz OLED SSD1306 - podłączenie do RPi
Wyświetlacz OLED SSD1306 – podłączenie do RPi

Podłączenie jest bardzo proste a wszystkie PINy obok siebie (no prawie, omijamy GPIO4!). Podczas podłączania – pomyliłem VCC z GND! Objawem było delikatne świecenie zielonej LED na RPi… Na szczęście po poprawieniu – okazało się, że zarówno RPi jak i wyświetlacz są w porządku. Od strony wyświetlacza podłączenie wygląda to tak:

Wyświetlacz OLED SSD1306 - podłączenie do wyświetlacza
Wyświetlacz OLED SSD1306 – podłączenie do wyświetlacza

Instalujemy

Pierwszy krokiem będzie włączenie szyny I2C (GPIOO lub GPIO2 i GPIO1 lub GPIO3) na naszym RPi, włączamy ją używając raspi-config (Advanced Options->I2C).
Uruchamiamy ponownie RPi i zabieramy się za instalację odpowiednich programów:
Tradycyjne, aktualizujemy system:

Następnie instalujemy odpowiednie programy:

Następnie RPi.GPIO:

Gdy wszystko zostanie pobrane i zainstalowane – pobieramy używając git odpowiednią bibliotekę z przykładami od Adafruit:

Test!

Przekonajmy się czy nasz wyświetlacz jest prawidłowo podłączony!

Edytujemy plik shapes.py i lokalizujemy linię, która konfiguruje nasz wyświetlacz do pracy przez I2C, jest to:

Inne linie zaczynające się od disp – „haszujemy” czyli stawiamy na początku znak #.
Teraz uruchamiamy:

Wreszcie wyświetlacz ożył! W katalogu znajdują się jeszcze pliki w Pythonie z przykładami – animate.py oraz image.py, należy je także przygotować – wybrać właściwą konfigurację zmiennej disp.
Możemy stosować własne czcionki (foramat TTF) – np: o wysokości 16pix:

Wyświetlacz OLED SSD1306 - tekst
Wyświetlacz OLED SSD1306 – tekst

image.py pozwala z kolei wyświetlić obraz w formacie PPM – do przygotowanie można użyć GIMP oraz konwersji na monochrom z ditheringiem:

Wyświetlacz OLED SSD1306 - grafika
Wyświetlacz OLED SSD1306 – grafika

Efekt zależy od wejściowego obrazu – powiedzmy, że logo można rozpoznać!

Pozostaje nam zagłębić się w Python’a i użyć wyświetlacza do podania adresu IP.

Wyświetlacz OLED SSD1306 - tekst
Wyświetlacz OLED SSD1306 – tekst




  • Michiel van Hoorn

    Hi Lukasz, great write-up. I has some error message regarding the i2c bus. After changing the i2c_bus=0 it worked fine. Thanks!

    • Łukasz C. Jokiel

      Thanks

  • Ab Mughal

    Hi, this is really helpful, I manage to run the shaps.py. I’m trying to change the GPIO pins to connect at different pins on raspberry pi. how would i change.

  • „Ekran” word on LCD is also a Turkish word. It means „screen” in Turkish 😀 Greetz!

    • Łukasz C. Jokiel

      Coincidence? I think not :D, thanks!