Utilisation de la mémoire d'affichage Flash SPI pour stocker des ressources graphiques ou afficher une station météo domestique

Cet article est destiné à parler de la possibilité d'utiliser l'affichage de mémoire Flash intégré pour les besoins du projet.
Pour qui c'est pertinent ou tout simplement intéressant - bienvenue sous le chat.
Pendant toute une année, j'ai posé un écran de 7 "sur une étagère en attendant mon temps. Pourquoi si longtemps?
Oui, car il y avait un écran de 3,2" en usage, qui en général fonctionnait parfaitement.
Cependant, le volume d'informations affichées simultanément à 3,2 "ne me convenait pas du tout. La partie serveur de la station météo reçoit les prévisions météorologiques d'une semaine sur Internet, mais il n'y avait aucun moyen de les afficher (prévisions) simultanément avec les lectures du capteur. Par conséquent, j'ai été perplexe en achetant un écran plus grand. Au départ, j'ai regardé 5 ", mais après avoir participé à quelques reprises à la vente aux enchères, j'ai finalement acheté 7" au prix de 5 ", ce qui était très heureux. L'écran acheté est équipé d'un contrôleur SSD1963 et de 64 Mo de RAM Flash.
Lorsque le nouvel écran était encore en train de s'accumuler sur l'étagère, j'ai attiré l'attention sur la présence sur Internet de bibliothèques avec une documentation qui permettait d'utiliser la mémoire flash intégrée pour mes besoins. Jusqu'à présent, j'ai trouvé des icônes de stockage montrant la météo actuelle là-bas. Dans la version précédente avec un écran de 3,2 pouces, les icônes étaient stockées sur une carte SD insérée dans le lecteur de carte du module d'affichage.
Je tiens à noter tout de suite que le processus de chargement des fichiers de ressources dans la mémoire d'affichage n'est pas simple et pratique, j'ai donc décidé d'écrire un court article d'instructions. :
Tout d'abord, téléchargez les archives à ces liens: SPIFlash et UTFT_SPIflash et développez les archives dans le répertoire des bibliothèques. Le
téléchargement se déroule en plusieurs étapes:
1. Préparez à l'avance un ensemble d'icônes ou d'autres ressources graphiques que nous voulons utiliser dans votre projet.
2. Dans le dossier SPIflash \ tools \ FlashUploader se trouve un outil FlashUploader et une bonne documentation pour cela. En théorie, cet outil est conçu pour charger des ressources dans un affichage flash, mais en fait, en raison de problèmes de communication logicielle avec le contrôleur, cela ne peut pas être fait, donc ce processus est quelque peu allongé.
En utilisant FlashUploader, nous préparons un fichier SFD contenant un ensemble d'images préparées ou d'autres ressources.
Pour préparer et enregistrer le fichier de ressources, il n'est pas nécessaire de connecter FlashUploader et l'écran, mais si vous voulez toujours le faire, vous devez charger un croquis spécial dans Arduino, auquel l'écran est connecté, situé dans le dossier SPIflash \ examples \ Arduino (AVR) \ SPIflash_FlashUploader . Après avoir ajouté toutes les icônes et enregistré le fichier sfd, n'oubliez pas de créer un fichier avec une description du contenu joint en utilisant le bouton «Générer la liste des contenus». À l'avenir, nous utiliserons le fichier avec la description comme référence pour rechercher le numéro de l'icône souhaitée.
Capture d'écran de FlashUploader

3. Le fichier SFD résultant est écrit sur la carte SD, qui est ensuite insérée dans le lecteur de carte graphique.
4. Connectez l'écran à Arduino et chargez l'esquisse SPIflash_Restore à partir du dossier SPIflash \ examples \ Arduino (AVR).
5. Nous commençons le processus de restauration du contenu SD dans la mémoire flash de l'écran.
Capture d'écran de Serial Monitor après un téléchargement réussi

Ceci termine le processus de démarrage.
Dans le projet, vous devez accéder à la ressource souhaitée (image) par son ID dans le fichier SFD.
Un petit croquis de test pour afficher toutes les icônes (dans mon cas, 44 d'entre elles) sur l'écran
#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() {
}

Eh bien, à la fin
Affichage de la station météo en état de marche

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


All Articles