1 GND 2 +5V 3 Kontrast, hier ein Spindelpotentiometer zwischenschließen 4 Register Select (RS) an GPIO anschließen (26) 5 Read Write (RS) —> auf GND legen 6 Enable an GPIO anschließen (19) 7 unbenutzt 8 unbenutzt 9 unbenutzt 10 unbenutzt 11 D4 an GPIO anschließen (13) 12 D5 an GPIO anschließen (6) 13 D6 an GPIO anschließen (5) 14 D7 an GPIO anschließen (11) 15 Backlight +5V —→ hier kann man auch ein Potentiometer einbauen 16 Backlight GND (Hinweis : wenn ihr andere als die im Code angegebenen PINs verwenden wollt, dann stellt das im Python Code entsprechend um)
Das Spindelpotentiometer (ihr könnt auch ein anderes Potentiometer nehmen, jeweils seitlich und in der Mitte verbinden) dient dazu, den Kontrast einzustellen. Wird der Kontrastpin auf GND gesetzt, ist das Display schlecht zu lesen
# The wiring for the LCD is as follows: # 1 : GND # 2 : 5V # 3 : Contrast (0-5V)* --> hier das Spindelpotentiometer zwischen GND und LCD PIN anschliessen # 4 : RS (Register Select) # 5 : R/W (Read Write) - GROUND THIS PIN # 6 : Enable or Strobe # 7 : Data Bit 0 - NOT USED # 8 : Data Bit 1 - NOT USED # 9 : Data Bit 2 - NOT USED # 10: Data Bit 3 - NOT USED # 11: Data Bit 4 # 12: Data Bit 5 # 13: Data Bit 6 # 14: Data Bit 7 # 15: LCD Backlight +5V** --> wer will, kann auch hier ein Potentiometer einbauen, um die Helligkeit zu regulieren # 16: LCD Backlight GND #import import RPi.GPIO as GPIO import time # Define GPIO to LCD mapping --> wer das Shield des RPi weiterverwendet, muss die PINs aendern LCD_RS = 26 LCD_E = 19 LCD_D4 = 13 LCD_D5 = 6 LCD_D6 = 5 LCD_D7 = 11 # Define some device constants LCD_WIDTH = 16 # Maximum characters per line LCD_CHR = True LCD_CMD = False LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line # Timing constants E_PULSE = 0.0005 E_DELAY = 0.0005 def main(): # Main program block GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers GPIO.setup(LCD_E, GPIO.OUT) # E GPIO.setup(LCD_RS, GPIO.OUT) # RS GPIO.setup(LCD_D4, GPIO.OUT) # DB4 GPIO.setup(LCD_D5, GPIO.OUT) # DB5 GPIO.setup(LCD_D6, GPIO.OUT) # DB6 GPIO.setup(LCD_D7, GPIO.OUT) # DB7 # Initialise display lcd_init() while True: # Send some test lcd_string("Hallo Studenten",LCD_LINE_1) lcd_string("16x2 LCD Test",LCD_LINE_2) time.sleep(3) # 3 second delay # Send some text lcd_string("wenn ihr das",LCD_LINE_1) lcd_string("lest ist gut",LCD_LINE_2) time.sleep(3) # 3 second delay # Send some text lcd_string("Computerarchitek-",LCD_LINE_1) lcd_string("tur rules !",LCD_LINE_2) time.sleep(3) # Send some text lcd_string("jetzt seid ihr",LCD_LINE_1) lcd_string("dran...und los",LCD_LINE_2) time.sleep(3) def lcd_init(): # Initialise display lcd_byte(0x33,LCD_CMD) # 110011 Initialise lcd_byte(0x32,LCD_CMD) # 110010 Initialise lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size lcd_byte(0x01,LCD_CMD) # 000001 Clear display time.sleep(E_DELAY) def lcd_byte(bits, mode): # Send byte to data pins # bits = data # mode = True for character # False for command GPIO.output(LCD_RS, mode) # RS # High bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x10==0x10: GPIO.output(LCD_D4, True) if bits&0x20==0x20: GPIO.output(LCD_D5, True) if bits&0x40==0x40: GPIO.output(LCD_D6, True) if bits&0x80==0x80: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() # Low bits GPIO.output(LCD_D4, False) GPIO.output(LCD_D5, False) GPIO.output(LCD_D6, False) GPIO.output(LCD_D7, False) if bits&0x01==0x01: GPIO.output(LCD_D4, True) if bits&0x02==0x02: GPIO.output(LCD_D5, True) if bits&0x04==0x04: GPIO.output(LCD_D6, True) if bits&0x08==0x08: GPIO.output(LCD_D7, True) # Toggle 'Enable' pin lcd_toggle_enable() def lcd_toggle_enable(): # Toggle 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_string(message,line): # Send string to display message = message.ljust(LCD_WIDTH," ") lcd_byte(line, LCD_CMD) for i in range(LCD_WIDTH): lcd_byte(ord(message[i]),LCD_CHR) if __name__ == '__main__': try: main() except KeyboardInterrupt: pass finally: lcd_byte(0x01, LCD_CMD) lcd_string("Str C gedrueckt",LCD_LINE_1) GPIO.cleanup()
Anleitung Youtube: https://www.youtube.com/watch?v=cVdSc8VYVBM Anleitung Webseite: http://www.raspberrypi-spy.co.uk/2012/07/16x2-lcd-module-control-usingpython/