Introductie
Toen de Raspberry Pi, een kleine computer voor $35 (voor het luxe model!) die 1080p video kan afspelen en geschikt is om Linux te draaien en programma’s zoals XBMC of MAME, werd aangekondigd, kon ik gewoon niet wachten om er een te pakken te krijgen. Maar zoals velen met mij ontdekten; dat was niet eenvoudig omdat de eerste lading al verkocht was op de eerste dag.
Het mooie van de RPi is dat ze zelfs goedkoper zijn dan de beperkte Arduino en Basic Stamp microcontrollers.
Voor mij was dat in eerste instantie een goed alternatief op een volledige computer om XBMC te draaien.
Toen ik XBMC eindelijk lekker had draaien met OpenELEC, wilde ik een HD44780 gebaseerd 20×4 display met LCD2USB adapter aansluiten (ik vond dit model op eBay: LCD display). Ik heb al eens eerder een HD44780 aan een BasicStamp 2 aangesloten (in de dagen dat een pentium 75 bijzonder was); dus ik dacht dat het net al te moeilijk kon zijn.
Maar sinds die dagen is het aansturen met grote sprongen vooruit gegaan. Linux, d.m.v. LCDproc, ondersteund allerlei LCD’s op een erg eenvoudige manier. Geen geknoei meer met parallel poorten, en gerommel met eigen code (zie een van mijn oudere LCD projecten).
Raspberry Pi met OpenELEC XBMC en een HD44780
De Basics
We gaan LCDproc gebruiken, een client/server setup waarbij de server het LCD specifieke deel afhandelt. De LCD’s kunnen aangestuurd/aangesloten worden via verschillende poorten (zoals USB, serieel poort, I2C, GPIO, etc). Nieuwe LCD’s worden simpel toegevoegd en er zijn al behoorlijk wat drivers beschikbaar.
De client applicatie praat met de server via TCP sockets. LCDproc heeft een demo client standaard meegeleverd welke o.a. CPU load, system load, geheugen gebruik, uptime, etc weergeeft.
Een andere client applicatie is XBMC … om echter LCDproc correct te laten werken hebben we dus een HD44780 driver nodig en die vindt je standaard niet in OpenELEC om ruimte te besparen (erg goed argument overigens). We moeten de driver toevoegen en dat kan alleen maar door zelf een image te maken.
Ik zal meteen toegeven dat ik geen expert ben … (zie een aantal posts hier) maar na veel lezen en testen besloot ik de moeite te nemen om mijn ervaringen in een artikel te zetten – hopelijk heb je er wat aan …
Build een OpenELEC image
Deels gebaseerd op de erg informatieve OpenELEC Wiki pagina: Building and Installing OpenELEC for Raspberry Pi. Ik heb de tekst ingekort en natuurlijk is het e.e.a. gedaan met een LCD aansturing in gedachten. Ik heb dit allemaal gedaan onder Ubuntu 12.04 als een virtual machine onder VMWare Fusion op een Apple Mac. Windows gebruikers: VMWare heeft een gratis VMWare Player waar je dit ook mee kunt doen!
Stap 1. De tools die we nodig hebben voor een OpenElec image
Als eerste ga je naar jouw “home” directory en met apt-get installeren we de tools die we nodig hebben om een image te maken.
1 2
| cd ~
sudo apt-get install g++ nasm flex bison gawk gperf autoconf automake m4 cvs libtool byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev libusb-dev lcdproc git-core autopoint libxml-parser-perl xfonts-utils zip |
Stap 2. Download de meest recente OpenElec source
We kunnen de source code downloaden van github als volgt:
1 2
| cd ~
git clone git://github.com/OpenELEC/OpenELEC.tv.git |
Stap 3. Initiële Project instellingen voor een building
Zodat de Raspberry Pi OpenELEC image de HD44780 LCD display ondersteund moeten we een aantal instellingen doen:
1 2
| cd projects/RPi/
nano options |
Ga naar de regel met LCD_DRIVER en verander het naar:
Sluit nano met CTRL+O (save file) en CTRL+X (sluit nano).
Stap 4. Maak de initiële build
De initiele build zal de nodige files downloaden en kan enkele uren duren (afhankelijk van jouw computer) – volgende builds zullen vlotter gaan, zeker als je kleine wijzigingen maakt.
1
| PROJECT=RPi ARCH=arm make |
Mounting de Build
De SYSTEM file kan gemount worden alsof het een drive is – Zie Mounting Squashfs aan het einde van dit artikel.
Stap 5. Settings.xml: LCD instellingen
Edit settings.xml:
1 2
| cd ~/OpenELEC.tv/packages/mediacenter/xbmc-addon-settings/source/resources/
nano settings.xml |
Zoek de regel met LCD_DRIVER en voeg aan het einde “|hd44780” toe (zodat het selecteerbaar wordt in OpenELEC settings onder XBMC):
1
| <setting id="LCD_DRIVER" type="labelenum" label="2051" values="none|irtrans|imon|imonlcd|mdm166a|MtxOrb|hd44780" sort="yes" default="none" /> |
Stap 6. lcdproc server configuratie
Nu kunnen we de default LCD instellingen doen in LCDd.conf, het configuratie bestand van LCDproc.
1 2
| cd ~/OpenELEC.tv/packages/sysutils/lcdproc/config
nano LCDd.conf |
Verander de regel met: Driver=irtrans naar: Driver=hd44780
Pas ook het [hd44780] deel aan naar:
1 2 3 4 5 6 7 8 9
| ## Hitachi HD44780 driver ##
[hd44780]
ConnectionType=lcd2usb
Contrast=850
Brightness=800
OffBrightness=0
Keypad=no
Backlight=yes
Size=20x4 |
Je kunt ook het initiële welkom bericht aanpassen (Hello=””) – Let wel op dat je het aantal karakters beperkt tot wat jouw display kan weergeven. Er is ook een GoodBye bericht maar het lijkt erop dat dit niet gebruikt wordt in XBMC
Aanvullende standaard instellingen
Zet de hd44780 als standaard:
1
| cd ~/OpenELEC.tv/packages/mediacenter/xbmc-addon-settings/config |
Edit het bestand default_settings.xml:
1
| nano default_settings.xml |
Pas de regel met LCD_DRIVER aan:
1
| <setting id="LCD_DRIVER" value="hd44780" /> |
Je kunt hier ook de standaard machine naam aanpassen (standaard is OPENELEC), b.v.:
1
| <setting id="NET_HOSTNAME" value="RPiXBMC" /> |
Stap 7. Maak weer een nieuwe build
Dit gaat AANZIENLIJK sneller:
1
| PROJECT=RPi ARCH=arm make |
Aanmaken van de SD kaart
Dit is een snelle beschrijving om een SD kaart te maken waarvan de Raspberry Pi kan opstarten – als je dit al eerder hebt gedaan en je een nieuwe build op de kaart wilt zetten dan hoef je alleen maar kernel.img en SYSTEM opnieuw te kopiëren. Bedenk wel dat in dat geval de voorgaande instellingen blijven staan …
Stap 1. Bepaal de device naam van de SD kaart (lezer).
Ik vond zelf dat het snelste werkt als je dmesg gebruikt. Steek de SD kaart in de computer, type dmesg en kijk wel device als laatste is toegevoegd. Op mijn computer was dit /dev/sdb.
Let Op!
Vanaf dit punt gaan we er vanuit dat dit /dev/sdb is! Gebruik het device dat je op jouw computer hebt gevonden!
Stap 2. Maak mount points voor de partities
1 2 3
| mkdir /media
mkdir /media/System
mkdir /media/Storage |
Stap 3. Maak partities op de SD kaart
Ben voorzichtig; Als /dev/sdb niet jouw SD kaart device is, gebruik dan het device wat je in stap 1 gevonden hebt.
Note: In onderstaande uitleg ga ik uit van maximaal 2 partities die zouden kunnen bestaan op jouw SD kaart, als je er meer hebt, dan moet je die ook verwijderen.
1 2 3 4 5 6 7 8
| sudo umount /dev/sdb
sudo umount /dev/sdb1
sudo umount /dev/sdb2
sudo parted -s /dev/sdb mklabel msdos
sudo parted -s /dev/sdb unit cyl mkpart primary fat32 -- 0 16
sudo parted -s /dev/sdb set 1 boot on
sudo parted -s /dev/sdb unit cyl mkpart primary ext2 -- 16 -2
sudo parted -s /dev/sdb print all |
De output zou er ongeveer uit moeten zien als onderstaande output:
1 2 3 4 5 6 7
| Model: Generic- Multi-Card (scsi)
Disk /dev/sdb: 7965MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 132MB 131MB primary boot, lba
2 132MB 7948MB 7816MB primary |
Stap 4. Formateer de partities
1 2 3
| sudo mkfs.vfat -n System /dev/sdb1
sudo mkfs.ext4 -L Storage /dev/sdb2
sudo partprobe |
Stap 5. Mount de partities
1 2
| sudo mount /dev/sdb1 /media/System
sudo mount /dev/sdb2 /media/Storage |
Stap 6. Kopieer de bestanden
1 2 3 4
| cd ~/OpenELEC.tv
sudo cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/arm128_start.elf /media/System/start.elf
sudo cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/bootcode.bin /media/System/
sudo cp build.OpenELEC-RPi.arm-devel/bcm2835-bootloader-*/loader.bin /media/System/ |
Merk op: het lijkt erop dat het bestand “loader.bin” niet meer bestaat in recente OpenElec distributies (bron).
Kopieer SYSTEM en kernel, merk op dat * vervangen worden door de correcte versie nummers van de build die je wilt gebruiken, bijvoorbeeld:
Vervang * door “20120902221901-r11850” als jouw build
OpenELEC-RPi.arm-devel-20120902221901-r11850.kernel heet.
1 2
| sudo cp target/OpenELEC-RPi.arm-devel-*.system /media/System/SYSTEM
sudo cp target/OpenELEC-RPi.arm-devel-*.kernel /media/System/kernel.img |
We moeten nu ook nog smdline.txt aanmaken:
1
| echo "boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 ssh quiet" | sudo tee /media/System/cmdline.txt |
Stap 7. Unmount de SD kaart voor je het verwijderd …
1 2
| sudo umount /dev/sdb1
sudo umount /dev/sdb2 |
Stap 8. Steek de SD kaart in de Raspberry Pi en boot …
De eerste keer dat je van een nieuwe SD kaart start gaat wat slomer omdat OpenELEC verschillende zaken aanmaakt zoals SSH key, swap, en de XBMC folder structuur. Volgende boots gaan sneller.
Stap 9. Nog meer instellingen
LCD support aanzetten:
Ga naar de gedeelde network folder “userdata” en bewerk het guisettings.xml bestand. Verander:
naar:
Verifieer vervolgens in de OpenELEC instellingen (als je OpenELEC op de TV ziet) dat de “hd44780” is geselecteerd als het LCD display. De OpenELEC instellingen vindt je onder het Programs menu.
Scrolling gaat te snel?
Het gebeurde met mijn display – het scrollen van regeles langer dan 20 karakters ging zo snel dat ik niet eens kon lezen wat het bericht was. je kunt dit vertragen door het bestand advancedsettings.xml in het netwerk gedeelde “userdata” folder te bewerken. Voeg aan advanced settings toe:
1 2 3
| <lcd>
<scrolldelay>8</scrolldelay>
</lcd> |
Hoe hoger dit nummer (0 – 10), hoe trager het scrollen gaat.
LCD berichten
In het bestand LCD.xml (in de netwerk gedeelde folder “userdata“) kun je instellen wat de verschillende display situaties weer gaat geven – let wel op de lengte van de regels.
Een goede bron voor welke informatie beschikbaar is zie: XBMC LCD.xml, XBMC Infolabels. Zie hieronder wat ik (tot nog toe) gebruik:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <lcd>
<!-- set this to video,music to disable the LCD on playback of music and video-->
<disableonplay>video</disableonplay>
<navigation>
<line>$INFO[System.CurrentWindow]</line>
<line>$INFO[System.CurrentControl]</line>
<line>$INFO[System.Date(ddd mmm d)] - $INFO[System.time(hh:mm xx)]</line>
<line>IP: $INFO[Network.IPAddress]</line>
</navigation>
<music>
<line>$INFO[MusicPlayer.Title]</line>
<line>$INFO[MusicPlayer.Artist]</line>
<line>$INFO[Player.Time]/$INFO[Player.Duration]</line>
<line>$INFO[LCD.ProgressBar]</line>
</music>
<video>
<line>$INFO[VideoPlayer.Title]</line>
<line>$INFO[VideoPlayer.Genre] </line>
<line>$INFO[Player.Time]/$INFO[Player.Duration]</line>
<line>$INFO[LCD.ProgressBar]</line>
</video>
<general>
<line>Hansie OpenELEC XBMC</line>
<line>$INFO[System.Date(ddd mmm d)] - $INFO[System.time(hh:mm xx)]</line>
<line>$INFO[System.ScreenWidth]x$INFO[System.ScreenHeight]</line>
<line>IP: $INFO[Network.IPAddress]</line>
</general>
<screensaver>
<line>$INFO[System.CurrentWindow]</line>
<line>$INFO[System.Date(ddd mmm d)] - $INFO[System.time(hh:mm xx)]</line>
<line>$INFO[Player.Time]/$INFO[Player.Duration]</line>
<line>$INFO[LCD.ProgressBar]</line>
</screensaver>
<xbelaunch>
<line></line>
<line>Playing</line>
<line>$INFO[System.LaunchXBE]</line>
<line></line>
</xbelaunch>
</lcd> |
Raspberry Pi OpenELEC XBMC en een HD44780 LCD display
Mounting Squashfs
Het SYSTEM bestand is in principe een heel filesysteem in een bestand in het squashfs formaat. Je kunt het mounten alsof het een gewone drive is (alleen maar lezen – geen schrijven). Ik gebruikte het om te controleren of /usr/lib/lcdproc/hd44780.so inderdaad aangemaakt was zonder dat ik door de hele SD kaart aanmaken en Raspberry Pi booten procedure hoefde te gaan. In volgend voorbeeld mount ik het tijdelijk naar /media/System (onder de veronderstelling dat je deze natuurlijk niet al gebruikt voor een andere mount):
1
| sudo mount ~/OpenELEC.tv/target/OpenELEC-RPi.arm-devel-20120903133050-r11850.system /media/System/ -t squashfs -o loop |
Het versie nummer zal voor jouw build natuurlijk anders zijn, maar je kunt nu in /media/System rond kijken.
Als je klaar bent: niet vergeten te unmounten:
1
| sudo umount /media/System |
Reacties
Er zijn 4 reacties welke je hieronder kunt lezen.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.
Leuk om te lezen. Toch wel jammer dat die driver niet in OpenELEC zit, want nu moet je voor elke update natuurlijk wel die stappen opnieuw uitvoeren. Heb je nog een mooi kastje gemaakt voor je Pi en LCD?
Martijn
Ja inderdaad wel jammer ja, ik vermoed dat je dit voor iedere update moet doen – maar ik geef toe dat ik dat een tijdje geleden al opgegeven heb …
Er staat wel een “standaard” LCD instelling in OpenElec, maar ik weet zo even niet uit het hoofd welke display types standaard ondersteund worden in de nieuwere OpenElec versies.
hans
Couldn’t understand everything since I do not speak the language, but the guides to configuring the displays of the LCD helped me a lot.
I do have one question though:
you managed to make all of this work without the LCDProc Addon?
Whenever I disable the Addon my LCD screen only displays the welcome message (configured in LCDd.conf) and stays there.
I need to enabled LCDProc to start getting things from kodi to the LCD screen.
Am I missing something?
I’d like to see if I can get rid of Kodi, because I have a small glitch on the speakers everytime the screen gets updated.
The glitch isn’t there if I disable the screen.
Thanks
bserem
Hi Bserem!
You might want to check out the English version of this article.
As for the latest OpenElec/LibreElec versions; I have not tested this approach yet … I just recently moved twice and have not taken the time to actually hook it up again.
hans