Librería LCD 16×2 con Python
Librería LCD 16×2 con Python

Las entradas y salidas digitales de Raspberry Pi nos permiten interactuar con dispositivos físicos como botones, leds o sensores, sin embargo es posible que en algún punto necesitemos mostrar información de procesos en nuestro proyecto, con eso en mente en este post vamos a utilizar una pantalla LCD 16×2 con Python y Raspberry Pi, además vamos a hacer nuestra propia librería para poder usarla en cualquier proyecto que necesitemos.
PANTALLA LCD 16×2
La mayoría de las pantallas LCD 16×2 comerciales son compatible con el controlador Hitachi HD44780, por lo que es muy seguro que la pantalla que utilice funcione bien.
Aunque la pantalla LCD tiene 8 pines de datos (D0 – D7), es posible utilizar los pines (D4 – D7) para transmitir información en paquetes de 4 bits, lo cual nos ayuda a reducir el número de pines de conexión con nuestra Raspberry

CONEXIÓN
Estos son los pines de conexión de la pantalla con nuestra Raspberry Pi y más abajo el diagrama para tener una representación física la conexión.
| Pin LCD | Función | Pin Pi | Función |
| 1 | GND | 6 | GND |
| 2 | +5V | 4 | 5V |
| 3 | Contraste | 6 | GND |
| 4 | RS | 8 | GPIO 14 |
| 5 | RW | 6 | GND |
| 6 | EN | 10 | GPIO 15 |
| 7 | D0 | – | – |
| 8 | D1 | – | – |
| 9 | D2 | – | – |
| 10 | D3 | – | – |
| 11 | D4 | 12 | GPIO 18 |
| 12 | D5 | 16 | GPIO 23 |
| 13 | D6 | 18 | GPIO 24 |
| 14 | D7 | 22 | GPIO 25 |
| 15 | +5V – 330 ohm | – | – |
| 16 | GND | 6 | GND |

PROGRAMACIÓN
Si bien es posible manejar en un solo proyecto de Python la programación para configurar la pantalla LCD y poder usarla en nuestra aplicación de usuario, es preferible organizar todo en módulos para que nuestro código este mejor estructurado y sea fácil de modificar y probar. Es por eso que vamos a crear una librería que maneje el funcionamiento de nuestra pantalla y la vamos a integrar en nuestra aplicación principal.
Este es un diagrama para mostrar el funcionamiento de nuestro proyecto.
Librería en Python.
Este es el código de la librería que va a controlar nuestra pantalla LCD 16×2, el autor es Matt Hawkins de la página de Raspberry-Spy.
Vamos a iniciar ejecutando desde terminal el comando sudo idle3 para abrir el entorno de programación de Python. Creamos un archivo nuevo copiamos el código y lo guardamos como LCDLIB16x2.py.
Es posible probar el funcionamiento de nuestra librería antes de usarla en nuestro programa principal, si presionamos F5 veremos un texto de prueba en la pantalla.
LCDLIB16x2.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #importimport RPi.GPIO as GPIOimport time# Define GPIO to LCD mappingLCD_RS = 14LCD_E = 15LCD_D4 = 18LCD_D5 = 23LCD_D6 = 24LCD_D7 = 25# Define some device constantsLCD_WIDTH = 16 # Maximum characters per lineLCD_CHR = TrueLCD_CMD = FalseLINE_1 = 0x80 # LCD RAM address for the 1st lineLINE_2 = 0xC0 # LCD RAM address for the 2nd line# Timing constantsE_PULSE = 0.0005E_DELAY = 0.0005GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbersGPIO.setup(LCD_E, GPIO.OUT) # EGPIO.setup(LCD_RS, GPIO.OUT) # RSGPIO.setup(LCD_D4, GPIO.OUT) # DB4GPIO.setup(LCD_D5, GPIO.OUT) # DB5GPIO.setup(LCD_D6, GPIO.OUT) # DB6GPIO.setup(LCD_D7, GPIO.OUT) # DB7def main(): lcd_init() lcd_string(" Test Libreria ",LINE_1) lcd_string(" LCD 16x2 ",LINE_2) time.sleep(5)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("Goodbye!",LINE_1) GPIO.cleanup() |
Programa principal.
Ahora vamos a usar las funciones de nuestra librería en nuestra aplicación principal.
Creamos un archivo nuevo, copiamos el siguiente código y guardamos el archivo en la misma ubicación que se encuentra nuestra librería de LCDLIB16x2.py.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #importimport timeimport LCDLIB16x2 as LCD # Initialise displayLCD.lcd_init()while True: # Send some test LCD.lcd_string(" Rasbperry Pi ",LCD.LINE_1) LCD.lcd_string(" 16x2 LCD Test ",LCD.LINE_2) time.sleep(3) # 3 second delay # Send some text LCD.lcd_string("1234567890123456",LCD.LINE_1) LCD.lcd_string("abcdefghijklmnop",LCD.LINE_2) time.sleep(3) # 3 second delay # Send some text LCD.lcd_string(" Visita ",LCD.LINE_1) LCD.lcd_string(" bot-boss.com ",LCD.LINE_2) time.sleep(3)GPIO.cleanup() |
Ejecutamos nuestro código y el texto debería mostrarse correctamente en pantalla. Como ves es muy fácil crear nuestras librerías en Python, solo debes tomar en cuenta lo siguiente:
1.- Nuestras librerías deben estar siempre en la misma ruta que nuestro código principal.
2.- Debemos importar nuestra librería usando el mismo nombre con el que la guardamos
import LCDLIB16x2 as LCD
3.- Para usar las funciones de la librería debemos hacer referencia a ellas con el nombre de la librería seguido de un punto y el nombre de la función o variable que vamos a utilizar.
LCD.lcd_string(” Rasbperry Pi “,LCD.LINE_1)
Si necesita usar diferentes GPIO de la Raspberry para controlar el LCD debe definir esos pines en la librería LCDLIB16x2.py y listo. Espero le haya servido este post.

No hay comentarios:
Publicar un comentario