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 | #import import RPi.GPIO as GPIO import time # Define GPIO to LCD mapping LCD_RS = 14 LCD_E = 15 LCD_D4 = 18 LCD_D5 = 23 LCD_D6 = 24 LCD_D7 = 25 # Define some device constants LCD_WIDTH = 16 # Maximum characters per line LCD_CHR = True LCD_CMD = False LINE_1 = 0x80 # LCD RAM address for the 1st line LINE_2 = 0xC0 # LCD RAM address for the 2nd line # Timing constants E_PULSE = 0.0005 E_DELAY = 0.0005 GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers GPIO.setup(LCD_E, GPIO.OUT) # E GPIO.setup(LCD_RS, GPIO.OUT) # RS GPIO.setup(LCD_D4, GPIO.OUT) # DB4 GPIO.setup(LCD_D5, GPIO.OUT) # DB5 GPIO.setup(LCD_D6, GPIO.OUT) # DB6 GPIO.setup(LCD_D7, GPIO.OUT) # DB7 def 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 | #import import time import LCDLIB16x2 as LCD # Initialise display LCD.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