Verwenden des SPI-Flash-Anzeigespeichers zum Speichern von Grafikressourcen oder zum Anzeigen einer Heimwetterstation

Dieser Artikel soll über die Möglichkeit sprechen, die integrierte Flash-Speicheranzeige für die Anforderungen des Projekts zu verwenden.
Für wen es relevant oder nur interessant ist - willkommen unter der Katze.
Ein ganzes Jahr lang legte ich ein 7-Zoll-Display auf ein Regal und wartete auf meine Zeit. Warum so lange?
Ja, weil ein 3,2-Zoll-Display verwendet wurde, das im Allgemeinen gut funktionierte.
Das Volumen der gleichzeitig angezeigten Informationen bei 3,2 Zoll passte jedoch überhaupt nicht zu mir. Der Serverteil der Wetterstation empfängt eine Wettervorhersage für eine Woche aus dem Internet, aber es gab keine Möglichkeit, sie gleichzeitig mit den Sensorwerten anzuzeigen (Vorhersage). Daher war ich verwirrt, als ich einen größeren Bildschirm kaufte. Anfangs habe ich mir 5 "angesehen, aber nachdem ich ein paar Mal an der Auktion teilgenommen hatte, kaufte ich am Ende 7" zu einem Preis von 5 ", was sehr erfreut war. Das gekaufte Display ist mit einem SSD1963-Controller und 64 MB Flash-RAM ausgestattet.
Als das neue Display noch im Regal verstaubt war, machte ich auf das Vorhandensein von Bibliotheken im Internet aufmerksam, deren Dokumentation es ermöglichte, den eingebauten Flash-Speicher für meine Bedürfnisse zu verwenden. Bisher habe ich mir Symbole ausgedacht, die das aktuelle Wetter dort anzeigen. In der vorherigen Version mit einem 3,2-Zoll-Display wurden die Symbole auf einer SD-Karte gespeichert, die in den Kartenleser des Anzeigemoduls eingelegt war.
Ich möchte sofort darauf hinweisen, dass das Laden von Ressourcendateien in den Anzeigespeicher nicht einfach und bequem ist. Deshalb habe ich beschlossen, einen kurzen Anleitungsartikel zu schreiben :
Laden Sie zunächst die Archive unter den folgenden Links herunter: SPIFlash und UTFT_SPIflash, und erweitern Sie die Archive in das Bibliotheksverzeichnis. Das
Herunterladen besteht aus mehreren Schritten:
1. Bereiten Sie im Voraus eine Reihe von Symbolen oder anderen grafischen Ressourcen vor, die wir in Ihrem Projekt verwenden möchten.
2. Im Ordner SPIflash \ tools \ FlashUploader befindet sich das FlashUploader-Tool und eine gute Dokumentation dafür. Theoretisch ist dieses Tool so konzipiert, dass Ressourcen in eine Flash-Anzeige geladen werden. Aufgrund von Problemen bei der Softwarekommunikation mit der Steuerung ist dies jedoch nicht möglich, sodass dieser Prozess etwas verlängert wird.
Mit FlashUploader bereiten wir eine SFD-Datei vor, die eine Reihe vorbereiteter Bilder oder anderer Ressourcen enthält.
Um die Ressourcendatei vorzubereiten und zu speichern, müssen Sie FlashUploader und die Anzeige nicht verbinden. Wenn Sie dies dennoch tun möchten, müssen Sie eine spezielle Skizze in Arduino laden, mit der die Anzeige verbunden ist. Diese befindet sich im Ordner SPIflash \ examples \ Arduino (AVR) \ SPIflash_FlashUploader . Vergessen Sie nicht, nach dem Hinzufügen aller Symbole und dem Speichern der sfd-Datei eine Datei mit einer Beschreibung des angehängten Inhalts über die Schaltfläche "Inhaltsverzeichnis erstellen" zu erstellen. In Zukunft verwenden wir die Datei mit der Beschreibung als Referenz, um nach der Nummer des gewünschten Symbols zu suchen.
FlashUploader Screenshot

3. Die resultierende SFD-Datei wird auf die SD-Karte geschrieben, die dann in den Grafikkartenleser eingelegt wird.
4. Verbinden Sie die Anzeige mit Arduino und laden Sie die Skizze SPIflash_Restore aus dem Ordner SPIflash \ examples \ Arduino (AVR).
5. Wir beginnen mit der Wiederherstellung des SD-Inhalts im Flash-Speicher des Displays.
Screenshot von Serial Monitor nach erfolgreichem Upload

Damit ist der Startvorgang abgeschlossen.
Im Projekt müssen Sie über die ID in der SFD-Datei auf die gewünschte Ressource (Bild) zugreifen.
Eine kleine Testskizze, um alle Symbole (in meinem Fall 44) auf dem Display anzuzeigen
#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() {
}

Nun, am Ende
Wetterstationsanzeige in einwandfreiem Zustand

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


All Articles