Uso de la memoria de visualización SPI Flash para almacenar recursos gráficos o mostrar una estación meteorológica doméstica

Este artículo pretende hablar sobre la posibilidad de utilizar la pantalla de memoria Flash integrada para las necesidades del proyecto.
Para quien es relevante o simplemente interesante, bienvenido debajo del gato.
Durante todo un año coloqué una pantalla de 7 "en un estante esperando mi tiempo. ¿Por qué tanto tiempo?
Sí, porque había una pantalla de 3.2" en uso, que en general funcionó bien.
Sin embargo, el volumen de información mostrada simultáneamente en 3.2 "no me convenía en absoluto. La parte del servidor de la estación meteorológica recibe el pronóstico del tiempo de una semana de Internet, pero no había forma de mostrarlo (pronóstico) simultáneamente con las lecturas del sensor. Por lo tanto, me sorprendió comprar una pantalla más grande. Inicialmente, miré 5 ", pero después de participar un par de veces en la subasta, al final compré 7" a un precio de 5 ", lo cual fue muy satisfactorio. La pantalla comprada está equipada con un controlador SSD1963 y 64 MB de RAM Flash.
Cuando la nueva pantalla aún acumulaba polvo en el estante, llamé la atención sobre la presencia en Internet de bibliotecas con documentación que permitía usar la memoria flash incorporada para mis necesidades. Hasta ahora, he encontrado iconos de almacenamiento que muestran el clima actual allí. En la versión anterior con una pantalla de 3.2 ", los íconos se almacenaban en una tarjeta SD insertada en el lector de tarjetas del módulo de pantalla.
Quiero señalar de inmediato que el proceso de cargar archivos de recursos en la memoria de la pantalla no es simple y conveniente, así que decidí escribir un breve artículo de instrucciones. Entonces, comencemos :
Primero, descargue los archivos en estos enlaces: SPIFlash y UTFT_SPIflash y expanda los archivos en el directorio de bibliotecas. La
descarga consta de varios pasos:
1. Prepare de antemano un conjunto de iconos u otros recursos gráficos que queremos usar en su proyecto.
2. En la carpeta SPIflash \ tools \ FlashUploader se encuentra la herramienta FlashUploader y una buena documentación para ello. En teoría, esta herramienta está diseñada para cargar recursos en una pantalla flash, pero de hecho, debido a problemas con la comunicación del software con el controlador, esto no se puede hacer, por lo que este proceso se alarga un poco.
Con FlashUploader, preparamos un archivo SFD que contiene un conjunto de imágenes preparadas u otros recursos.
Para preparar y guardar el archivo de recursos, no es necesario conectar FlashUploader y la pantalla, sin embargo, si aún desea hacerlo, debe cargar un boceto especial en Arduino, al que está conectada la pantalla, ubicada en la carpeta SPIflash \ examples \ Arduino (AVR) \ SPIflash_FlashUploader . Después de agregar todos los íconos y guardar el archivo sfd, no olvide crear un archivo con una descripción del contenido adjunto utilizando el botón "Generar lista de contenido". En el futuro, usamos el archivo con la descripción como referencia para buscar el número del icono deseado.
Captura de pantalla de FlashUploader

3. El archivo SFD resultante se escribe en la tarjeta SD, que luego se inserta en el lector de tarjetas de visualización.
4. Conecte la pantalla a Arduino y cargue el boceto SPIflash_Restore desde la carpeta SPIflash \ examples \ Arduino (AVR).
5. Comenzamos el proceso de restaurar los contenidos SD a la memoria flash de la pantalla.
Captura de pantalla de Serial Monitor después de una carga exitosa

Esto completa el proceso de arranque.
En el proyecto, debe acceder al recurso (imagen) deseado por su ID en el archivo SFD.
Un pequeño boceto de prueba para mostrar todos los iconos (en mi caso, 44 ​​de ellos) en la pantalla
#include <SPI.h>
#include <UTFT.h>
#include <SPIflash.h>
#include <UTFT_SPIflash.h>
//////      ////////
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
///////////////////////////////////
//  
UTFT myGLCD (CTE70, 38, 39, 40, 41);
// myFlash(<SS>); (if using the hardware SPI pins. See the manual for other configurations.)
SPIflash      myFlash(45);
UTFT_SPIflash myFiles(&myGLCD, &myFlash);
//////////////////////////////////////////////////
void setup() {
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.setBright(7);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.clrScr();
  myFlash.begin();
  if (myFlash.ID_device == 0)
  {
    myGLCD.print(F("Unknown flash device!"), 10, 10);
    while (true) {};
  }
  TestIcon2Display(10, 10);
}

void TestIcon2Display(int x, int y)
{
  for (int i = 0; i < 44; i++)
  {
      Serial.println(i);
    myFiles.loadBitmap(i, x, y);
    x = x + 150;
    if (x > 800 - 150)
    {
      x = 10;
      y = y + 110;
    }
    if (y > 480 - 110) y = 10;
    delay(700);
  }
}

void loop() {
}

Bueno al final
Visualización de la estación meteorológica en condiciones de trabajo.

Source: https://habr.com/ru/post/es388449/


All Articles