Merhaba arkadaşlar, öncelikle baya gecikmeli olan bu yazımdan ötürü sizlerden özür dilerim. İşlerimin yoğunluğundan dolayı anca yazabiliyorum.
Bu yazımda 16×2 bir LCD Modülü Raspberry Piye nasıl bağladığımdan ve çalıştırdığımdan bahsedeceğim.
Gerekenler:
- Raspberry Pi
- 16×2 LCD Modülü. Ben mavi üstü beyaz yazılı olanı edindim.
- 2 Tane 5K Ayarlı Direnç (Biri ekran arka plan parlaklığı, diğeri ekran kontrastını ayarlamak için, hoşunuza giden değer için sabit direnç de bağlayabilirsiniz)
- Breadboard
- Breadboard üzerinde pinleri birleştirmek için Jumper Kit kullandım, siz tabi tek damarlı kablo da kullanabilirsiniz.
- Erkek-Erkek ve ayarlı dirençleri bağlayabilmem için Dişi-Erkek Jumper Kablo kullandım.
- Ben kolaylık olsun diye GPIO Breakout Kit kullandım, siz tabi bunu kullanmak zorunda değilsiniz.
- Öncelikle LCD Modülünün pinlerinden bahsetmek istiyorum:
- Ground
- VCC (5V)
- Contrast adjustment (VO)
- Register Select (RS) (RS=0: Command, RS=1: Data)
- Read/Write (R/W) R/W=0: Write, R/W=1: Read
- Enable
- Bit 0 (Not required in 4-bit operation)
- Bit 1 (Not required in 4-bit operation)
- Bit 2 (Not required in 4-bit operation)
- Bit 3 (Not required in 4-bit operation)
- Bit 4
- Bit 5
- Bit 6
- Bit 7
- LED Backlight Anode (+)
- LED Backlight Catode (-)
- Piyi şu şekilde bağladım ben:
LCD Pin Function Pi Function Pi Pin 01 GND GND P1-06 02 +5V +5V P1-02 03 Contrast GND P1-06 04 RS GPIO7 P1-26 05 RW GND P1-06 06 E GPIO8 P1-24 07 Data 0 08 Data 1 09 Data 2 10 Data 3 11 Data 4 GPIO25 P1-22 12 Data 5 GPIO24 P1-18 13 Data 6 GPIO23 P1-16 14 Data 7 GPIO18 P1-12 15 +5V via 560ohm 16 GND P1-06 - Cihaz 4 Bit moduna geçirildiği için Gerekli GPIO sayısı da azaldığından hem bağlaması hem işlemesi daha kolay oluyor. Bu sebeple böyle bağladık. Ben ayrıca 16. pin (resimde en sağdaki pin olarak kalıyor) ve 3. pin arasına 2 adet ayarlı direnç bağladım, bu sayede ekranın parlaklık ve kontrastını kolayca ayarlayabildim kendimce (ayarlı direnç bağlamazsanız full kontrasttan çalışmıyor (hepsi yanıyor) gibi görüyorsunuz).
Ayrıca aşağıdaki resimden de bağlamayı daha görsel olarak inceleyebilirsiniz:
- Daha sonra Raspberry Pi Python GPIO kütüphanesini kurdum. Bunun için aşağıdaki yolları izledim:
- Önce Raspberry Pi Python GPIO Proje sayfasına girip downloads kısmından en güncel versiyonun linkini aldım.
- Daha sonra .deb paketini şu komutla indirip kurdum (Bu yazıyı okuduğunuzda daha güncel sürüm çıkmış olabilir, lütfen kontrol edin indirmeden önce de komuttaki linki ona göre güncelleyin) (06.06.2013 tarihli en güncel python2, pthon3 ve kaynak kodu dosyalarını alternatif link olarak buradan indirebilirsiniz) 1cd $HOME
2wget https://raspberry-gpio-python.googlecode.com/files/python-rpi.gpio_0.5.2a-1_armhf.deb
3sudo dpkg -i python-rpi.gpio_0.5.2a-1_armhf.deb
4rm -R python-rpi.gpio_0.5.2a-1_armhf.deb
- Şimdi ise aşağıdaki kodu home klasörüne deneme.py olarak kaydettim ve root olarak çalıştırdım (alternatif olarak kodu buradan da indirebilirsiniz.): 1#!/usr/bin/python
2#
3# HD44780 LCD Test Script for
4# Raspberry Pi
5#
6# Author : Matt Hawkins
7# Site : Raspberry Pi Spy | Raspberry Pi tutorials, scripts, help and downloads
8#
9# Date : 26/07/2012
10#
11
12# The wiring for the LCD is as follows:
13# 1 : GND
14# 2 : 5V
15# 3 : Contrast (0-5V)*
16# 4 : RS (Register Select)
17# 5 : R/W (Read Write) - GROUND THIS PIN
18# 6 : Enable or Strobe
19# 7 : Data Bit 0 - NOT USED
20# 8 : Data Bit 1 - NOT USED
21# 9 : Data Bit 2 - NOT USED
22# 10: Data Bit 3 - NOT USED
23# 11: Data Bit 4
24# 12: Data Bit 5
25# 13: Data Bit 6
26# 14: Data Bit 7
27# 15: LCD Backlight +5V**
28# 16: LCD Backlight GND
29
30#import
31import RPi.GPIO as GPIO
32import time
33
34# Define GPIO to LCD mapping
35LCD_RS = 7
36LCD_E = 8
37LCD_D4 = 25
38LCD_D5 = 24
39LCD_D6 = 23
40LCD_D7 = 18
41
42# Define some device constants
43LCD_WIDTH = 16 # Maximum characters per line
44LCD_CHR = True
45LCD_CMD = False
46
47LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
48LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
49
50# Timing constants
51E_PULSE = 0.00005
52E_DELAY = 0.00005
53
54def main():
55 # Main program block
56
57GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
58 GPIO.setup(LCD_E, GPIO.OUT) # E
59 GPIO.setup(LCD_RS, GPIO.OUT) # RS
60 GPIO.setup(LCD_D4, GPIO.OUT) # DB4
61 GPIO.setup(LCD_D5, GPIO.OUT) # DB5
62 GPIO.setup(LCD_D6, GPIO.OUT) # DB6
63 GPIO.setup(LCD_D7, GPIO.OUT) # DB7
64
65# Initialise display
66 lcd_init()
67
68# Send some test
69 lcd_byte(LCD_LINE_1, LCD_CMD)
70 lcd_string("Rasbperry Pi")
71 lcd_byte(LCD_LINE_2, LCD_CMD)
72 lcd_string("Model B")
73
74time.sleep(3) # 3 second delay
75
76# Send some text
77 lcd_byte(LCD_LINE_1, LCD_CMD)
78 lcd_string("Raspberrypi")
79 lcd_byte(LCD_LINE_2, LCD_CMD)
80 lcd_string(".gen.tr")
81
82time.sleep(20)
83
84def lcd_init():
85 # Initialise display
86 lcd_byte(0x33,LCD_CMD)
87 lcd_byte(0x32,LCD_CMD)
88 lcd_byte(0x28,LCD_CMD)
89 lcd_byte(0x0C,LCD_CMD)
90 lcd_byte(0x06,LCD_CMD)
91 lcd_byte(0x01,LCD_CMD)
92
93def lcd_string(message):
94 # Send string to display
95
96message = message.ljust(LCD_WIDTH," ")
97
98for i in range(LCD_WIDTH):
99 lcd_byte(ord(message),LCD_CHR)
100
101def lcd_byte(bits, mode):
102 # Send byte to data pins
103 # bits = data
104 # mode = True for character
105 # False for command
106
107GPIutput(LCD_RS, mode) # RS
108
109# High bits
110 GPIutput(LCD_D4, False)
111 GPIutput(LCD_D5, False)
112 GPIutput(LCD_D6, False)
113 GPIutput(LCD_D7, False)
114 if bits&0x10==0x10:
115 GPIutput(LCD_D4, True)
116 if bits&0x20==0x20:
117 GPIutput(LCD_D5, True)
118 if bits&0x40==0x40:
119 GPIutput(LCD_D6, True)
120 if bits&0x80==0x80:
121 GPIutput(LCD_D7, True)
122
123# Toggle 'Enable' pin
124 time.sleep(E_DELAY)
125 GPIutput(LCD_E, True)
126 time.sleep(E_PULSE)
127 GPIutput(LCD_E, False)
128 time.sleep(E_DELAY)
129
130# Low bits
131 GPIutput(LCD_D4, False)
132 GPIutput(LCD_D5, False)
133 GPIutput(LCD_D6, False)
134 GPIutput(LCD_D7, False)
135 if bits&0x01==0x01:
136 GPIutput(LCD_D4, True)
137 if bits&0x02==0x02:
138 GPIutput(LCD_D5, True)
139 if bits&0x04==0x04:
140 GPIutput(LCD_D6, True)
141 if bits&0x08==0x08:
142 GPIutput(LCD_D7, True)
143
144# Toggle 'Enable' pin
145 time.sleep(E_DELAY)
146 GPIutput(LCD_E, True)
147 time.sleep(E_PULSE)
148 GPIutput(LCD_E, False)
149 time.sleep(E_DELAY)
150
151if __name__ == '__main__':
152 main()
1cd $HOME
2nano test.py
(SSHdan bağlanıyorsanız masaüstünüzde kopyaladığınız metni putty den sağ tık ile yapıştırır)
CTRL+X ve Y ile kaydettim
[*]Daha sonra kodu root olarak çalıştırdım: 1sudo python test.py
[*]Afiyet olsun