آموزش جامع راه اندازی نمایشگرهای OLED با آردوینو و نمایش متن، عکس و انیمیشن

فهرست مطالب

مقدمه

در این مقاله راجع به داستان نمایشگرهای OLED و تفاوت های آنها و راه اندازی آنها برای نمایش تصویر و نوشته، صحب خواهیم کرد.

آنچه در این آموزش یاد می‌گیرید

نمایشگرهای OLED چگونه کار می‌کنند؟

نمایشگر OLED(organic light-emitting diode) یک نمایشگر با رزولوشن و کنتراست بالاست که برای کاربر خوانایی بالایی دارد. این نمایشگرها بکلایت ندارند و بکلایت را خودشان ایجاد می کنند که این موضوع آنها را واضح تر، نرم تر و تمیزتر از LCDها کرده است. ظهور اولین نمایشگرهای OLED به سال 1987 برمی گردد، امروزه ورژن های جدیدتری از OLED مانند Super AMOLED نیز عرضه شده است.

ماژول های کوچک OLED در پروژه های الکترونیکی بسیار پرکاربرد هستند. سیم بندی ساده و وضوح بالا آنها را برای نمایش داده ها، اعداد و تصاویر ساده، مناسب کرده است. شما می توانید این پنل ها را در سایزها و رنگ های مختلف با پروتکل های I2C، SPI و موازی،بسته به نوع پروژه تان، بیابید. این ماژول ها دارای نوع تک رنگ، دو رنگ و تمام رنگ 16 بیتی می باشند. ما مدل 64*128 0.96 اینچی با درایور SSD1306 و آردوینو Uno را انتخاب کردیم.

لوازمی که به آن احتیاج دارید

سخت افزارهای مورد نیاز

آردوینو Uno R3 × 1
ماژول نمایشگر OLED 0.96 اینچی × 1
سیم جامپر نری به مادگی × 1

نرم افزارهای مورد نیاز

Arduino IDE

شبیه سازی نمایشگر OLED با Proteus

اگر ماژول OLED را ندارید و قصد خریدش را نیز ندارید.می توانید آنرا در نرم افزار Proteus شبیه سازی کنید.

فایل شبیه سازی:

سیم بندی

OLEDهای متفاوتی با پایه های با نام متفاوتی وجو دارد. از توضیح مدار بالا برای پیدا کردن نام پایه های ماژول خود استفاده کنید.

بیشتر ماژول های OLED با 3.3 ولت نیز کار می کنند، می توانید پایه های آردوینو را نیز تغییر دهید ولی این تغییر را در کد نیز باید اعمال کنید.

سرهم بندی

می توانید از برد بورد و سیم نری برای اتصالات استفاده کنید. حالا نوبت به آپلود کدها رسیده است.

نمایش متن روی نمایشگرهای OLED

کتابخانه های زیادی برای OLED نوشته شده است. در این آموزش ما از کتابخانه WaveShare OLED SSD1306 استفاده کردیم.

اگر برای بار اول است که روی آردوینو برنامه می ریزید، نگران نباشید و مراحل زیر را دنبال کنید:

  1. به آدرس www.arduino.cc/en/Main/Software رفته و نرم افزار IDE را متناسب با سیستم عامل خود دانلود و نصب کنید.
  2. نرم افزار Arduino IDE را اجرا کنید. تمام کد های پیش فرض را پاک کرده و کد زیر را به جای آن کپی کنید.
  3. برای نصب کتابخانه ها، از پنجره ی Sketch و بخش Include Library، گزینه ی Add .ZIP Library را انتخاب کنید و فایل های کتابخانه ای که دانلود کردید را انتخاب کنید.
  4. نوع آردوینو خود را از پنجره ی Tools و قسمت Board انتخاب کنید.
  5. پورتی که (COM) آردوینو به آن متصل است را در پنجره ی Tools انتخاب کنید.
  6. دکمه ی Upload (شکلی که شبیه فلش است) را بزنید تا کد شما روی آردوینو آپلود شود.
  7. شما با موفقیت کد خود را روی آردوینو ریختید.

کتابخانه های مورد نیاز:

برای نمایش نوشته و متن روی OLED ابتدا باید داده هایتان را روی بافر بنویسید و سپس آنرا نمایش دهید.

می توانید از این دستورات استفاده کنید:

پیکربندی ابتدایی: SSD1306_begin() 

پاک کردن صفحه نمایش:SSD1306_clear(…)

اضافه کردن نوشته به بافر: SSD1306_string(x position, y position,… )

اضافه کردن یک کاراکتر به بافر:
SSD1306_char3216(x position, y position,…)

نمایش بافر: SSD1306_display(name of buffer)

کد نمایش نوشته روی OLED:

#include "ssd1306.h"

#define VCCSTATE SSD1306_SWITCHCAPVCC
#define WIDTH     128
#define HEIGHT     64
#define PAGES       8

#define OLED_RST    9 
#define OLED_DC     8
#define OLED_CS    10
#define SPI_MOSI   11    /* connect to the DIN pin of OLED */
#define SPI_SCK    13     /* connect to the CLK pin of OLED */

uint8_t oled_buf[WIDTH * HEIGHT / 8];

void setup() {
  Serial.begin(9600);
  Serial.print("OLED Example\n");


  SSD1306_begin();
  SSD1306_clear(oled_buf);

  /* display images of bitmap matrix */
  SSD1306_bitmap(0, 2, Signal816, 16, 8, oled_buf); 
  SSD1306_bitmap(24, 2,Bluetooth88, 8, 8, oled_buf); 
  SSD1306_bitmap(40, 2, Msg816, 16, 8, oled_buf); 
  SSD1306_bitmap(64, 2, GPRS88, 8, 8, oled_buf); 
  SSD1306_bitmap(90, 2, Alarm88, 8, 8, oled_buf); 
  SSD1306_bitmap(112, 2, Bat816, 16, 8, oled_buf); 

  SSD1306_string(0, 52, "MUSIC", 12, 0, oled_buf); 
  SSD1306_string(52, 52, "MENU", 12, 0, oled_buf); 
  SSD1306_string(98, 52, "PHONE", 12, 0, oled_buf);

  SSD1306_char3216(0, 16, '1', oled_buf);
  SSD1306_char3216(16, 16, '2', oled_buf);
  SSD1306_char3216(32, 16, ':', oled_buf);
  SSD1306_char3216(48, 16, '3', oled_buf);
  SSD1306_char3216(64, 16, '4', oled_buf);
  SSD1306_char3216(80, 16, ':', oled_buf);
  SSD1306_char3216(96, 16, '5', oled_buf);
  SSD1306_char3216(112, 16, '6', oled_buf);

  SSD1306_display(oled_buf); 
}

void loop() {

}

نمایش تصاویر روی OLED

با استفاده از SSD1306_bitmap(…) می توانید تصویر bitmap را به بافر اضافه کنید.

نکته
کتابخانه OLED تعدادی آیکون بصورت پبشفرض(مانند Alarm88, Bluetooth88 و …) دارد که می توانید از آنها استفاده کنید.
#include <ssd1306.h>

#define VCCSTATE SSD1306_SWITCHCAPVCC
#define WIDTH     128
#define HEIGHT     64
#define PAGES       8

#define OLED_RST    9 
#define OLED_DC     8
#define OLED_CS    10
#define SPI_MOSI   11    /* connect to the DIN pin of OLED */
#define SPI_SCK    13     /* connect to the CLK pin of OLED */

uint8_t oled_buf[WIDTH * HEIGHT / 8];

void setup() {
  Serial.begin(9600);
  Serial.print("OLED Example\n");


  SSD1306_begin();
  SSD1306_clear(oled_buf);

  /* display images of bitmap matrix */
  SSD1306_bitmap(0, 2, Signal816, 16, 8, oled_buf); 
  SSD1306_bitmap(24, 2,Bluetooth88, 8, 8, oled_buf); 
  SSD1306_bitmap(40, 2, Msg816, 16, 8, oled_buf); 
  SSD1306_bitmap(64, 2, GPRS88, 8, 8, oled_buf); 
  SSD1306_bitmap(90, 2, Alarm88, 8, 8, oled_buf); 
  SSD1306_bitmap(112, 2, Bat816, 16, 8, oled_buf); 

  SSD1306_string(0, 52, "MUSIC", 12, 0, oled_buf); 
  SSD1306_string(52, 52, "MENU", 12, 0, oled_buf); 
  SSD1306_string(98, 52, "PHONE", 12, 0, oled_buf);

  SSD1306_char3216(0, 16, '1', oled_buf);
  SSD1306_char3216(16, 16, '2', oled_buf);
  SSD1306_char3216(32, 16, ':', oled_buf);
  SSD1306_char3216(48, 16, '3', oled_buf);
  SSD1306_char3216(64, 16, '4', oled_buf);
  SSD1306_char3216(80, 16, ':', oled_buf);
  SSD1306_char3216(96, 16, '5', oled_buf);
  SSD1306_char3216(112, 16, '6', oled_buf);
 SSD1306_display(oled_buf); 
}
void loop() {
}

برای نمایش تصویر، می بایست عکس را به کد Hex تبدیل کنید. برنامه های مختلفی برای این کار وجود دارد. می توانید یکی از آنها را از لینک زیر دانلود کنید. برنامه را باز کرده و عکس مدنظرتان را باز کنید. اندازه تصویر باید کوچکتر از 64*128 باشد. مطمئن شوید تنظیمات مانند شکل زیر است

نرم افزار تبدیل تصویر به کد Hex:

روی منوی Convert from File کلیک کنید و فایل c. را باز کرده و کد Hex را کپی کنید. در کد اصلی، کد Hex کپی شده را با فرمت زیر قرار دهید.

const uint8_t SAMPLE_NAME [] PROGMEM = {0x00, 0x00, 0x00, 0x00  ....  0xFF };

حالا خط زیر را در loop قرار دهید.

SSD1306_bitmap(0, 0, SAMPLE_NAME, 128, 64, oled_buf); // (x location, y location, Name of image, width, height)

کد را روی آردوینو آپلود کنید.

نمایش انیمیشن روی OLED

نمایش انیمیشن روی OLED کمی دشوار است. یک انیمیشن شامل تعدای عکس است که پشت سرهم بی وقفه نمایش داده می شوند. ما نیز دقیقا همین کار را می کنیم، نمایش هر فریم درست بعد از اتمام فریم قبل.

مثالی از نمایش متن و گیج:

فایل های مورد نیاز:

نکته
برای حفظ حافظه، می توانید انیمیشن خود را به بخش های متحرک و ثابت تقسیم کنید و فقط بخش متحرک را فریم به فریم تغییر دهید. در این مثال فریم های انیمیشنی تنها شامل اشاره گر و عدد است و باقی قسمت ها در حقیقت یه عکس  ثابت می باشد.

یک گام جلوتر

  • سعی کنید اطلاعات سنسورها(مانند DHT11) را روی OLED نمایش دهید.
  • یک ساعت با ماژول RTC و OLED بسازید.

از این مطلب خوشتان آمد؟

آخرین مطالت و آموزش ها را در ایمیلتان دریافت کنید:

مطالب بیشتر

Comments (8)

  • لطفی Reply

    سلام. ممکنه راهنمایی کنید که من کجا میتونم راه اندازی oled کامل آموزش ببینم بصورت حضوری

    فوریه 17, 2021 at 8:30 ب.ظ
    • مهران ملکی Reply

      سلام.
      متاسفانه در این مورد اطلاعی ندارم. قسمت آموزش های سایت آپدیت شده و می‌تونید آموزش انواع oled های مختلف رو در این قسمت ببینید.
      همچنین به دلیل شرایط موجود برگزاری کلاس رو بعید میدونم.

      فوریه 20, 2021 at 6:23 ب.ظ
  • سیده زهرا حسینی Reply

    سلام من می خوام فونت متن ام عددی بین 1 و 2 باشه. مثلا 1.5 . چطوری می تونم این کار رو کنم؟

    سپتامبر 6, 2021 at 10:10 ق.ظ
    • مهران ملکی Reply

      سلام
      متاسفانه امکانش به سادگی وجود نداره. لازمه که خودتون کل فونت رو با اندازه مورد نظرتون بسازید و تو کتابخونه مورد استفاده اضافه کنید.

      سپتامبر 7, 2021 at 10:05 ق.ظ
  • آیدا Reply

    سلام، لطفا اموزش تنظیم ساعت با ds1307 , oled رو هم بذارید. ممنون

    سپتامبر 15, 2021 at 4:47 ب.ظ
    • مهران ملکی Reply

      سلام.
      آموزش استفاده از ماژول ساعت DS1307 به تازگی در سایت گذاشته شده و میتونید با ترکیب اون آموزش با آموزش این صفحه به سادگی تنظیم رو انجام بدید. آموزش استفاده از ماژول ساعت DS1307 رو میتونید در لینک زیر مشاهده کنید:
      “https://thecaferobot.com/learn/interfacing-ds1307-i2c-rtc-real-time-clock-module-with-arduino/”

      سپتامبر 18, 2021 at 9:25 ق.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.