Media Center z Raspberry Pi

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.

mc4

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)
i2c

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.

Materiały do pobrania

mc1 mc2 mc3

Ten wpis został opublikowany w kategorii Projekty. Dodaj zakładkę do bezpośredniego odnośnika.