6 de enero de 2021

Conectar y programar una Pantalla LCD 20x4 en RPi4 con Python

Protocolo:

1) Activar I2C en RPi4

    $ sudo raspi-config

        3- Interface Options

        P5 I2C Enable/disable automatic loading of I2C Kernel Module

        Yes

 

2) Conectar el LCD +I2C al Gpio del RPi:

    I2C        Gpio RPi

    VCC    -    3.3V

    GND   -    GND

    SDA    -    #2 SDA

    SCL     -    #3 SCL

 

3) Instalar I2C-Tools y SMBUS:

    # aptitude install i2c-tools python3-smbus

 

4) Detectar el I2C

    $ sudo i2cdetect -y 1

         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --   

Vemos que en mi caso el I2C este en la dirección 27, esto lo utilizaremos en el siguiente paso.

 

 5) Descargar Librerías

Descargar las librerías lcd_display.py e i2c_lib.py de la dirección: https://github.com/paulbarber/raspi-gpio

 

    $ wget https://raw.githubusercontent.com/paulbarber/raspi-gpio/master/i2c_lib.py

    $ wget https://raw.githubusercontent.com/paulbarber/raspi-gpio/master/lcd_display.py


6) Modificar la librería lcd_display.py:

Modificación 1:

    $ nano  lcd_display.py

        ...
        # LCD Address
        ADDRESS = 0x27 <--- Modificar esto poniendo la direccion I2C

        ...

Modificación 2:

Para utilizar un display de 20×4 es necesario hacer algunas modificaciones adicionales,

Buscar las líneas (sobre la linea 90):

    """display a string on the given line of the display, 1 or 2, string is truncated to 16 chars and centred"""
    centered_string = string.center(16)
    if line == 1:
      self.write(0x80)
    if line == 2:
      self.write(0xC0)


y cambiarlas por:

    """display a string on the given line of the display, 1 or 2, string is truncated to 16 chars and centred"""
    centered_string = string.center(20)
    if line == 1:
      self.write(0x80)
    if line == 2:
      self.write(0xC0)
    if line == 3:
      self.write(0x94)
    if line == 4:
      self.write(0xD4)

Con esto se ha adaptado para un display con 20 caracteres horizontales y 4 líneas.

 

7) Probar el lcd: Script en python3:

#!/usr/bin/python3
from lcd_display import lcd
from time import sleep

lcd = lcd()

t = 0.4

while True:
    lcd.display_string("Hello World Display",1)
    sleep(t)
    lcd.display_string("Hello World Display",2)
    sleep(t)
    lcd.display_string("Hello World Display",3)
    sleep(t)
    lcd.display_string("Hello World Display",4)
    sleep(t)
    lcd.clear()
    sleep(t)

 

Bibliografía:

https://openhardware.pe/contactando-un-display-lcd-de-20x4-a-rasperrt-pi-mediante-i2c-i2c-iii/


Update:

La librería para programar el LCD es muy limitada. Hay otra mas completa en:

https://pypi.org/project/RPLCD/

https://rplcd.readthedocs.io/en/stable/usage.html#writing-to-display

No hay comentarios:

Publicar un comentario