استخدام ذاكرة عرض SPI Flash لتخزين الموارد الرسومية أو عرض محطة الطقس المنزلية

الغرض من هذه المقالة هو الحديث عن إمكانية استخدام عرض ذاكرة فلاش على متن الطائرة لاحتياجات المشروع.
لمن تكون ذات صلة أو مثيرة للاهتمام - نرحب تحت القط.
لمدة عام كامل ، أضع شاشة مقاس 7 بوصات على رف في انتظار وقتي. لماذا طويلة؟
نعم ، لأنه كان هناك شاشة 3.2 بوصة قيد الاستخدام ، والتي تعمل بشكل جيد بشكل عام.
ومع ذلك ، فإن حجم المعلومات المعروضة في وقت واحد عند 3.2 "لم يناسبني على الإطلاق. يتلقى جزء الخادم في محطة الطقس توقعات الطقس لمدة أسبوع من الإنترنت ، ولكن لم تكن هناك طريقة لعرضها (التوقعات) في وقت واحد مع قراءات المستشعر. لذلك ، كنت في حيرة من شراء شاشة أكبر. في البداية ، نظرت إلى 5 "، ولكن بعد المشاركة عدة مرات في المزاد ، في النهاية اشتريت 7" بسعر 5 "، وهو أمر مسرور للغاية. تم تجهيز الشاشة التي تم شراؤها بوحدة تحكم SSD1963 وذاكرة فلاش 64 ميجا بايت.
عندما كانت الشاشة الجديدة لا تزال تجمع الغبار على الرف ، لفتت الانتباه إلى وجود مكتبات على الإنترنت مع وثائق تسمح باستخدام ذاكرة الفلاش المدمجة لاحتياجاتي. حتى الآن توصلت إلى تخزين الرموز التي تبين الطقس الحالي هناك. في الإصدار السابق بشاشة 3.2 بوصة ، تم تخزين الأيقونات على بطاقة SD مدرجة في قارئ بطاقة وحدة العرض.
أريد أن ألاحظ على الفور أن عملية تحميل ملفات الموارد في ذاكرة الشاشة ليست بسيطة ومريحة ، لذلك قررت كتابة مقالة تعليمات قصيرة. لذا ، فلنبدأ :
أولاً ، قم بتنزيل الأرشيفات على هذه الروابط: SPIFlash و UTFT_SPIflash وقم بتوسيع الأرشيفات في دليل المكتبات.
التنزيل يتكون من عدة خطوات:
1. جهز مسبقًا مجموعة من الرموز أو الموارد الرسومية الأخرى التي نريد استخدامها في مشروعك.
2. في المجلد SPIflash \ tools \ FlashUploader هي أداة FlashUploader ووثائق جيدة لها. من الناحية النظرية ، تم تصميم هذه الأداة لتحميل الموارد في شاشة عرض فلاش ، ولكن في الواقع ، بسبب مشاكل في اتصال البرنامج مع وحدة التحكم ، لا يمكن القيام بذلك ، لذلك يتم إطالة هذه العملية إلى حد ما.
باستخدام FlashUploader ، نقوم بإعداد ملف SFD يحتوي على مجموعة من الصور المعدة أو الموارد الأخرى.
لتحضير ملف المورد وحفظه ، ليست هناك حاجة لتوصيل FlashUploader والعرض ، ولكن إذا كنت لا تزال تريد القيام بذلك ، فأنت بحاجة إلى تحميل رسم خاص في Arduino ، الذي تتصل به الشاشة ، الموجود في SPIflash \ أمثلة \ Arduino (AVR) \ SPIflash_FlashUploader المجلد . بعد إضافة جميع الرموز وحفظ ملف sfd ، لا تنس إنشاء ملف مع وصف للمحتوى المرفق باستخدام زر "إنشاء قائمة المحتويات". في المستقبل ، نستخدم الملف مع الوصف كمرجع للبحث عن رقم الرمز المطلوب.
لقطة من برنامج FlashUploader

3. تتم كتابة ملف SFD الناتج على بطاقة SD ، والتي يتم إدراجها بعد ذلك في قارئ بطاقة العرض.
4. قم بتوصيل الشاشة بـ Arduino وقم بتحميل الرسم SPIflash_Restore من المجلد SPIflash \ أمثلة \ Arduino (AVR).
5. نبدأ عملية استعادة محتويات SD إلى ذاكرة فلاش للشاشة.
لقطة شاشة لـ Serial Monitor بعد نجاح التحميل

هذا يكمل عملية التمهيد.
في المشروع ، تحتاج إلى الوصول إلى المورد (الصورة) المطلوب من خلال معرفه في ملف SFD.
رسم تخطيطي صغير لعرض جميع الرموز (في حالتي ، 44 منها) على الشاشة
#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() {
}

حسنًا ، في النهاية
عرض محطة الطقس في حالة العمل

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


All Articles