Die aktuelle Raspbian-Version „Jessie“ bietet erstmals eine integrierte GPIO-Unterstützung für Scratch. Allerdings lassen sich damit bis jetzt nur digitale Pins ein- und ausschalten oder abfragen. Eine direkte Ansteuerung der bekannten HD44780-kompatiblen LCD-Module gibt es bisher nicht. Diese lässt sich aber über ein im Hintergrund laufendes Python-Programm leicht nachrüsten.
Die Kommunikation zwischen Python und Scratch erfolgt über das Modul scratch 0.0.1a das über die Kommandozeile nachinstalliert werden muss:
sudo pip install scratch --pre
Das LCD-Modul wird im 4-Bit-Modus an den GPIO-Pins angeschlossen. Wir verwenden ein einfaches zweizeiliges Modul ohne I²C-Schnittstelle.

Anschlussschema für das LCD-Modul am Raspberry Pi
Ein Python-Programm übernimmt die Steuerung des LCD-Displays und fragt in einer Endlosschleife die Ausgabe von Scratch ab. Das Modul scratch 0.0.1a liefert bei jeder Änderung einer Scratch-Variable oder bei einer „Sende an alle“-Nachricht in Scratch eine Datenstruktur zurück. Das Programm überprüft, ob diese die Felder ‚lcd0‘ oder ‚lcd1‘ enthält und schreibt dann deren Inhalte in die obere bzw. untere Zeile des Displays.
import RPi.GPIO as GPIO
import time, scratch
s = scratch.Scratch()
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(LCD_E, GPIO.OUT)
GPIO.setup(LCD_RS, GPIO.OUT)
GPIO.setup(LCD_D4, GPIO.OUT)
GPIO.setup(LCD_D5, GPIO.OUT)
GPIO.setup(LCD_D6, GPIO.OUT)
GPIO.setup(LCD_D7, GPIO.OUT)
LCD_WIDTH = 16
LCD_LINE_1 = 0x80
LCD_LINE_2 = 0xC0
LCD_CHR = True
LCD_CMD = False
E_PULSE = 0.00005
E_DELAY = 0.00005
INIT = 0.01
pause = 0.01
def lcd_enable():
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
def lcd_byte(bits, mode):
GPIO.output(LCD_RS, mode)
GPIO.output(LCD_D4, bits&0x10==0x10)
GPIO.output(LCD_D5, bits&0x20==0x20)
GPIO.output(LCD_D6, bits&0x40==0x40)
GPIO.output(LCD_D7, bits&0x80==0x80)
lcd_enable()
GPIO.output(LCD_D4, bits&0x01==0x01)
GPIO.output(LCD_D5, bits&0x02==0x02)
GPIO.output(LCD_D6, bits&0x04==0x04)
GPIO.output(LCD_D7, bits&0x08==0x08)
lcd_enable()
def lcd_string(message):
message = message.ljust(LCD_WIDTH," ")
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
LCD_INIT = [0x33, 0x32, 0x28, 0x0C, 0x06, 0x01]
for i in LCD_INIT:
lcd_byte(i,LCD_CMD)
time.sleep(INIT)
try:
while True:
z = (s.receive())['sensor-update']
lcd_byte(LCD_LINE_1, LCD_CMD)
if z.has_key('lcd0'):
lcd_string(z['lcd0'])
lcd_byte(LCD_LINE_2, LCD_CMD)
if z.has_key('lcd1'):
lcd_string(z['lcd1'])
time.sleep(pause)
except KeyboardInterrupt:
GPIO.cleanup()
Das abgebildete Scratch-Programm zeigt eine einfache Digitaluhr auf dem LCD-Display.

Digitaluhr in Scratch mit LCD-Display
Buchtipp:

Der kleine Hacker: Programmieren für Einsteiger.
Mit Scratch schnell und effektiv programmieren lernen.
Links: amazon.de – Franzis-Verlag
Merken
Merken
Merken