کاور اصلی OLED

راهنمای جامع استفاده از نمایشگرهای OLED

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

مقدمه

سلام.

استفاده از نمایشگر در پروژه های الکترونیکی همیشه دغدغه طراحان بوده چون اضافه کردن نمایشگر به پروژه علاوه بر اینکه هزینه هارو می بره بالا کلی دردسر دیگه از جمله محدودیت های پردازنده و سختی برنامه نویسی را هم اضافه میکنه. اما امروز میخواهیم نمایشگری را معرفی کنیم که خیلی از این دردسرها را نداره، قیمتش مناسبه و کار باهاش هم خیلی ساده هست، نمایشگرهای OLED .

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

اگه خیلی حوصله ندارید آموزش رو به طور کامل و گام به گام بخونید، ما در این ویدئو آموزش کار با OLED رو به صورت مختصر و مفید براتون آماده کردیم.

نمایشگر OLED چیست؟

کلمه OLED مخفف شده عبارت Organic Light-Emitting Diode هست. به زبان ساده یکی از مهم ترین تفاوت های OLED با LCD های معمولی نداشتن بکلایت در OLED هاست، اینکه OLED ها بکلایت ندارن که باعث میشه چیزایی که روشون نمایش میدیم خیلی تمیزتر و واضح تر باشه و همچنین فضایی برای تولید بکلایت اشغال نمیشه پس OLEDها نازک تر هم هستند. یک مزیت دیگه ای هم که این نمایشگرها دارند اینه که نسبت به سایر نمایشگر های گرافیکی قیمت مناسب تری هم دارند.

نمایشگرهای OLED، سریع

اکثر ماژول های نمایشگر OLED دارای درایوری بنام SSD1306 می باشند. به لطف این درایور با این نمایشگرها می توانیم به دو روش SPI و I2C ارتباط برقرار کنیم. روش SPI سرعت ارتباط بالاتری داره ولی 4 پایه از پردازنده رو اشغال می کنه در طرف دیگه روش I2C فقط نیاز به دو پایه برای ارتباط داره ولی درعوض سرعت پایین تری داره. پس انتخاب با شماست، سرعت بیشتر یا تعداد پایه های کمتر؟

ما در این آموزش از روش I2C استفاده کردیم که البته تفاوتی از نظر نحوه راه اندازی با روش SPI نداره.

ماژول نمایشگر OLED سایزها و رزولوشن های مخالفی داره، رایج ترین رزولوشن های این نمایشگر 32*128 و 64*128 هست و سایزهای 0.96 اینچ، 1.3 اینچ و 0.91 معمول ترین سایزهای OLED هستند.

این نمایشگرها معمولا تک رنگ فروخته میشن(آبی یا سفید) البته نمونه های دورنگ و تمام رنگ هم دارن، نکته جالب اینه که توی نمونه های دورنگ که معمولا زرد و آبی هستن، فقط نوار بالا (معمولا به اندازه 8 پیکسل) فقط زرده و باقی نمایشگر فقط آبی هست.

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

درایور SSD1306 دارای 1 کیلوبایت GDDRAM(Graphic Display Data RAM) است.

پایه های ماژول OLED را در شکل زیر میتونید ببینید:

نمایشگرهای OLED ، پایه بندی

جریان مصرفی که نمایشگر OLED داره کاملا وابسته به اینه که چه تعدادی از پیکسل های اون روشنه ولی بطور میانگین برای جریان مصرفی OLED مقدار 20 میلی آمپر ذکر شده.

راه اندازی OLED با استفاده از آردوینو

حالا که با نمایشگر OLED آشنا شدید و درکش کردید نوبت به این می رسه که ببینید چجوری از این نمایشگر استفاده کنید.

سیم بندی

اتصالات مداری استفاده از ماژول نمایشگر OLED خیلی خیلی ساده هست و به هیچ قطعه یا ماژول اضافی برای این کار نیاز نیست. طبق شکل زیر مدار را ببندید.

نمایشگرهای OLED ، مدار
کد

برای برنامه نویسی نمایشگرهای OLED با آردوینو کتابخونه های زیادی وجود داره از جمله اونا که اکثر متن های آموزشی باهاشون کار می کنن کتابخونه Adafruit_SSD1306 به همراه Adafruit_GFX هست. اما ما در این آموزش قراره از کتابخونه U8glib استفاده کنیم. اما چرا؟ دو تا دلیل خیلی خیلی مهم داره.

  • این کتابخونه رنج وسیعی از درایورها را پشتیبانی میکنه(بیشتر از 30 نوه درایور).، درواقع با یادگیری این کتابخونه عملا دغدغه برای اضافه کردن نمایشگر به پروژه های آردوینویی خودتون ندارید.
  • این کتابخونه حافظه ذخیره کد در میکروکنترلر را بسیار بهینه مصرف میکنه. برای خیلی از پروژه ها که یکم کد سنگین میشه این مساله خیلی حیاتیه. سرعت این کتابخونه از کتابخونه Adafruit SSD1306 یکم کمتره ولی همین موضوع که حافظه کمتری اشغال می کنه، استفاده از این کتابخونه رو کاملا توجیه پذیر میکنه.

به زبان ساده کتابخانه U8glib یکی از جامع ترین کتابخانه ها برای راه اندازی ماژول OLED با آردوینو است.

برای دانلود کتابخونه می تونید اونو مستقیم از صفحه گیتهابش دانلود کنید یا در قسمت Manage Library عبارت U8glib رو سرچ کنید.

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

نمایش متن، عدد و اشکال هندسی

نمایش متن و اعداد روی نمایشگر همیشه جزو پرکاربردترین و پایه ای ترین قابلیت های نمایشگر هاست.

کد زیر را روی بردتون بریزید. اگه با نحوه این کار آشنایی ندارید دوباره به سر به “0 تا 100 نرم افزار Arduino IDE”  بزنید.

بیایید یکم دقیق تر به کد نگاه کنیم.

بعد از اضافه کردن کتابخانه U8glib باید درایوری که باهاش کار می کنیم را مشخص کنیم. اگه مثالهای کتابخانه رو دیده باشید یک لیست بلند بالایی از درایورها با مدهای مختلف رو می بینید که کامنت شده، از بین این کامنت ها درایور مورد نظرتون رو پیدا کنید و از کامنت در بیارید، اینجا که ما یک راست رفتیم سراغش.

درایورمون رو میدونیم چیه و ارتباطش هم که I2C هست پس برای ساخت شی اون کد زیر رو می نویسیم:

اگه از نمایشگر SPI استفاده می کنید کافیه از بجای کد بالا کد زیر رو قرار بدید:

کد u8g.setColorIndex(1) را باید همیشه داخل Setup برنامتون بگنجونید این تابع برای پیکربندی اولیه نمایشگر لازمه و بهش میفهمونه پیکسل هایی که بعدا مشخص میکنیم باید روشن بشن.

بصورت کلی کتابخانه U8glib برای نمایش برروی نمایشگر از چیزی بنام Picture loop استفاده میکنه بنابراین هرچیزی که می خواهید نمایش بدید رو باید داخل کد زیر قرار بدید:

برای نشون دادن متن اول باید فونت مدنظرتون رو با تابع u8g.setFont(font name) مشخص کنید. کتابخانه U8glib فونت های زیادی را پشتیبانی میکنه. برای دیدن نمونه فونت ها و اسماشون به این لینک به سری بزنید. بعد از این که فونت مشخص شد با تابع u8g.drawStr(x, y, txt) نوشته مورد نظرتون را در مختصات x و y از نمایشگر نمایش بدید.

چون ما از OLED با ابعاد پیکسلی 128x64 استفاده کردیم پس مقدار x نهایتا 128 و مقدار y نهایتا 64 میتونه باشه.

دیگه روند کار تا آخر همینه، یک سری تابع مشخص که با دادن مختصات طرح تعریف شده برای اون تابع رو رسم میکنه.

برای نشان دادن عدد مشخص کردن مختصات شروع و نمایش عدد با دو تابع u8g.setPrintPos(x, y) و u8g.print(number) انجام میشه. برای اعداد هم می تونید به روالی که گفته شد فونت تعیین کنید ولی اگر چیزی مشخص نکنید خود کتابخانه بصورت خودکار اولین فونتی که در کد تعریف شده را بعنوان فونت باقی نوشته ها و اعداد انتخاب میکنه.

برای نمایش اشکال هندسی مثل مستطیل، دایره و … هرکدوم تابع مخصوص خودشون را دارند که در کد مشاهده میکنید.

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

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

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

یکی از دلایلی که ما از نمایشگرهای گرافیکی استفاده می کنیم قابلیت نمایش تصاویر هست. معمولا این تصاویر باید از نوع Bitmap باشن درایور برای نمایش دادن نیاز به کدهای 0 و 1 داره و تصاویر Bitmap راحت تر به 0 و 1 تبدیل میشن البته بعضی نرم افزارها و سایت های تبدیل آنلاین اجباری به Bitmap بودن عکس ندارن. پس برای نمایش تصاویر روی نمایشگرها دو چالش داریم. اول تبدیل عکسامون به عکس های Bitmap و دوم تبدیل کردن این عکس ها به کدهای 0 و 1.

درمورد چالش اول باید گفت سایت های زیادی هستن که فرمت های عکس را جا به جا می کنن و کافیه یک سرچ ساده در گوگل بکنید اما خب ما برای این کار تا حالا از این سایت استفاده کردیم که مراحل تغییر فرمت را مشاهده می کنید:

نمایشگرهای OLED ، تغییر فرمت 1
نمایشگرهای OLED ، تغییر فرمت 2

دقت کنید سایز عکس نهایتا 128x64 باشه.

چالش دوم را هم آنلاین می تونید انجام بدید هم با یک سری نرم افزار. ما از این سایت استفاده می کنیم که روند تغییر عکس به کد به صورت زیر است.

نمایشگرهای OLED ، هگز کردن 1
نمایشگرهای OLED ، هگز کردن 2
نمایشگرهای OLED ، هگز کردن 3
نمایشگرهای OLED ، هگز کردن 4
نمایشگرهای OLED ، هگز کردن 5

حالا که عکسامونو مطابق میل درایور نمایشگر تغییر دادیم وقت نمایش عکس روی OLED رسیده.

اگه دقت کرده باشید تو این کد علاوه بر کتابخانه U8glib کتابخانه ای بنام logo هم اضافه شده. این کتابخانه درواقع چیزیه که خودمون درست کردم و داخلش دقیقا همون کدیه که از عکس تولید شده، یه فایل متنی ساده درست کنید کد عکس رو داخلش بریزید با نام دلخواه و با پسوند .h ذخیره کنید. فقط نکته ای که باید بهش توجه کنید اینه که این فایل را داخل پوشه کدتون باید قرار بدید. با باز کردن کد مشاهده میکنید که یک تب بنام logo کنار کد اصلیتون اضافه شده. می تونید این کار را هم کلا انجام ندید و آرایه کد عکستونو داخل کد اصلی کپی کنید که خب باعث میشه کد اصلی شلوغ و آماتوری بنظر بیاد.

اینم از خروجی کد:

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

ازونجایی که نمایش یکسری آیکون باحال مثل آیکون وایفای، آنتن موبایل، باتری و … خیلی خیلی کار را زیبا میکنه، یک مجموعه باحال و استثنایی براتون آماده کردیم که می تونید دانلود کنید و لذت ببرید. فقط کافیه اونا رو تبدیل به کد کنید سایز همشون هم 16*16 هست.

نمایش انیمیشن

استفاده از افکت های متحرک و انیمیشن برای پروژه، کلاس کاری اون رو قشنگ دو سه درجه بالا میبره. نمایش اینیمیشن اصلا چیز خاصی نیست و درواقع نشون دادن چندتا عکس پشت سرهم و بلافاصله هست. اما باید به این نکته توجه کنید که همانطور که از قسمت قبل متوجه شدید اضافه کردن عکس ها به کد باعث میشه حجم زیادی اشغال بشه پس طبیعتا انیمیشن که متشکل از چندتا عکس هست میتونه شما را از نظر محدودیت حافظه کد پردازنده یکم تو دردسر بندازه.

اگه باید از انیمیشن در پروژتون استفاده کنید شاید مجبور بشید بوردتون رو از Arduino UNO به Arduino DUE تغییر بدید.

برای ساخت انیمیشن باید روال زیر رو طی کنید:

  1. انتخاب سناریو انیمیشن. دقیقا چه چیزی رو میخواهید نمایش بدید.
  2. تهیه کردن عکس های مربوط به انیمیشن.
  3. تبدیل فرمت عکس ها به Bitmap.
  4. تبدیل کردن عکس های جدید به کد.
  5. نمایش کدهای تصاویر در کد اصلی بصورت پشت سر هم.

همه این 5 قسمت رو کامل بلدید پس دست به کار بشید.

برای نمونه ما هم یک انیمیشن درست کردیم که روالش رو دقیقا مثل الگوریتم بالا طی کردیم.

روال دقیقا مثل نمایش دادن عکس، کدهای تک تک عکس ها هم داخل فایل animation ریخته شده.

نمایشگرهای OLED ، انیمیشن 1

هرچی قدرت پردازتون بیشتر باشه سرعت لودنیگ عکس ها هم بیشتره و اینمیشن تمیز تری خواهید داشت. می تونید این موضوع را با یک Arduino DUE تست کنید.

بعضی وقتا این انیمیشن ساده تر از اونیه که نیازی به عکس داشته باشید و می تونید با اشکال هندسی که در بخش اول یاد گرفتید انیمیشن دلخواهتونو بسازید که خب این روش خیلی آسون تره و حجم خیلی کمتری هم از کدتون اشغال می کنه. اینجا ما با یک مستطیل تو خالی(Frame) و خطوط عمودی یک نوار لودینگ درست کردیم.

برای نمونه کد زیر رو روی بردتون بریزید و نتیجه رو مشاهده کنید.

نمایشگرهای OLED ، انیمیشن 2

اول یک متغیر بنام progressbar تعریف شده تا باهاش فرآیند بارگزاری را پیش ببریم. در قسمت اصلی یک فریم به اندازه دلخواه رسم شده که داخلش با مستطیل تو پر از عرض 0 تا 128 به مرور پر میشه، به همین راحتی.

حالا اگه بخواهید سرعت لودینگ کمتر بشه باید یک delay با مقدار دلخواه به کد اضافه کنید.

نتیجه گیری

خب الان که به آخر این آموزش رسیدید می توتید بدون دغدغه از OLED با هر سایزی و هر رزولوشنی کار بکنید و این نمایشگر جذاب و ارزان را به پروژه خودتون اضافه کنید. همچنین چون در این آموزش از کتابخانه U8glib برای راه اندازی OLED استفاده شده کار با طیف وسیعی از نمایشگرها برایتان ساده شده و دیگه محدود به این نوع خاص OLED نیستید.

تبریک! از الان به بعد بدون کوچکترین دغدغه ای پروژه هاتون رو با OLED قشنگ می کنید.

5 نظر در مورد “راهنمای جامع نمایشگرهای OLED”

  1. سلام
    از مطالب آموزنده شما استفاده بردیم موفق باشید.
    متشکریم

  2. سلام
    تشکر بخاطر مطالب ارزنده و مفیدتان

  3. سلام
    ممنون
    تا حالا این کتابخونه رو ندیده بودم، مطلب مفیدی بود

    1. خوشحالیم که مفید بوده این کتابخونه. موفق باشید

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *