Moje Rapsberry Pi - I2C LCD 16x2
Pro zobrazování stavů pidi počítače RPI jsem dobastlil (hlavně pro budoucí využití u zalévače trávníku) LCD displej 16x2 znaků. Displej je připojen pomocí I2C sběrnice přes převodník PCF8574. Pozor před připojením LCD k I2C RasPi je nutné použít převodník úrovní I2C 5V na I2C 3,3V, jinak hrozí poškození RasPi! Příklad převodníku I2C zde (pouze neosadíme obvod PCF na desce AD převodníku - budeme mít jeden vstup I2C 3,3V na 4 výstupy I2C 5V. Tento převodník lze použít i s Arduinem (v příloze je ukázkový kód).
ZDARMA
- schema
DONATE
- zdroj pro Arduino IDE, pro Python, desky spojů a gerber (Eagle)
Schema zapojení převodníku I2C PCF8574 na LCD:
Pokud připojíme konektor (na obrázku vlevo) k RPI (v mém případě deska zalévače trávníku) k pinům +5V, SDA, SCL, GND bude se převodník PCF8574 hlásit na I2C sběrnici na adrese 0X20. Pokud potřebujeme PCF na jiné adrese přepojíme vstupy A0,A1,A2 z GND na VCC dle této tabulky (k dispozici je 16 adres - dle IO obvodu):
Deska plošných spojů
Seznam součástek
kód gme.cz | označení | hodnota | cena/ks | ks |
433-053 | IC1 | PCF8574P | 59,0 Kč | 1 |
210-035 | T1 | BC556A | 0,9 Kč | 1 |
119-043 | R2 | RRU 1K 0207 | 2,2 Kč | 1 |
824-004 | IC1 | DIL16PZ | 12,4 Kč | 1 |
111-959 | R3 | RR 3x10K | 2,8 Kč | 1 |
832-017 | JP1,JP2 | S1G20 2,54mm kolík oboustranný | 4,9 Kč | 1 |
832-090 | (pokud potřebujeme úhel) | S1G20S 2,54mm kolík oboustranný 90 st. | 6,2 Kč | 1 |
903-060 | R1 | SMD10K trimr | 18,0 Kč | 1 |
celkem | 106,5 Kč |
Příklad použitelného LCD (řadič HD44780) displej: http://www.gme.cz/mc1602e-trv-p513-099
Pokud máme nainstalovány nástroje pro práci s I2C v RPI viz tento článek, připojíme I2C LCD k RPI a koukneme na výpis sběrnice, zda je přítomen na adrese 0x20. Výpis bude vypadat nějak takto:
sudo i2cdetect -y 1
Pokud používáme jeden z prvních RPI (Raspberry Pi 256 MB Model B), pak budeme muset změnit příkaz:
sudo i2cdetect -y 0
adresa: 0x20 = PCF8574 (adresa 0x48 je AD převodník a 0x68 je obvod RTC na desce zalévače...)
Pro obsluhu převodníku potřebujeme knihovnu pylcd2.py (můžeme ji stáhnout na původní www, nebo zde v příloze pod článkem).
Nakopírujeme (například do home/pi) knihovnu pylcd2.py a test.py do RPI a provedeme test LCD displeje...
cd /home/pi
sudo python test.py
Na LCD se začne vypisovat stav RPI (IP adresa, čas atd...)
V RPI se vypisuje tento text:
Pro výpis na LCD v našem python programu stačí vložit tento kód:
import pylcdlib # import LCD knihovny
lcd = pylcdlib.lcd(0x21,0) # adresa PCF prevodniku
# vypis na LCD
lcd.lcd_puts("Ahoj pepo",1) # text max 16 znaku radek 1
lcd.lcd_puts("jak se mas?",2) # text max 16 znaku rade 2
# pokud potrebujeme smazat displej
lcd.lcd_clear() pro smazani celeho LCD, jinak se bude radek vzdy premazavat novym textem
V příloze pod článkem je soubor i2c autodetect lcd.py, který automaticky vyhledá a zobrazí připojený obvod PCF a jeho adresu.
Komentáře
hi,
1) really you have got properly connected wires SCL and SDA? Try switching SCL and SDA.
2) really you got on the bus SCL and SDA pull-up resistors? if not add it (4k7 compared to + 3.3V)
3) really you view on the I2C address range 0x20-0x27, 0x38-0x3f?
When you enter the command: sudo -y 1 i2cdetect
5) really you got SMBus support? sudo apt-get install python-SMBus
Here see source: http://www.rpiblog.com/2012/07/interfacing-16x2-lcd-with-raspberry-pi.html
Bite run without OSPy only this script (LCD must also work simply without OSPy sprinkler) -> service ospy stop...
test.py
Import pylcdlib (you must download it on page and name pylcdlib)
lcd = pylcdlib.lcd (0x21,0) # adress your PCF
# Print to LCD
lcd.lcd_puts ( "Hello Adrian", 1)
lcd.lcd_puts ("How are you?", 2)
sudo python test.py
OSPy with LCD plugin and LCD hardware now use 10 people (that I know that it was built without error)
reagrds M
Traceback (most recent call last):
File "/home/pi/OSPy/ plugins/lcd_dis play/__init__.p y", line 83, in run
update_lcd(line 1, line2)
File "/home/pi/OSPy/ plugins/lcd_dis play/__init__.p y", line 353, in update_lcd
lcd = pylcd2.lcd(lcd_ options['addres s'], 0 if helpers.get_rpi _revision() == 1 else 1)
File "/home/pi/OSPy/ plugins/lcd_dis play/pylcd2.py" , line 45, in __init__
self.lcd_device .write(0x03)
File "/home/pi/OSPy/ plugins/lcd_dis play/pylcd2.py" , line 12, in write
self.bus.write_ byte(self.addr, byte)
IOError: [Errno 5] Input/output error
This is what I get now, any idea why?
Unfortunately, I can not you help with SIP (I no longer use Sip), so see that have I2C address 0x27 LCD display.
The error means that it is probably in the library pylcd2.py (and perhaps even pylcd2 without .py) in the directory where the plugin here thus: https://github.com/Dan-in-CA/sip_plugins/tree/master/lcd_adj problem Try to use original library: http://www.rpiblog.com/2012/07/interfacing-16x2-lcd-with-raspberry-pi.html
maybe there were some changes in the library compared to the previous Sip from Dan in CA. OSPy and SIP can not be merged together (or plugins).
Regards MP
File "/home/pi/SIP/p lugins/lcd_adj. py", line 72, in run
get_LCD_print(s elf, text_shift) # Print to LCD 16x2
File "/home/pi/SIP/p lugins/lcd_adj. py", line 134, in get_LCD_print
lcd = pylcd2.lcd(adr, 1 if get_rpi_revisio n() >= 2 else 0) # Address for PCF8574 = example 0x20, Bus Raspi = 1 (0 = 256MB, 1=512MB)
File "/home/pi/SIP/p ylcd2.py", line 36, in __init__
self.lcd_device = i2c_device(addr , port)
NameError: global name 'i2c_device' is not defined
LCD plugin encountered error: Traceback (most recent call last): A
There's more but I can fit it in here.
Could you please help?
It was asking me for pylcd2 library and I downloaded it fro a website and just put it in the SIP folder.
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Netuším co je za soubor LCD.conf, ale vidím tam Backlight=yes (to je povolení podsvícení).
MP
[hd44780]
ConnectionType=i2c
Device=/dev/i2c-1
Port=0x20
Backlight=yes
Size=20x4
DelayBus=false
DelayMult=1
Keypad=no
Dobrý den,
v knihovně pylcd2 na řádku 55 je příkaz, který nastaví na portu P7 log "0" tím sepne tranzistor podsvícení (příkaz self.lcd_write( 0x08). Zhasnutí displeje není v knihovně implementováno. Programově se displej zhasne self.lcd_write( 0x00) na portu P7 se nastaví log "1" tím tranzistor vypne.
Musíte přidat do knihovny:
# lcd led on
def led_on(self):
self.lcd_write( 0x08)
# lcd led off
def led_off(self):
self.lcd_write( 0x00)
zakomentovat radek 55 self.lcd_write( 0x08) aby se displej nezapínal hned po zapnutí. Potom v Pythonu v našem programu kde ovládáme displej stačí zadat:
lcd.led_on() pro zapnutí
a když se bude systém vypínat tak nejprve displej vypnout a potom systém vypnout
lcd.led_off() pro vypnuti
MP
a připojil i LCD , všechno jede ,ale když vypnu system tak mi pořad svíti LCD ,nenašel jsem nic jak to vypnout
,můžete mi poradit,zatím dik. Vojta
Dobrý den,
pylcd2 já vy chiňan:
P0 - D4 - RS
P1 - D5 - R/W
P2 - D6 - E
P3 - D7 - D4
P4 - RS - D5
P5 - R/W- D6
P6 - E - D7
příklad pro init v pylcd2:
76543210 port
00110000 = 0x30 // if self.reverse: (nemáme je nastaveno 0 v def __init__(self, addr, port, reverse=0):
00100000 = 0x20
else:
00000011 = 0x03 // tady změnim P0-D4,P1-D5 na piny P3-D4,P4-D5
00000010 = 0x02 // tady změnim P1-D5 na pin P4-D5
změnim na:
else:
00011000 = 0x18
00010000 = 0x10
takto budete muset předělat celou knihovnu z pinů na jiné piny...
https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html
RSS informační kanál komentářů k tomuto článku.