Pantalla de 2.4 pulgadas por menos de 6 dolares para tu Raspberry Pi (driver ILI9341) – Daniel Vispo Blog
Daniel Vispo Blog

Daniel Vispo Blog

Programación, electrónica, tecnologia, …

Menú principal

Saltar al contenido principal
Saltar al contenido secundario
  • Inicio
  • Kappa VDH
  • Herramientas Online
  • Donaciones
  • Contacto
  • Acerca de …
  • Cookies

Pantalla de 2.4 pulgadas por menos de 6 dolares para tu Raspberry Pi (driver ILI9341)

Publicado el 30 septiembre, 2015 por Vispo
 Donar

Como dije en el anterior post, hace poco que encargué una Raspberry Pi con la intención de convertirla en un repeater de la red del vecino, NAS, servidor de impresión, descarga de torrents, etc.. (lo que se me vaya ocurriendo)

Como la idea es que siempre este encendida y funcionando en background, no necesito un monitor conectado por HDMI las 24h, por lo que simplemente necesitaré conectarme en caso de error o cuando quiera configurar algo.

Por supuesto, me puedo conectar mediante ssh o incluso mediante UART (puerto serie) conectando un adaptador USB TTL a los pines RX y TX del conector de GPIOs, pero también es cierto que donde este una buena pantalla que se quite todo lo demás.

raspi_ili9341_01

Echando un vistazo al repertorio de displays OLED y TFT que tengo para utilizarlos con Arduinos, ESP8266s y demás micros, se me ocurrió que quizás podría adaptarle una TFT que tenia de 2,4 pulgadas de los chinos, que funciona mediante el protocolo SPI.

En concreto se trata de un display TFT con driver ILI9341 que te sale por unos 6 dolares en Ebay, con una modestísima resolución de 320×240 píxeles (en apaisado) a color, pero más que suficiente para que te saque de un apuro o incluso, para mostrar información de modo permanente.

Como la Raspberry Pi tiene pines GPIO (General Purpose Input Output) como cualquier otro micro electrónico, soporta SPI por hardware y funciona con señales lógicas de 3.3V como el propio display (no hay necesidad de hacer level shifting), me puse a investigar si existía alguna manera de enviar la shell de Linux directamente a la pantalla y ya puestos, si se podía hacer lo mismo con las X (el entorno gráfico).

raspi_ili9341_06

Y sí, la respuesta es SI SE PUEDE aunque es un poquito más complicado que simplemente conectar un monitor por VGA, HDMI, etc. En concreto, se puede conseguir gracias a un proyecto que creó drivers para diferentes displays y que actualmente, ya forma parte del código del kernel de Linux. Podéis encontrar mas info aquí: https://github.com/notro/fbtft y todos los displays soportados aquí: https://github.com/notro/fbtft/wiki/LCD-Modules. Como véis, abarca desde los típicos displays tipo Nokia antiguos, pasando por los mini OLEDs, TFTs, etc…

Paso 1. Conexion del display TFT a la Raspberry Pi.

Como he dicho, el display funciona a 3,3V y por SPI (Serial Peripherical Interface), nada de vídeos compuestos, HDMIs, VGAs u otro tipo de señales. Si no lo sabías, la gran mayoría de periféricos para electrónica como displays tipo OLED o TFT, sensores, etc.. funcionan o por SPI o por I2C, que son 2 de los protocolos serie mas comunes en electrónica (y otros UART, etc.. también, pero para otras cosas).

Lo importante del asunto, es saber que pines conectar entre el display y la Raspberry Pi para que todo funcione.

Por una parte, vamos a partir del siguiente esquema de pines de la Raspberry Pi 2, pero es igualmente válido para Raspberry 1 model B, ya que también tiene 40 pines.

raspi_pinout

Y por otro lado, detrás del display, tenemos serigrafiada la función de cada pin. Cabe destacar que toda la parte destinada al touch screen (pines bajo el nombre TOUCH) no se utilizan para nada y el pin MISO, tampoco, ya que la pantalla solo recibe datos, no tiene que enviar nada. Además, los conectores superiores destinados al lector de tarjetas SD incorporado, tampoco será utilizado.

raspi_ili9341_10

Los pines que debemos conectar desde el display a la Raspberry Pi son los siguientes:

Raspberry Pi Display TFT 2.4 ILI9341 Mas Info
PIN 1 – 3.3V PWR VCC Los 3,3 voltios requeridos para que funcione la pantalla
PIN 9 – GND GND Toma tierra
PIN 24 – SPI0 CS0 CS El Chip Select de SPI para que la pantalla sepa cuando los datos que se envien por SPI son para ella
PIN 22 – GPIO 25 RESET Reseteo del chip
PIN 18 – GPIO 24 D/C Data/Command. Aunque no es parte de SPI, sirve para decirle a la pantalla cuando se envian comandos y cuando datos.
PIN 19 – SPI0 MOSI (MOSI) Master output slave input. Los datos y comandos que el display ejecutara se envian por aqui
PIN 23 – SPI0 SCLK SCK La senal de reloj que nos permite sincronizar las comunicaciones por SPI
PIN 12 – GPIO 18 LED La backlight o la luz LED que esta detras del panel LCD y que ilumina a este

Una vez que hayáis conectado todo, debe quedar algo parecido como lo siguiente:

raspi_ili9341_12

 

raspi_ili9341_09

A destacar que el pin VCC lo podrías cambiar a otro pin 3.3V, así como el GND a cualquier GND libre. Además, los pines RESET, D/C y LED a cualquier GPIO disponible. Todo dependerá si ya tenías algo conectado a estos pines o no. Solo recuerda que GPIOs has utilizado para RESET, D/C y LED, ya que posteriormente se lo debemos comunicar al driver pertinente.

Paso 2. Configuracion del kernel de Linux y carga de drivers

Una vez que tenemos todo conectado como se indica en el apartado anterior, el siguiente paso sera configurar el kernel de Linux para que cargue los drivers necesarios para el manejo del display.

Yo en mi caso particular, estoy utilizado Raspbian, que es el Sistema Operativo por defecto que se suele utilizar con Raspberry Pi, pero en realidad lo podríais utilizar con cualquier otro sabor de Linux, siempre y cuando el kernel que utilicéis tenga los drivers apropiados. En caso que no los tenga, os tocará compilarlos, pero esto está fuera del alcance de este post.

Como dije anteriormente, los drivers que vamos a utilizar son los Frame Buffer TFT que podéis encontrar aquí: https://github.com/notro/fbtft, y que ya están integrados en las ultimas versiones del kernel de Linux.

Antes de utilizar estos drivers, asegúrate que has actualizado tu Raspbian a la última versión con un raspi-update, apt-get update y toda la mandanga. Si no sabes como se hace, busca por Internet.

raspi_ili9341_02

Para utilizar los drivers de la pantalla, debemos cargar otros necesarios como el driver que controla SPI y desactivar ciertas funcionalidades como el device tree para evitar problemas, ya que no vamos utilizar overlays.

Tanto para desactivar device tree como para cargar el driver SPI, lo podemos hacer de 2 formas:

A través de raspi-config:

sudo raspi-config

– Para desactivar device tree: Seleccionamos «8 Advanced Options», después «A5 Device tree» y cuando nos pregunte «Would you like the kernel to use Device Tree» seleccionamos «No»

raspi_config

– Para cargar el driver SPI: Seleccionamos «8 Advanced Options», después «A6 SPI» y cuando nos pregunte «Would you like the SPI kernel module to be loaded by default» seleccionamos «Yes»

A pelo, editando el fichero /boot/config.txt que se lee cada vez que el kernel se carga:

Añadimos los siguiente:

device_tree=
dtparam=spi=on

Guardamos todo y reiniciamos el sistema con un:

sudo reboot

Con esto, ya tenemos el device tree desactivado y el driver SPI cargado. Pasemos ahora a cargar el driver del display.

Para que se cargue cada vez que arranca el sistema, debemos editar el fichero /etc/modules y añadir lo siguiente:

fbtft dma
fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24,led:18 speed=48000000 fps=50 rotate=90 bgr=1

La primera linea activa el soporte DMA y la segunda, es el driver especifico para el display que tiene varias opciones entre ellas.. gpio=reset:25… que es ahí donde se le especifican los GPIO de Raspberry Pi que hemos utilizado para conectar los pines RESET, D/C y LED. el parámetro speed es la velocidad de refresco, fps los frames por segundo, etc..

raspi_ili9341_07

Tenéis mas información sobre estos parámetros en: https://github.com/notro/fbtft/wiki/fbtft_device

Si en este punto reiniciamos la Raspberry Pi, veremos que como mucho se ilumina la pantalla pero no muestra nada, ya que se ha cargado el driver cuando se ha iniciado el sistema pero no hemos enviado nada de nada a esta pantalla.

Paso 3. Envío de la shell y de las X por defecto hacia el display

El display que le hemos conectado lo podríamos utilizar para enviar vídeo, imágenes o lo que queramos bajo petición, pero en mi caso, he querido utilizarlo a modo de monitor, es decir, que me muestre todo lo que se mostraría en un monitor normal en este display, tanto la shell como el modo gráfico.

Para hacer esto, vamos utilizar un programa que automaticamente copiará el frame buffer 0 hacia frame buffer 1(/dev/fb0 hacia /dev/fb1), o lo que es lo mismo, del frame buffer primario al frame buffer del display. El programa en cuestión es https://github.com/tasanakorn/rpi-fbcp, el cual vamos a tener que clonar de Github y compilar en nuestra Raspberry Pi de la siguiente manera:

raspi_ili9341_04

sudo apt-get install cmake
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp

No deberíais tener mayores problemas, pero si encontráis que os falta alguna dependencia, pues la instaláis para poder compilar e instalar fbcp.

Finalmente, una vez compilado e instalado fbcp bajo /usr/local/bin/fbcp, solo debemos hacer que el sistema llame a este programa cada vez que se inicie. Lo logramos editando el fichero /etc/rc.local y añaadiendo al final:

/usr/local/bin/fbcp &

Por último, reiniciamos y pasados unos cuantos segundos, si has seguido las instrucciones al pie de la letra, justo antes de preguntarnos por el login, ya podremos ver la shell en nuestro display made in china. Asimismo, al cargar las X con un «startx», podremos ver el entorno gráfico también a través del display.

No es una resolución como para tirar cohetes, pero mas que suficiente si tenemos que configurar alguna cosa puntual o queremos mostrar una información en concreto sin tener que conectar nuestra Raspberry Pi a un monitor externo.

Ah!!! y sí, estoy utilizando un tupper!! nada más barato y efectivo para tus proyectos de electrónica 😀

raspi_ili9341_08

raspi_ili9341_03raspi_ili9341_05

(Visited 236 times, 1 visits today)

Si te ha gustado y quieres compartir esta página..

 Facebook Twitter Whatsapp Google+ Reddit Linkedin Favoritos

... o si prefieres hacer una donación

 Donar
Siguiente → ← Anterior
Este artículo fue publicado en De todo un poco, DIY, electrónica, informática, internet, linux, Raspberry Pi y etiquetado 3.3V, 5V, apt-get, China, CS, device tree, display, driver, fbcp, fbtft, fbtft_device, framebuffer, GND, GPIO, HDMI, I2C, ILI9341, kernel, LED, linux, login, MISO, model B, monitor, MOSI, NAS, OLED, overlay, pantalla, Raspberri Pi, raspbian, raspi-config, raspi-update, repeater, RESET, RX, SD, SPI, startx, TFT, tupper, TX, UART, VCC, VGA, video compuesto por Vispo. Enlace permanente.

Búsqueda en el blog

También te puede interesar…

  • DIY: Convertir el panel LCD de un portatil…DIY: Convertir el panel LCD de un portatil estropeado en un monitor externo con entrada VGA, HDMI, etc... Hoy os voy a enseñar como aprovechar el panel LCD que hay en el interior de la tapa de un viejo portátil y convertirlo en un monitor totalmente funcional para…
  • DIY: Convertir la webcam integrada de la tapa de un…DIY: Convertir la webcam integrada de la tapa de un portatil estropeado en una webcam USB externa Hace unos días publicaba una entrada donde explicaba como aprovechar el panel LCD de la tapa de un portátil antiguo y/o estropeado para convertirlo en un monitor externo con entrada VGA,  HDMI,…
  • Web Hacking: Inyección SQL. Primeros pasos y ejemplo…Web Hacking: Inyección SQL. Primeros pasos y ejemplo con una web real usando SQLMap Parece que desde hace un tiempo, tras el robo de cuentas de Adobe y los últimos "hackeos" a webs conocidas como "Ashley Madison" o "Patreon", alguna gente ha empezado a…
  • Hacking: Programa para descargar los vídeos de…Hacking: Programa para descargar los vídeos de atresplayer.com (la Sexta, Antena 3, etc) a tu PC en calidad HD. Introducción Hace unos cuantos meses, cansado de los fallos y la mala interfaz de la plataforma de vídeos atresplayer.com, decidí investigar sus tripas con la única finalidad de crearme un script…
  • DIY: Convertir el DVD interno de un portatil…DIY: Convertir el DVD interno de un portatil estropeado en una unidad externa por USB Hace como un mes adquirí una Raspberry Pi con la intención de convertirla en un AP personalizado, servidor de impresión, firewall, etc... y una de las cosas que quería hacerle…
  • Puesta en marcha del SoC WiFi ESP8266 ESP-12 en una…Puesta en marcha del SoC WiFi ESP8266 ESP-12 en una protoboard. En la entrada anterior os hablé de las bondades de este módulo WiFi que además tiene un microcontrolador y memoria mucho más potentes que Arduino. Algo así como un Arduino…
  • DIY: Cargador alternativo para la tablet Asus…DIY: Cargador alternativo para la tablet Asus Transformer TF101 que permite la conexion al PC mientras carga baterias Hace unos pocos años, mientras estaba en Liverpool trabajando, compré una tablet Asus Transformer TF101 en Amazon GB que me enviaron al hotel. En ese momento era el último "boom"…
  • 10240GB (10TB) de espacio en la nube con Tencent Weiyun10240GB (10TB) de espacio en la nube con Tencent Weiyun Una de las grandes ventajas de los discos duros online es la posibilidad de hacer copias de seguridad de tu disco duro y además, poder tener tus archivos siempre disponibles…
  • Introduccion al módulo SoC WiFi ESP8266 ESP-12Introduccion al módulo SoC WiFi ESP8266 ESP-12 Los módulos ESP8266 en sus distintas versiones, son módulos WiFi pensados para ser utilizados con microcontroladores como por ejemplo, los Atmel presentes en Arduino, pero en realidad se pueden utilizar con…
  • Kappa VDH – Funcionando mejor que nunca… XDKappa VDH - Funcionando mejor que nunca... XD Ayer por fin tuve un poco de tiempo y me puse a arreglar la API de Kappa VDH para que localizase la URL del vídeo de atresplayer.com y se la…

Entradas recientes

  • Hacking – Explotando la peligrosa vulnerabilidad que WinRar ha tenido durante 19 años, con código de ejemplo real.
  • El mejor programa gratis que existe para controlar tu Android desde el PC – MirallDroid v.1.0.0
  • Consejos de viaje para Vientián (Vientiane), Laos
  • Kappa VDH – Funcionando mejor que nunca… XD
  • Kappa VDH – Temporalmente fuera de servicio

Archivos

© 2021 Copyright. Daniel Vispo Blog https://www.vispo.org