ExplorerHAT

LCD-Display an das Explorer HAT Pro anschliessen

Das Explorer HAT Pro von Pimoroni ist ein großartiges kleines Erweiterungsboard für den Raspberry Pi, das direkt auf die GPIO Sockelleiste gesteckt wird. Es besitzt 4 LEDs, 8 Touch-Buttons, 4 Analogeingänge, 4 digitale Ein- und Ausgänge, 2 Motortreiber und ein kleines Steckbrett. Damit bietet es eine ideale Basis für kleinere Experimente. Hier ein Foto meines RPi mit dem aufgesteckten HAT:


Bild des Explorer HAT Pro auf meinem Raspberry Pi
Das Gehäuse ist ein PiBow ebenfalls von Pimoroni, erhältlich ebenso wie das Explorer HAT hier: Pimoroni Shop

Leider belegt das Explorer HAT fast alle verfügbaren GPIO Pins und besitzt kein Display (vielleicht gibt es ja mal eine Version mit kleinem OLED-Display ?). Es gibt aber einen Weg ein einfaches LCD-Display mit dem Controller HD44780 anzuschließen, ohne dabei allzu viele Anschlüsse zu verwenden.

Anstatt das LCD direkt mit dem Explorer HAT zu verbinden, wird ein Schieberegister 74HC595 zwischengeschaltet. Dadurch benötigt man nur 3 Pins (plus 5V und MASSE). Für mein Beispiel hier habe ich die Pins TX, RX und PWM verwendet, da ich diese nicht anderweitig benutze. Es geht aber natürlich auch mit anderen Kontakten...

Anschlüsse an das Shift-Register 74hc595:

pin 1 (Q1) an LCD pin 6 (E)
pin 2 (Q2) an LCD pin 11 (D4)
pin 3 (Q3) an LCD pin 12 (D5)
pin4 (Q4) an LCD pin13 (D6)
pin 5(Q5) an LCD pin14 (D7)
pin 6, pin 7 N/C
pin 8 an GND
pin 9 N/C
pin 10 (MR) an 5V
pin 11 (SH_CP) an PWM
pin 12 (ST_CP) an RX
pin 13 (OE) an GND
pin 14 (DS) an TX
pin 15 (Q0) an LCD pin 4 (RS)
pin 16 an 5V



Das Board-Layout sieht so aus:



Über die beiden Poti's (5kOhm) kann die Hintergrundbeleuchtung und der Kontrast geregelt werden.

ACHTUNG: der Sockel TX auf dem Explorer HAT ist nicht mit TX auf dem RPi verbunden, sondern mit RX (zumindest bei meinem Exemplar) ! Gleiches gilt für RX.
Wenn man also den GPIO Pin BCM 15 auf Pegel High setzt, dann ist TX auf dem Explorer HAT auf High.

Nun zur Software: sowohl der LCD-Treiber-IC (HD44780) als auch das Schieberegister 74HC595 werden bereits durch die wiringPi Bibliothek von Gordon Henderson unterstützt [wiringPi library]. Auf der Webseite finden sich auch die Anleitungen zur Installation auf dem Raspberry Pi. Für Python benötigt man noch einen Wrapper, der hier zu finden ist: https://github.com/Gadgetoid/WiringPi2-Python.

Anbei ein Beispielprogramm, das zuerst einen kurzen Text auf dem Display ausgibt und dann die Uhrzeit und die IP-Adresse in einer Endlosschleife:

#!/usr/bin/python
#
# short example to access a LCD with a HD44780 controller througha shift register 74hc595
#  (c)  2015 Frank Seliger
#

from wiringpi2 import *
from subprocess import *
from time import sleep, strftime
from datetime import datetime

wiringPiGpioSetup() #use wiringPi pin scheme

#assign values to 595's pins
pinBase = 100
RS =  pinBase + 0
E =   RS + 1
DB4 = E + 1
DB5 = DB4 + 1
DB6 = DB5 + 1
DB7 = DB6 + 1

# Pi's pin out using GPIO scheme
dataPin, clockPin, latchPin = 15, 18, 14

#                          pin @ Q0, num pins used, SER    , SRCLK   , RCLK
sr595Setup (pinBase , 6 , dataPin, clockPin, latchPin)

# Now, let's handle the HD44780 ...
# RS, E, DB4, DB5, DB6 and DB7's signals are coming out of the 595
lcd = lcdInit (2, 16, 4, RS, E, DB4, DB5, DB6, DB7, 0,0,0,0)
lcdHome(lcd)
lcdClear(lcd)
lcdPosition(lcd, 0, 0)
lcdPuts(lcd, "Hooray !")
lcdPosition(lcd, 0, 1)
lcdPuts(lcd, "HAT-LCD working")

sleep(5)

cmd = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"

def run_cmd(cmd):
        p = Popen(cmd, shell=True, stdout=PIPE)
        output = p.communicate()[0]
        return output

while 1:
    lcdClear(lcd)
        ipaddr = run_cmd(cmd)
        lcdPosition(lcd, 0, 0)
        lcdPuts(lcd, datetime.now().strftime('%m-%d  %H:%M:%S'))
        lcdPosition(lcd, 0, 1)
        lcdPrintf(lcd, '%s' % ( ipaddr ) )
        sleep(2)


Hier das Ergebnis:




Keine Kommentare:

Kommentar veröffentlichen