Tym razem projekt oparty o komputerek Raspberry Pi, dokładnie Raspberry Pi 2, który stworzyłem już wcześniej, ale ostatnio przybrał na tyle dopracowaną formę, że mogę go w końcu zaprezentować. Pierwsza wersja wykonana była na Raspberry Pi 1 z 256MB RAM – poza nieco wolniej działającym i lagującym menu, działał równie dobrze.
Projekt to odtwarzacz mediów, głównie filmów, podłączany do telewizora. Łączy kilka pożądanych cech, nie tak oczywistych w dostępnych komercyjnie produktach:
- kompaktowe rozmiary,
- CEC, czyli w skrócie obsługa pilotem od telewizora,
- WiFi umożliwiające dostęp do zasobów na serwerze NAS,
- wyświetlacz z podstawowymi informacjami o odtwarzanym materiale.
Projekt to w zasadzie połączenie kilku elementów: komputerek Rpi 2, obudowa, karta WiFi na USB, system OSMC (na karcie micro SD 8GB), moduł dla wyświetlacza HD44780 na I2C, sam wyświetlacz (akurat w wersji z zielonym podświetleniem i kilka przewodów. W zasadzie tyle. W ramach poradnika w skrócie poniżej opis konfiguracji OSMC, żeby działał z naszym wyświetlaczem.
Podłączenie wyświetlacza jest dość trywialne – +5V, GND, SDA, SCL – do odpowiednich pinów RPi (1, 6, 3, 5)

Po pierwsze po zainstalowaniu OSMC na karcie, warto podłączyć się do sieci. Dalsza częśc konfiguracji już zdalnie z wygodnego peceta.
Osmc przyjmuje domyślną nazwę hosta osmc, użytkownik osmc i hasło oczywiście także osmc. (Na Linuxie można wydać ssh osmc@osmc).
Kolejna rzecz – włączenie interfejsu I2C. Po pierwsze do /etc/modules dodajemy linię:
i2c-dev
i w /boot/config.txt linijkę:
dtparam=i2c_arm=on
Możemy wydać sobie sudo reboot i sprawdzić czy mamy aktywne I2C:
osmc@osmc:~$ ls /dev/i2c* /dev/i2c-1
Jeśli wynik jest taki, to można przejść dalej. Instalujemy lcdproc i i2c-tools:
sudo apt-get install i2c-tools lcdproc
Teraz możemy sprawdzić, czy nasz wyświetlacz jest wykrywany. Wydajemy:
osmc@osmc:~$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
lub
i2cdetect -y 0
jeśli masz urządzenie /dev/i2c-0 – różnie w zależności od modelu Raspberry Pi. Jak widać pod adresem 0x27 jest obecne urządzenie. Adres można w pewnym zakresie ustawiać za pomocą zworek A0, A1, A2 na module. Przydatne, jeśli chcemy podłączyć kilka urządzeń.
Kolejny etap – podmiana sterownika do LCD. Standardowy sterownik do tego typu wyświetlacza – czyli HD44780 – HD44780.so nie wspiera niestandardowych układów podłączenia wyjść układu PCF8574 i w zależności od modułu może działać lub nie. Sterownik można pobrać stąd https://github.com/wilberforce/lcdproc, lub poniżej wrzucę swój zestaw materiałów do pobrania do realizacji projektu. Ten sterownik wspiera konfigurację podłączenia pinów, co pozwala na obsługę każdego właściwie modułu.
Sterownik można wrzucić np do lokalizacji: /usr/lib/lcdproc/
Kolejny etap – edycja pliku konfiguracyjengo LCDproc: /etc/LCDd.conf
Po kolei:
Zmienna DriverPath – ustawiamy na ścieżkę, gdzie wrzuciliśmy nasz sterownik.
Zmienna Driver – podajemy hd44780.
I dalej – konfiguracja naszego wyświetlacza:
## Hitachi HD44780 driver ##
[hd44780]
# Select what type of connection. See documentation for types.
ConnectionType=i2c
# Port where the LPT is. Usual value are: 0x278, 0x378 and 0x3BC
Port=0x27
# Device of the serial interface [default: /dev/lcd]
Device=/dev/i2c-1
# Bitrate of the serial port (0 for interface default)
Speed=0
# If you have a keypad connected.
# You may also need to configure the keypad layout further on in this file.
Keypad=no
i2c_line_RS=0x01
i2c_line_RW=0x02
i2c_line_EN=0x04
i2c_line_BL=0x08
i2c_line_D4=0x10
i2c_line_D5=0x20
i2c_line_D6=0x40
i2c_line_D7=0x80
# Set the initial contrast (bwctusb and lcd2usb) [default: 500; legal: 0 - 1000]
Contrast=0
# Set brightness of the backlight (lcd2usb only) [default: 0; legal: 0 - 1000]
#Brightness=1000
#OffBrightness=0
# If you have a switchable backlight.
Backlight=yes
BacklightInvert=yes
# If you have the additional output port ("bargraph") and you want to
# be able to control it with the lcdproc OUTPUT command
OutputPort=no
# Specifies if the last line is pixel addressable (yes) or it controls an
# underline effect (no). [default: yes; legal: yes, no]
#Lastline=yes
# Specifies the size of the LCD.
# In case of multiple combined displays, this should be the total size.
Size=16x2
# For multiple combined displays: how many lines does each display have.
# Vspan=2,2 means both displays have 2 lines.
#vspan=2,2
# If you have an HD66712, a KS0073 or another 'almost HD44780-compatible',
# set this flag to get into extended mode (4-line linear).
#ExtendedMode=yes
# In extended mode, on some controllers like the ST7036 (in 3 line mode)
# the next line in DDRAM won't start 0x20 higher. [default: 0x20]
#LineAddress=0x10
# Character map to to map ISO-8859-1 to the LCD's character set
# [default: hd44780_default; legal: hd44780_default, hd44780_euro, ea_ks0073,
# sed1278f_0b, hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314 ]
# (hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5 and upd16314 are possible if
# compiled with additional charmaps)
CharMap=hd44780_default
# If your display is slow and cannot keep up with the flow of data from
# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
# to increase the delays. Default: 1.
DelayMult=4
# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
# is still alive. When set to a value bigger then null the character in the
# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
#KeepAliveDisplay=0
# If you experience occasional garbage on your display you can use this
# option as workaround. If set to a value bigger than null it forces a
# full screen refresh <RefreshDiplay> seconds. Default: 0.
RefreshDisplay=5
# You can reduce the inserted delays by setting this to false.
# On fast PCs it is possible your LCD does not respond correctly.
# Default: true.
DelayBus=true
# If you have a keypad you can assign keystrings to the keys.
# See documentation for used terms and how to wire it.
# For example to give directly connected key 4 the string "Enter", use:
# KeyDirect_4=Enter
# For matrix keys use the X and Y coordinates of the key:
# KeyMatrix_1_3=Enter
KeyMatrix_4_1=Enter
KeyMatrix_4_2=Up
KeyMatrix_4_3=Down
KeyMatrix_4_4=Escape
Port – tutaj podajemy adres, który pojawił się w i2c-detect – u mnie 0x27. Size – rozmiar naszego wyświetlacza, mój akurat ma 2 linie po 16 znaków. Testowałem też wyświetlacz 2×20 – bez problemu korzysta z większego obszaru. W liniach i2c_line wpisujemy konfigurację naszego podłączenia – prawdopodobnie będzie taka jak moja, ze względu na budowę dostępnych modułów. Mój lcdproc.conf można pobrać poniżej.
Pozostaje tylko w OSMC zainstalować odpowiednią usługę: Ustawienia >> Menedźer dodatków >> Zainstaluj z repozytorium >> Usługi >> XBMC LCDproc >> Instaluj
Warto zrobić reboot i powinno działać. Układ poszczególnych ekranów na wyświetlaczu można sobie ustawić edytując plik: ~/.kodi/userdata/LCD.xml. Swój przykładowy również udostępniam do pobrania.



