Arduino NodeMcu

راه اندازی OLED با استفاده از کتابخانه Adafruit

OLED ها گونه از نمایشگرها هستند که اجزا تشکیل دهنده آنها را مواد آلی تشکیل می دهند و به محض در دریافت ولتاژ از خود نور ساطع می کنند و مثل LCD ها معمولی دارای Backlight نیستند. در این آموزش قصد داریم یک OLED با چیپ SSD1306 را با کتابخانه Adafruit راه اندازی کنیم. برای این نمایشگر ۰٫۹۶ اینچی کتابخانه های متنوعی توسط افراد و شرکتهای مختلف نوشته شده است که ار این بین دو کتابخانه بیشترین استفاده را در بین طراحان دارد. یک از این کتابخانه مربوط به شرکتAdafruit است که سورس آن در گیت موجود می باشد.

این نمایشگر در دو مدل SPI و I2C تولید می شود که در این آموزش ما مدل I2C را مورد بررسی قرار می دهیم. گذرگاه I2C بیشتر برای ارتباط به بین IC ها در مدار چاپی مورد استفاده می گیرد و تنها در دو سیم نیاز دارد یکی برای داده و دیگری برای پالس ساعت. از آنجا که این گذرگاه از دو سیم استفاده می کند به آن Two Wire Interface و یا به اختصار TWI هم گفته می شود.

نصب کتابخانه Adafruit

برای راه اندازی OLED باید کتابخانه های مربوط به آن را نصب کنید چون بطور پیشفرض در Arduino IDE نصب نیست. برای نصب کتابخانه مراحل ذیل را دنبال کنید:

  • کتابخانه ها از این آدرس و این آدرس دانلود کنید.
  • به منوی Sketch->Include Library->Add .ZIP Library بروید و دو فایل فشرده ای که در مرحله قبل دانلود کردید به کتابخانه های Arduino IDE اضافه کنید.

بعد از نصب کتابخانه ها باید تنظیمات مربوط به رزولوشن OLED را در کتابخنها انجام دهید (قبلا انجام این کار الزامی بود اما در حال حاضار الزامی وجود نداشته و از جهت محکم کاری این کار را انجام می دهیم). جهت تنظیم رزولوشن OLED مراحل ذیل را دنبال کنید:

  • محل نصب کتابخانه در مسیر زیر بروید:

C:\Users\<USER>\Documents\Arduino\libraries\Adafruit_SSD1306

در اینجا <USER> نام کاربری است که Arduino IDE توسط آن بر روی سیستم نصب شده است.

  • فایل Adafruit_SSD1306.h را توسط یک ویرایشگر دلخواه باز کنید.
  • در کد به سمت پایین اسکرول کنید تا به اگویی مانند کد زیر برسید:

خطی که مربوط به رزولوشن مورد استفاده است را در از حات کامنت خارج کنید و بقیه خطوط را در حالت کامنت قرار دهید. تغییرات اعمال شده ار ذخیره و از ادیتور خارج شوید. از آنجائیکه ما از رزولوشن ۱۲۸×۶۴ استفاده می کنیم عبارت define SSD1306_128_64 را از حالت کامنت خارج کردیم.

در کتابخانه Adafruit SSd1306 یک بافر وجود دارد که مقدار تمام پیسکل های نمایشگر را در خود نگه می دارد. این بافر در حافظه RAM مربوط به ESP8266 ذخیره می شود. برای اینکه صفحه نمایشگر بروز شود محتویات این بافر باید در بازه های زمانی مشخص به نمایشگر ارسال شود. این کار با متد display انجام می شود. برای پاک کرد بافر نیز از متد clearDisplay استفاده می کنیم.

اولین برنامه

در این برنامه قصد داریم یک پیام را بر روی OLED نمایش می دهیم. کد این برنامه را می توانید در ادامه مشاهده کنید:

در خطوط ۱ تا ۳ کتابخانه های مورد نیاز را به برنامه اضافه می کنیم. از آنجائیکه قرار است از باس I2C استفاده کنیم علاوه برای کتابخانه های مربوط به OLED کتابخانه Wire را که مختص I2C است به برنامه اضافه می کنیم.

در خطوط ۶ تا ۸ بررسی کنیم آیا تغییرات مورد نیاز در کتابخانه اعمال شده است یا خیر در صورت عدم تغییرات لازم پیام خط در هنگام کامپایل نمایش داده می شود.

هر قطعه ای که بر روی باس I2C قرار می گیرد دارای یک آدرس منحصر به فرد خواهد. در ۹۹٫۹۹۹۹ درصد موارد آدرس نمایشگر ۰x3C است که در خط ۱۱ تعریف شده است. اگر به این آدرس شک دارید می توانید از این آموزش استفاده کنید.

در خط ۱۴ از شی نمایشگر یک نمونه به نام oled ایجاد می کنیم.

در خط ۱۹ راه اندازی اولیه مربوط به OLED را انجام می دهیم یا اصطلاحا Initialize می کنیم.

در خط ۲۴ توسط متد setTextSize اندازه کاراکترهای متنی را مشخص می کنیم. این متد تنها یک مقدار عددی صحیح قبول می کند. با مقدار ۱ اندازه کاراکترها ۶×۸ پیکسل، با مقدار ۲ ۱۲×۱۶ پیکسل و با مقدار ۳ ۲۳×۳۲ پیکسل خواهند بود.

در خط ۲۵ توسط متد setTextColor رنگ متن را مشخص میکنیم. اگر فقط یک آرگومان را به این متد پاس بدهیم زمینه متن شفاف در نظر گرفته شده و کد رنگ فقط مربوط خود متن می باشد. در صورتیکه داشته باشیم setTextColor(BLACK, WHITE) رنگ زمینه متن سیاه و رنگ خود متن سفید نمایش داده خواهد شد. ( BLACK و WHITE در حقیقت دو ثابت هستند که مقداری صحیح را در خود نگه می دارند).

در خط ۲۵ مختصات x , y مربوط به مکان نما به متد setCursor پاس داده می شود تا چاپ متن از آن مکان آغاز شود.

در خط ۲۶ متنی را که باید چاپ شود به متد print ارسال می شود.

و نهایتا در خط ۳۰ محتویات بافر را نمایش می دهیم.

در مثال دوم قصد داریم علاوه نمایش متن همزمان دو تصویر از نوع Bitmap را بر روی نمایشگر نشان دهیم. در ادامه می توانید مر بوط به برنامه رو ملاحظه کنید و بعد از آن برنامه به صورت خط به خط تشریح خواهد شد:

از خطوط ۱۴ الی ۵۲ آرایه های مربوط به تصاویر Bitmap قرار دارند. در خصوص کلمه کلیدی خیلی نمی خوایم وارد جزیئات زبان C++ بشویم. فقط این دو نکته را در خصوص این کلمه مد نظر داشته باشید. اولا اگر یک متغیر یا تابع Global اگر از نوع static تعریف شده باشد فقط در در فایلی که در آن تعریف شده دیده می شود. ثانیا یک متغیر استاتیک در درون یک تابع می تواند مقدار را در درون خود نگه دارد و در فرخوانی بعدی مورد استفاده قرار گیرد و مانند یک متغیر Global عمل می کند. استفاده از کلمه کلیدی PROGMEM باعث می شود داده ها بجادی RAM در حافظه برنامه ذخیره شوند و در استفاده از RAM صرفه جویی شود. جهت تبدیل عکس به آرایه Bitmap برنامه های کمکی و سایت گوناگونی وجود دارند که با یک جستجو کوچک در گوگل قابل دستیابی هستند و نیازی به تولید این آرایه ها بصورت دستی نیست.

در خط ۶۵ با استفاده از متد drawBitmap تصاویر Bitmap را بر روی نمایشگر نشان می دهیم. این متد ۶ آرگومان قبول می کند. دو آرگومان اول مربوط به مختصات محلی که قرار است عکس در آن چاپ شود. آرگومان سوم مربوط به نام آرایه ای است که داه های مربوط به تصویر را در خود نگه می دارد. آرگومان چهارم و پنجم ابعاد تصویر را معین می کنند که در این برنامه ابعاد هر تصویر ۱۶×۱۶ پیکسل می باشد. و نهایتا آرگومان ششم مربوط به رنگ پیکسهای تصویر Bitmap می باشد.

عملکرد خطوط ۶۹ تا ۷۴ مانند برنامه قبلی است با این تفاوت که در خط ۷۲ جهت نمایش علامت درجه با توجه به اینکه در صفحه کلید جهت تایپ موجود نیست کد اسکی آن در تابع char قرار می گیرد و کاراکتر برگرداننده شده جایگیزین %c در دستور printf می شود.

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

ساعد

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


هفت + = 8