.. note::

    ¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

    **¿Por qué unirse?**

    - **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
    - **Aprende y Comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades.
    - **Avances Exclusivos**: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
    - **Descuentos Especiales**: Aprovecha descuentos exclusivos en nuestros productos más recientes.
    - **Promociones Festivas y Sorteos**: Participa en sorteos y promociones especiales.

    👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo.

.. _1.1.7_py_pi5:

1.1.7 Pantalla LCD1602 I2C
==============================

Introducción
---------------

LCD1602 es una pantalla de cristal líquido de tipo carácter, que puede 
mostrar hasta 32 caracteres (16*2) al mismo tiempo.

Componentes Necesarios
--------------------------

Para este proyecto, necesitamos los siguientes componentes.

.. image:: ../python_pi5/img/1.1.7_i2c_lcd_list.png

.. raw:: html

   <br/>

Diagrama de Conexiones
-------------------------

============ ========
T-Board Name physical
SDA1         Pin 3
SCL1         Pin 5
============ ========

.. image:: ../python_pi5/img/1.1.7_i2c_lcd_schematic.png


Procedimientos del Experimento
-----------------------------------

**Paso 1:** Construye el circuito.

.. image:: ../python_pi5/img/1.1.7_i2c_lcd1602_circuit.png

**Paso 2**: Configura el I2C (consulta :ref:`i2c_config`. Si ya tienes configurado I2C, omite este paso.)

**Paso 3:** Cambia de directorio.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/davinci-kit-for-raspberry-pi/python-pi5

**Paso 4:** Ejecuta el código.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 1.1.7_Lcd1602.py

Después de ejecutar el código, verás el mensaje ``¡Saludos! De SunFounder`` mostrado en el LCD.

.. note::

    * Si obtienes el error ``FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'``, necesitas consultar :ref:`i2c_config` para habilitar el I2C.
    * Si recibes el error ``ModuleNotFoundError: No module named 'smbus2'``, por favor ejecuta ``sudo pip3 install smbus2``.
    * Si aparece el error ``OSError: [Errno 121] Remote I/O error``, significa que el módulo está mal conectado o está dañado.
    * Si el código y las conexiones son correctos, pero el LCD aún no muestra contenido, puedes ajustar el potenciómetro en la parte posterior para aumentar el contraste.

.. warning::


    Si aparece el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc` 

**Código** 

.. note::

    Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Antes de eso, asegúrate de estar en la ruta del código fuente, como ``davinci-kit-for-raspberry-pi/python-pi5``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.

.. raw:: html

    <run></run>

.. code-block:: python

   #!/usr/bin/env python3
   import LCD1602  # Importa el módulo para interfaz con LCD1602
   import time     # Importa el módulo para funciones de temporización

   def setup():
       # Inicializa el LCD con dirección I2C 0x27 y activa la retroiluminación
       LCD1602.init(0x27, 1) 
       # Muestra el mensaje 'Saludos!' en la esquina superior izquierda (fila 0, columna 0)
       LCD1602.write(0, 0, 'Greetings!') 
       # Muestra el mensaje 'De SunFounder' en la segunda línea (fila 1, columna 1)
       LCD1602.write(1, 1, 'From SunFounder') 
       time.sleep(2)  # Muestra los mensajes por 2 segundos

   try:
       setup()  # Ejecuta la función de configuración para inicializar el LCD y mostrar los mensajes
       
   except KeyboardInterrupt:
       # Limpia la pantalla del LCD si ocurre una interrupción del teclado (por ejemplo, Ctrl+C)
       LCD1602.clear()
       pass  # Procede sin realizar ninguna acción adicional


**Explicación del Código**

1. Este archivo es de código abierto para controlar el LCD1602 I2C. Nos permite usar fácilmente el LCD1602 I2C.

   .. code-block:: python

       import LCD1602  # Importa el módulo para interfaz con LCD1602

2. La función inicializa el sistema I2C con el símbolo del dispositivo designado. El primer parámetro es la dirección del dispositivo I2C, que puede detectarse con el comando i2cdetect (consulta el Apéndice para más detalles). La dirección del I2C LCD1602 generalmente es 0x27.

   .. code-block:: python

       # Inicializa el LCD con dirección I2C 0x27 y activa la retroiluminación
       LCD1602.init(0x27, 1) 

3. ``LCD1602.write`` se usa para mostrar mensajes en el LCD. Los primeros dos parámetros son la posición de fila y columna, y el tercero es el mensaje. Ahora puedes ver "¡Saludos! De SunFounder" en el LCD.

   .. code-block:: python

       # Muestra el mensaje 'Saludos!' en la esquina superior izquierda (fila 0, columna 0)
       LCD1602.write(0, 0, 'Greetings!') 
       # Muestra el mensaje 'De SunFounder' en la segunda línea (fila 1, columna 1)
       LCD1602.write(1, 1, 'From SunFounder') 

