Usando a memória de exibição SPI Flash para armazenar recursos gráficos ou exibir uma estação meteorológica doméstica

Este artigo pretende falar sobre a possibilidade de usar a tela de memória Flash integrada para as necessidades do projeto.
Para quem é relevante ou apenas interessante - bem-vindo sob o gato.
Um ano inteiro ficava com uma tela de 7 "em uma prateleira esperando nas asas. Por que tanto tempo?
Sim, porque havia uma tela de 3,2" em uso, que geralmente funcionava bem.
No entanto, o volume de informações exibidas simultaneamente em 3,2 "não me agradou nada. A parte do servidor da estação meteorológica recebe uma previsão meteorológica de uma semana da Internet, mas não havia como exibi-la (previsão) simultaneamente com as leituras do sensor. Portanto, fiquei surpreso ao comprar uma tela maior. Inicialmente, olhei para 5 ", mas depois de participar algumas vezes no leilão, no final, comprei 7" a um preço de 5 ", o que ficou muito satisfeito. O monitor adquirido está equipado com um controlador SSD1963 e 64 MB de RAM Flash.
Quando o novo monitor ainda estava acumulando poeira em uma prateleira, chamei a atenção para a presença na Internet de bibliotecas com documentação que permitia o uso da memória flash incorporada para minhas necessidades. Até agora, criei ícones que mostram o clima atual lá. Na versão anterior, com uma tela de 3,2 ", os ícones foram armazenados em um cartão SD inserido no leitor de cartão do módulo de exibição.
Quero observar imediatamente que o processo de carregar arquivos de recursos na memória da tela não é simples e conveniente, então decidi escrever um pequeno artigo de instruções. Então, vamos começar :
Primeiro, faça o download dos arquivos nestes links: SPIFlash e UTFT_SPIflash e expanda os arquivos no diretório de bibliotecas.O
download consiste em várias etapas:
1. Prepare com antecedência um conjunto de ícones ou outros recursos gráficos que queremos usar em seu projeto.
2. Na pasta SPIflash \ tools \ FlashUploader, há uma ferramenta FlashUploader e uma boa documentação. Em teoria, essa ferramenta foi projetada para carregar recursos em um display flash, mas, de fato, devido a problemas na comunicação do software com o controlador, isso não pode ser feito, portanto esse processo é um pouco prolongado.
Usando o FlashUploader, preparamos um arquivo SFD contendo um conjunto de imagens preparadas ou outros recursos.
Para preparar e salvar o arquivo de recurso, não há necessidade de conectar o FlashUploader e a exibição. No entanto, se você ainda desejar fazer isso, precisará carregar um esboço especial no Arduino, ao qual a exibição está conectada, localizada na pasta SPIflash \ examples \ Arduino (AVR) \ SPIflash_FlashUploader . Após adicionar todos os ícones e salvar o arquivo sfd, não se esqueça de criar um arquivo com uma descrição do conteúdo anexado usando o botão "Gerar lista de conteúdos". No futuro, usaremos o arquivo com a descrição como referência para procurar o número do ícone desejado.
Captura de tela do FlashUploader

3. O arquivo SFD resultante é gravado no cartão SD, que é inserido no leitor de cartão do visor.
4. Conecte a tela ao Arduino e carregue o esboço SPIflash_Restore na pasta SPIflash \ examples \ Arduino (AVR).
5. Iniciamos o processo de restauração do conteúdo SD na memória flash do visor.
Captura de tela do Serial Monitor após upload bem-sucedido

Isso completa o processo de inicialização.
No projeto, você precisa acessar o recurso desejado (imagem) por seu ID no arquivo SFD.
Um pequeno esboço de teste para exibir todos os ícones (no meu caso, 44 ​​deles) no visor
#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() {
}

Bem, no final
Indicador da estação meteorológica em condições de trabalho

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


All Articles