Pantalla LCD

Pantalla LCD

Vamos a hablar ahora sobre una pantalla LCD (Liquid Cristal Display) que hemos usado con la Raspberry Pi, para mostrar por ejemplo la IP de la misma, entre otras cosas.

La que nosotros elegimos es una de 16x2 (2 líneas de 16 caracteres) con el controlador HD44780, que puede encontrarse por menos de 2 euros.

El diagrama de bloques de la pantalla es el siguiente:

Conexion-LCD-HD44780

Para conectarla a la Raspberry Pi sin utilizar demasiados pines, y evitar tener que utilizar un expansor de puertos, se decidió utilizar el LCD en modo 4 bits, por lo que de los 8 pines de datos que tiene, sólo se conectan a GPIOs de la Raspberry los 4 más altos (D4 …D7).

En este caso puede conectarse el pin R/W directamente a masa, puesto que sólo se va a escribir sobre la pantalla, pero no se va a leer de esta.

El conexionado quedaría de la siguiente manera: Conexion-LCD-HD44780-RPI

Con ayuda de un potenciómetro de 10 kΩ conectado al pin Vo del LCD, a masa, y a 5V puede ajustarse el contraste de la pantalla.

Conexion-LCD-HD44780-RPI-esquematico

En cuanto al software, para manejar el LCD utilizaremos Python, y en concreto vamos a usar también la librería Adafruit_CharLCD.py.

En el programa simplemente obtenemos la ip de la Rasberry en la primera función (get_ip_address). Luego al constructor de la libreria comentada anteriormente, le pasamos los pines a los que hemos conectado la pantalla, el número de filas y de columnas, así como el color de fondo. A continuación con la función message de la misma librería, escribimos el mensaje que queremos mostrar por pantalla.

El código quedaría de la siguiente manera:

#!/usr/bin/python
# -*- coding: utf-8 -*-
#################################################
#												#
# Ip lcd module									#
# Authors: Ismael Tobar and Raquel Muñoz        #
#												#
#################################################

#----Libraries
import socket
import smbus
import fcntl
import struct
import Adafruit_CharLCD as LCD
from time import sleep

#status variables
DISCONNECTED = 0
CONNECTED_OK = 1
CONNECTED_ERROR = 2

#Server
PORT = 50000

#LCD pins
RS = 25  
EN = 5
D4 = 26
D5 = 19
D6 = 13
D7 = 6

#Constants
backlight = 0 #
columns = 16
rows    = 2
status = DISCONNECTED

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])
lcd = LCD.Adafruit_CharLCD(RS, EN, D4, D5, D6, D7,columns, rows, backlight)
ip_ad = get_ip_address('wlan0')
try:
  lcd.message('IP:'+ip_ad+'\nPort:'+str(PORT))
  status = CONNECTED_OK
except Exception as e:
  status = CONNECTED_ERROR

Si te ha interesado esta entrada, puedes ver aquí para que hemos utilizado esta pantalla LCD.