Menggunakan memori tampilan SPI Flash untuk menyimpan sumber daya grafis atau menampilkan stasiun cuaca rumah

Artikel ini dimaksudkan untuk berbicara tentang kemungkinan menggunakan tampilan memori Flash on-board untuk kebutuhan proyek.
Untuk siapa itu relevan atau hanya menarik - selamat datang di bawah kucing.
Selama setahun saya meletakkan layar 7 "di rak menunggu waktu saya. Kenapa begitu lama?
Ya, karena ada layar 3,2" yang digunakan, yang secara umum bekerja dengan baik.
Namun, volume informasi yang ditampilkan secara bersamaan di 3,2 "tidak cocok untuk saya sama sekali. Bagian server dari stasiun cuaca menerima ramalan cuaca seminggu dari Internet, tetapi tidak ada cara untuk menampilkannya (perkiraan) secara bersamaan dengan pembacaan sensor. Oleh karena itu, saya bingung dengan membeli layar yang lebih besar. Awalnya, saya melihat 5 ", tetapi setelah berpartisipasi beberapa kali dalam pelelangan, pada akhirnya saya membeli 7" dengan harga 5 ", yang sangat senang. Layar yang dibeli dilengkapi dengan pengontrol SSD1963 dan 64MB Flash RAM.
Ketika tampilan baru masih mengumpulkan debu di rak, saya menarik perhatian pada kehadiran di Internet perpustakaan dengan dokumentasi yang memungkinkan menggunakan memori flash bawaan untuk kebutuhan saya. Sejauh ini saya telah datang dengan menyimpan ikon yang menunjukkan cuaca saat ini di sana. Dalam versi sebelumnya dengan layar 3,2 ", ikon disimpan pada Kartu SD yang dimasukkan dalam pembaca kartu modul display.
Saya ingin segera mencatat bahwa proses memuat file sumber daya ke dalam memori tampilan tidak sederhana dan nyaman, jadi saya memutuskan untuk menulis artikel instruksi singkat. Jadi, mari kita mulai :
Pertama, unduh arsip di tautan ini: SPIFlash dan UTFT_SPIflash dan perluas arsip di direktori libraries.
Mengunduh terdiri dari beberapa langkah:
1. Persiapkan terlebih dahulu seperangkat ikon atau sumber daya grafis lainnya yang ingin kami gunakan dalam proyek Anda.
2. Dalam folder SPIflash \ tools \ FlashUploader adalah alat FlashUploader dan dokumentasi yang baik untuk itu. Secara teori, alat ini dirancang untuk memuat sumber daya dalam tampilan flash, tetapi pada kenyataannya, karena masalah dengan komunikasi perangkat lunak dengan controller, ini tidak dapat dilakukan, sehingga proses ini agak diperpanjang.
Menggunakan FlashUploader, kami menyiapkan file SFD yang berisi sekumpulan gambar yang disiapkan atau sumber daya lainnya.
Untuk menyiapkan dan menyimpan file sumber daya, tidak perlu menghubungkan FlashUploader dan tampilan, namun jika Anda masih ingin melakukan ini, Anda perlu memuat sketsa khusus di Arduino, yang terhubung dengan layar, yang terletak di folder SPIflash \ example \ Arduino (AVR) \ SPIflash_FlashUploader . Setelah menambahkan semua ikon dan menyimpan file SFD, jangan lupa untuk membuat file dengan deskripsi konten terlampir menggunakan tombol "Hasilkan Daftar Isi". Di masa depan, kami menggunakan file dengan deskripsi sebagai referensi untuk mencari nomor ikon yang diinginkan.
Tangkapan Layar FlashUploader

3. File SFD yang dihasilkan ditulis ke SD Card, yang kemudian dimasukkan ke pembaca kartu display.
4. Sambungkan tampilan ke Arduino dan muat sketsa SPIflash_Restore dari folder SPIflash \amples \ Arduino (AVR).
5. Kami memulai proses mengembalikan konten SD ke memori flash layar.
Cuplikan layar Serial Monitor setelah unggahan berhasil

Ini menyelesaikan proses booting.
Dalam proyek ini, Anda perlu mengakses sumber daya yang diinginkan (gambar) dengan ID-nya di file SFD.
Sketsa uji kecil untuk menampilkan semua ikon (dalam kasus saya, 44 di antaranya) pada tampilan
#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() {
}

Nah, pada akhirnya
Tampilan stasiun cuaca dalam kondisi kerja

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


All Articles