Pagina 1 van 1

Raspberry Pi OpenELEC – Met een HD44780 display

Raspberry Pi OpenELEC – Met een HD44780 display
   4

Je bent misschien bekend met XBMC, een van de beste (en vooral: GRATIS) Media Center systemen/programma’s.

Je hebt misschien ook gehoord van de $35 computer met de naam Raspberry Pi, en het feit dat een aantal mensen XBMC aan de praat heeft gekregen op deze computer; RaspBMC en mijn favoriet OpenELEC.

In dit artikel laat ik je zien hoe je een LCD display (Hitachi HD44780 controller gebaseerd) met een LCD2USB aan kunt sturen via Raspberry Pi welke OpenELEC XBMC draait.

Ook RaspBMC gebruikers zouden hier handige info in kunnen vinden.
Er is ook een project waarbij een HD44780 gebaseerd display zonder LCD2USB direct op de GPIO aangesloten wordt: lees deze post. De lcdproc handleiding pagina’s laat je meer weten hoe je lcdproc correct instelt voor een HD44780.

N.b.: Deze instructies zou ook OpenELEC versies kunnen werken (Generic, ATV, Fusion, ION, etc).




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

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:


1
LCD_DRIVER="all"

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:


1
<haslcd>false</haslcd>

naar:


1
<haslcd>true</haslcd>

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

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

Donatie Opties


Donaties worden zeer gewaardeerd, maar zijn zeker niet vereist. Donaties worden gebruikt voor het dekken van kosten voor web-hosting en project materialen, en eventueel voor een drankje of een snack. Voor wie al gedoneerd heeft: Hartelijk dank! Het is werkelijk geweldig om te zien dat men onze artikelen en applicaties waardeert.

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 opmerking plaatsen door op de "Reageer" knop te klikken.

  • 11 mei 2016 - 11:20 - Martijn Reactie Link

    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?

    Beantwoorden

    Martijn

    • 11 mei 2016 - 11:47 - hans - Auteur: Reactie Link

      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.

      Beantwoorden

      hans

  • 22 nov 2016 - 16:51 - bserem Reactie Link

    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

    Beantwoorden

    bserem



Jouw Reactie ...

Vriendelijk verzoek om hier geen lange teksten te plaatsen (zoals source codes, log files of config files). Gebruik daarvoor het Forum.

Deel met anderen:
*
*
Houd me op de hoogte van nieuwe reacties (email).
       Gebruik jouw RSS reader om reacties te volgen.


Tweaking4All uses the free Gravatar service for Avatar display.
Tweaking4All zal nooit jouw email adres met anderen delen.