16×2 LCD display

Heel lang geleden was er de MusicPlayer Plus, een uitvoering met een LCD display van 16 karakters en 2 regels, model hd44780. Hier werd dan tijdens het afspelen de informatie uit de metadata gehaald en weergegeven op het display. Door gebrek aan belangstelling (vanaf de bank zie je het display wellicht niet goed) hebben we de voorkeur gegeven aan een 7″ touch display, de MusicPlayer Touch. Maar toch… ter lering ende vermaeck, hier een uitleg hoe zo’n 16×2 display aan te sturen…

Hardware

  • Raspberry Pi 3B +
  • HifiBerry DAC, DIGI of AMP
  • Display hd44780
  • 10 KOhm instelpotmeter
  • 40-pins header
  • 16-pins header
  • Jump wires (F-F)

Alle onderdelen zijn via Internet te bestellen, bij twijfel, stuur me een mailtje…

Als eerste het display, deze wordt aangeboden op AliExpress voor € 0,68 en dichter bij huis voor € 3,00 bij o.a. GadgetBouw.nl.

Handig is nu om hier een 16-pins pin header op te solderen, die vind je ook in de Internet hobbyshops. Een soldeerbout is hier noodzakelijk voor!

Nadat de pin header gesoldeerd is, zou het handig zijn om op de HifiBerry DAC ook een 40-pin pin header te solderen. Ook deze vind je online. De GPIO-poort van de Raspberry Pi wordt hiermee verlegd naar de HifiBerry en kan zodoende gebruikt worden met de jump wires.

Nu is het eenvoudig om met jumpers (Female-to-Female) de connecties te maken van de LCD display naar de GPIO poort op de HifiBery DAC (of DIGI/AMP), ook weer online gevonden.

Mocht je nu verstandig zijn en eerst dit project op een zgn. bread-board willen uitvoeren, dan heb je dus ook Male-to-Male jump wires nodig. (maar die heb je dan wellicht al) Dat zou er dan bv. alsvolgt kunnen uitzien:

Aansluiten display aan GPIO

Gebruik de volgende tabel om met de jump wires het display aan te sluiten aan de GPIO poort op de HifiBerry:

LCD pinGPIO functieRPi Pin
#1 GNDGND#6
#2 VCC / 5V5V#2
#3 VOGND*via potmeter naar GND, #20
#4 RSGPIO 7#26
#5 RWGND#9
#6 ENGPIO 8#24
#11 D4GPIO 25#22
#12 D5GPIO 24#18
#13 D6GPIO 23#16
#14 D7GPIO 27#13
#15 BG +5V#4
#16 BG –GND#14

*Op het display komt een instelpotmeter om de helderheid van de karakters te kunnen instellen. Deze wordt dan tussen pin 3 en GND aangesloten. De overige aansluitingen spreken voor zich.

Software

  • Volumio versie 2.x
  • Docker
  • pydPiper

De Raspberry Pi, voorzien van de Hifiberry DAC en het display aangesloten kan nu opgestart worden m.b.v. de SD-Card met daarop een versie 2.x van Volumio. Eenmaal opgestart dient ssh-toegang ingesteld te worden. Dit kan op twee manieren:

  1. maak een leeg bestand genaamd ssh in de /boot-directory van de SD card
  2. Ga met een browser naar http://volumio.local/dev en klik op ‘enable SSH

Nu kan ingelogd worden met Putty (Windows) of Terminal (MacOS) als username ‘volumio‘ met het wachtwoord ‘volumio

$ ssh volumio@volumio.local

Na ingelogd te zijn dienen de volgende commando’s uitgevoerd te worden:

$ sudo su
# git clone https://github.com/dhrone/pydPiper.git
# cd pydPiper
# ./install_docker.sh
# ./install_volumio.sh

Accepteer de default instellingen, gebruik als display type ‘hd44780‘ en als muziekserver ‘volumio‘ op ‘localhost‘ via TCP-poort ‘3000‘. Dit ziet er alsvolgt uit:

 Creating configuration file for pydPiper
 ----------------------------------------
 STARTUP CONFIGURATION

 Startup mode duration (in seconds)? [5]:

 DISPLAY CONFIGURATION
 Display type? [hd44780]:
 Register select pin? [7]:
 Enable pin? [8]:
 Data 4 pin? [25]:
 Data 5 pin? [24]:
 Data 6 pin? [23]:
 Data 7 pin? [27]:
 Width of display (in pixels)? [80]:
 Height of display (in pixels)? [16]:
 Enable pulse duration (in microseconds)? [1]:
 Location of the pagefile? [pages_lcd_16x2.py]:
 Animation Smoothing (in seconds)? [0.15]:

 SYSTEM CONFIGURATION
 Location of log file? [/var/log/pydPiper.log]:
 Logging Level? [info]:
 Time Zone? [Europe/Amsterdam]:
 24-hour clock? [true]:
 Temperature Scale? [celsius]:
 Enable weather? [n]:

 MUSIC DISTRIBUTION
 Name of distribution? [volumio]:
 Server address? [localhost]:
 Port? [3000]:

 UPDATING pydPiper.cfg
 Creating pydpiper.service file

Het display zal zo’n 20 seconden na het laatste commando actief worden.

De teksten op het display kunnen aangepast worden door het bestand ‘pages_lcd_16x2.py‘ aan te passen. Het eerste deel bestaat ui de zogenaamde ‘WIDGETS‘. Hiermee definieer je welke informatie in een widget getoond moet gaan worden. Twee WIDGETs om het IP adres te tonen zien er alsvolgt uit:

'iptxt': { 'type':'text', 'format':'IP adres:\n', 'font':'small' },
'ip': { 'type':'text', 'format':'{0}', 'variables':['ip'], 'font':'small', 'varwidth':True},

De eerste widget met de naam iptxt, zal alleen maar tekst weergeven, de tweede widget, genaamd ip, geeft het daadwerkelijke adres weer. Nadat de WIDGETs gedefinieerd zijn, kunnen ze gegroepeerd worden in zogenaamde ‘CANVAS‘ definities. Een CANVAS voor het hierboven gebruikte IP-adres wordt dan:

'ipadres': { 'widgets': [ ('iptxt',10,0), ('ip',0,8) ], 'size':(80,16) },

Hierbij wordt de widget ‘iptxt‘ op positie 10,0 weergegeven, hetgeen de 2e karakter (van 5 pixels) op de bovenste regel (0) van het display is en het IP adres uit de widget ‘ip‘ wordt weergegeven op positie 0 van de tweede regel (8 pixels lager)

De instructies voor het weergeven van WIDGETs en/of CANVASsen wordt in de ‘SEQUENCES‘ aangegeven. Bijvoorbeeld als muziek geSTOPd op gePAUSEerd wordt:

name': 'seqStop',
         'canvases': [
             { 'name':'stoptime', 'duration':30 },
             { 'name':'ipadres', 'duration':5 },
             { 'name':'temperatuur', 'duration':5 },
         ],
         'conditional': "db['state']=='stop' or db['state']=='pause'"

Uiteraard zijn hier allerlei combinaties mogelijk en zijn er veel parameters te vinden in de documentatie van de repository.

Het display kan er bv. alsvolgt uit gaan zien: