Wyświetlacz LCD jest bardzo przydatny w projektach, kiedy chcemy wyświetlić jakieś informacje a Raspberry nie jest podłączony do monitora. Możliwość bezpośredniego odczytu jakiś informacji bez konieczności logowania się przez SSH jest w takich sytuacjach przydatna.
W tym artykule zajmiemy się podłączeniem LCD kitu do Raspberry Pi. Użyjemy do tego celu tylko 6 pinów GPIO.
Jakie są zalety takiego podłączenia ?
- bardzo proste
- nie potrzeba dodatkowych sterowników (nie tak jak w przypadku modułów do LCD komunikujących się np. po szynie I2C)
- nie zajmujemy portu szeregowego, który może się nam przydać w projekcie (na rynku są również dostępne wyświetlacze z interfejscem UART)
Przykładowy program, który został użyty w teście ma za zadanie wyświetlić datę, aktualną godzinę oraz adres IP naszego Raspberry (bardzo przydatne jeśli nasze RPI podłączone jest do sieci bezprzewodowej, a my nie pamiętamy adresu jaki został mu przydzielony).
Co nam będzie potrzebne:
Podłączenie interfejsu GPIO
Jeśli spojrzycie na najzwyklejszy wyświetlacz 2x16 zobaczycie, że posiada on 16 pinów. My będziemy potrzebować tylko 6 pinów do sterowania.
Na tylnej części wyświetlacza widoczna jest numeracja pinów. Oznaczony jest pin nr. 1 oraz ostatni 16pin.
Piny w LCD:
- Masa
- VCC - 5v nie 3.3v
- Ustawienie kontrastu (wyjście potencjometra)
- Wybór rejestru (RS) RS=0 : wysyłanie komend; RS=1 : wysyłanie dancyh
- Read/Write (R/W). R/W=0: Zapis, R/W=1: Odczyt (tego pinu nie używamy)
- Zegar (Enable).
- Bit 0 (nie używany)
- Bit 1 (nie używany)
- Bit 2 (nie używany)
- Bit 3 (nie używany)
- Bit 4
- Bit 5
- Bit 6
- Bit 7
- podświetlenie LED Anoda (+)
- podświetlenie LED Katoda (-)
- Pin #1 LCD masa (czarny)
- Pin #2 LCD zasilanie +5V (czerwony)
- Pin #3 (Vo) środkowa nóżka potencjometru (zółty)
- Pin #4 (RS) -> cobbler #25 (zielony)
- Pin #5 (RW) do masy (czarny)
- Pin #6 (EN) -> cobbler #24 (szary)
- pomijamy piny #7, #8, #9 and #10 na LCD
- Pin #11 (D4) -> cobbler #23 (biały)
- Pin #12 (D5) -> cobbler #17 (fioletowy)
- Pin #13 (D6) -> cobber #21 (różowy paskowany)
- Pin #14 (D7) -> cobber #22 (brązowy)
- Pin #15 (LED +) zasilanie +5V (czerwony)
- Pin #16 (LED -) masa (czarny)
Na koniec jeszcze raz sprawdzcie połączenia czy się nigdzie nie pomyliliście. Warto dodać, że powyższe podłączenie jest przykładowe. Każdy może dowolnie zmienić ustawienie na takie, które mu pasuje. Należy tylko pamiętać, aby potem pozmieniać piny w pliku konfiguracyjnym. Nasze podłączenie jest inne od tego, które jest w bibliotece - zmieniliśmy dwa piny. Jeśli teraz podłączycie cobbler do Raspberry Pi powinniście zobaczyć poniższe zdjęcie. Możecie sprawdzić czy regulacja kontrastu potencjometrem działa.
Jeśli z jakiegoś powodu kręcąc potencjometrem nie widzicie górnej lini prostokątów, musicie sprawdzić połączenia. Jeśli wszystko jest połączone dobrze to standardowo jeśli nie zainicjujemy wyświetlacza powinien nam się zapalić górny rząd.
Paczki
W celu poprawnego działania należy zaopatrzyć się w odpowiednie paczki, które możecie ściągnąć i zainstalować korzystając z poniższych komend.
Paczka dla Pythona (2.x)
$ sudo apt-get install python-dev
Aktualizacja dystrybucji ( w celu poprawnego działania RPi.GPIO 0.3.1a)
$ sudo apt-get install python-setuptools
$ sudo easy_install -U distribute
$ sudo apt-get install python-pip
Instalacja rpi.gpio (0.3.1a) lub wersji późniejszej
$ sudo pip install rpi.gpio
Skrypt w Pythonie
Skorzystamy z kompletu przygotowanego przez Adafruit’a. Na swoim Github’ie udostępniają oni komplet skryptów do pierwszego uruchomienia oraz testu wyświetlacza LCD.
My będziemy korzystali z dwóch poniższych skryptów:
- Adafruit_CharLCD.py - zawiera klasę do kontroli LCD
- Adafruit_CharLCD_IPclock_example.py - kod, który wyświetli nam adres IP naszego Raspberry, datę oraz czas
Najłatwiejszym sposobem na pobranie tych plików jest wpięcie kabla Ethernet do naszego RPI i sklonowanie paczki poleceniem “git”.
Korzystamy z poniższych komend:
apt-get install git
git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code
cd Adafruit_CharLCD
Ostatnia z nich przenosi nas do folderu Adafruit_CharLCD.
Teraz wystarczy odpalić plik Adafruit_CharLCD.py aby sprawdzić czy wszystko jest ok. Pamiętacie, że wyżej w tekście wspomnieliśmy o zamianie pinów? Tak to jest ten moment, w którym należy dokonać zmiany w pliku konfiguracyjnym. Używając polecenia 'nano Adafruit_CharLCD.py' możemy zmienić piny.
Po zmianie pinów naciskamy “ctrl+X” i wychodzimy. Następnie wpisujemy:
chmod +x Adafruit_CharLCD.py
sudo ./Adafruit_CharLCD.py
Na wyświetlaczu powinna się wyświetlić poniższa informacja.
Zegarek
Kolejny przykład to program, który wyświetli na naszym LCD’ku datę, godzinę oraz adres IP naszego RPI. Domyślnie w programie jest ustawione wyświetlanie adresu Ethernet (eth0), jeśli macie podłączone Raspberry PI za pomocą karty WiFi musicie zmienić w linijce “ip addr show” eth0 na wlan0 lub wlan1, etc. Zrobicie to podobnie jak w poprzednim przypadku używając komendy nano.
#!/usr/bin/python
from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime
lcd = Adafruit_CharLCD()
cmd = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"
lcd.begin(16,1)
def run_cmd(cmd):
p = Popen(cmd, shell=True, stdout=PIPE)
output = p.communicate()[0]
return output
while 1:
lcd.clear()
ipaddr = run_cmd(cmd)
lcd.message(datetime.now().strftime('%b %d %H:%M:%S\n'))
lcd.message('IP %s' % ( ipaddr ) )
sleep(2)
Po tym zabiegu możemy uruchomić powyższy program używając komendy:
$ sudo ./Adafruit_CharLCD_IPclock_example.py
Własny tekst
Powyżej skorzystaliśmy z gotowego rozwiązania, a co gdybyśmy chcieli wyświetlić własny tekst np. słynne Hello World?
Wystarczy zmienić linijkę odpowiadającą np. za wyświetlanie adresu IP.
lcd.message(‘Hello World’)
a do linijki z adresem IP dodajemy #, który utworzy z niej komentarz
Cały kod będzie wyglądał teraz tak:
#!/usr/bin/python
from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime
lcd = Adafruit_CharLCD()
cmd = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"
lcd.begin(16,1)
def run_cmd(cmd):
p = Popen(cmd, shell=True, stdout=PIPE)
output = p.communicate()[0]
return output
while 1:
lcd.clear()
ipaddr = run_cmd(cmd)
lcd.message(datetime.now().strftime('%b %d %H:%M:%S\n'))
lcd.message(‘Hello World’)
#lcd.message('IP %s' % ( ipaddr ) )
sleep(2)
Czego się własnie nauczyłeś
W tym artykule przedstawiliśmy następujące zagadnienia
- jak podłączyć znakowy wyświetlacz LCD
- podłączenie prostego układu elektronicznego na płytce stykowej
- wyświetlanie godziny, adresu IP naszego RPI lub zdefiniowanego przez użytkownika tekstu