نمایشگر OLED پروژه های آردوینو

آموزش راه‌اندازی نمایشگر OLED آردوینو بخش اول

راه‌اندازی نمایشگر OLED آردوینو
نوشته شده توسط علیرضا قربانی

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

 

 


نمایشگر oled چیست


نمایشگر‌های OLED ، نمایشگرهایی با کانتراست  و رزولوشن بالای می‌باشند ، از این رو قابلیت خوانایی زیادی را برای کاربر فراهم می‌کند. این نوع ماژول‌ها فاقد Backlight  می‌باشند و نور پس‌زمینه را خودشان ایجاد می‌کنند از این رو نسبت به LCD ها باریک‌تر ، شفاف‌تر و شکیل تر می‌باشند. در ادمه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید. در این پست قصد آموزش راه اندایز نمایشگر OLED 128* 64  را داریم . این ماژول‌ها دارای چیپ‌های راه‌انداز متفاوتی از قبیل SSD1306 ،SH1106  و… می@باشند  که دراین آموزش از یک OLED با چیپ داخلی SH1106 به همراه پروتکل ارتباطی I2C استفاده شده است. برای تشخیص نوع درایور این ماژول یک روش وجود دارد. در نمایشگر OLED هایی که از چیپ SH1106 استفاده کرده‌اند اولین پین از سمت چپ ، پین VCC می‌باشد و در نمایش‌گرهایی که از چیپ SSD1306 استفاده می‌کنند پین اول از سمت چپ ، پین GND می‌باشد. در  تصاویر زیر این موضوع نشان داده شده است.

 

نمایشگر OLED با چیپ SH1106

 

 

 

برای راه‌اندازی OLED  ابتدا کتابخانه U8glib را از لینک زیر دانلود نمایید  و آن را به نرم افزار آردوینو اضافه کنید. دانلود کتابخانهU8glib نمایشگر OLED 128*64 بدین معناست که دارای ۱۲۸ پیکسل از چپ به راست  و ۶۴ پیکسل از بالا به پایین می‌باشد. به عبارت دیگر این نمایشگر از ۸۱۹۲  پیکسل تشکیل شده است. به ازای هر پیکسل ، یک عدد LED بسیار کوچک بر روی این نمایشگر قرار دارد.

 


شمارش پیکسل نمایشگر OLED


در عرض این نمایشگر ۱۲۸ پیکسل قرار  دارد که شمارش آن از ۰ در سمت چپ شروع می‌شود و به راست تا پیکسل شماره ۱۲۷ ادامه می‌یابد. و همچنین در طول این نمایشگر ۶۴ پیکسل قرار دارد که از شماره صفر شروع می‌شود و به سمت پایین تا شماره ۶۳ ادامه می‌یابد.

آموزش OLED آردوینو

آموزش نمایشگر OLED آردوینو

 

 

کد‌های زیر را در نرم افزار آردیونو کپی نمایید و سپس در آردوینو آپلود کنید.

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 

همانطور که مشاهده می‌کنید متن Digisprak.ir در نمایشگر نشان داده می‌شود.

آموزش OLED در آردوینو Arduino

 

 


شرح برنامه ماژول OLED


پس از فراخوانی کتابخانه U8glib توسط دستور زیر به برنامه اعلام می‌کنیم که از یک عدد OLED 128*64 با استفاده از رابط I2C استفاده می‌کنیم .

 

سپس فونت دلخواهمان را انتخاب می‌کنیم .( این کتابخانه از فونت‌های بسیار زیادی پشتیبانی می‌کند که در آموزش‌های بعدی لیست اسامی آن‌ها قرار داده می‌شود. در کتابخانه‌هایی که برای LCDهای گرافیکی و OLED ها استفاده می‌شود اصطلاحی وجود دارد به نام “حلقه رسم”. “حلقه رسم توسط دستور زیر شروع می‌شود

و همچنین توسط دستور زیر به پایان می‌رسد:

” حلقه رسم ” برای اجرای دستورات گرافیکی در OLED نیاز می‌باشد و تمام دستورات گرافیکی در میان این حلقه قرار می‌گیرد. و ما نیز تابع draw را نیز در میان این حلقه قرار داده‌ایم. ( در قسمت‌های بعدی راجب به این حلقه توضیحات جامعی را ارائه می‌دهیم )

 


اسکرول کردن متن نمایشگر OLED


در کد‌‎های قرار گرفته در ابتدای آموزش دستور

را با دستور

جایگزین کنید و در آردوینو آپلود نمایید . اگر مراحل را به درستی انجام داده باشید تصویر زیر را مشاهده می‌کنید:

آموزش OLED در آردوینو Arduino

آموزش OLED در آردوینو Arduino

 

همانطور که ملاحظه می‌کنید این کتابخانه از مختصات منفی برای نمایش پشتیبانی می‌نماید. از این ویژکی می‌توان برای تولید انیمیشن‌های جذاب و زیبا و همچنین اکسرول کردن متن استفاده نمود. کد‌های زیر را به منظور اسکرول کردن متن در آردوینو آپلود کنید.

 


کد آردوینو ماژول نمایشگر OLED


کدهای زیر را در آردوینو کپی کرده و با رعایت کتابخانه‌های مورد نیاز کدها را روی برد آپلود کنید.

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 


وسایل مورد نیاز


برد Arduino MEGA2560

ماژول OLED 128*64 پروتکل ارتباطی I2C

 

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

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علیرضا قربانی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۷۱ دیدگاه

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

  • سلام

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

    با تشکر

      • سلام بر آقای مهندس قربانی، از اینکه اطلاعات علمی مفیدتون را به اشتراک میگزارید بنوبه خودم از جنابعالی قدردانی میکنم.
        من یک هفته درگیر سیم بندی و کد نویسی آردوینو نانو با ال سی دی مدل wg12864a هستم ولی هنوز به نتیجه نرسیدم لطفا اگر فایل آموزشی در این خصوص دارید کمک کنید تا بتونم پروژه را تموم کنم. آدرس من:

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

          • درود و سپاس از پاسخگویی شما
            من نمایشگر LCD- WG12864A دارم ( لینک : https://www.winstar.com.tw/products/graphic-lcd-display-module/monochrome-graphic.html )و پروژه ای به منظور کنترل و مونیتورینگ ایستگاه آب در دست دارم از فایل های آموزشی سایت شما چند مجموعه را خریداری کرده ام که در بعضی بخش ها مفید بوده اند اما هنوز نتونستم نمایشگر را با آردوینو نانو راه اندازی کنم، صمیمانه از شما تقاضا دارم کمک کنید تا بتونم پروژه ام را تموم کنم.در بخش های زیر نیاز به کمک دارم:
            ۱- دیاگرام سیم بندی این نمایشگر برای ارتباط با آردوینو با توجه به اینکه ۲۰ پایه دارد.
            ۲- از چه نوع ارتباطی استفاده کنم؟؟؟(SPI,SERIAL,USART,..)
            ۳-با توجه به اطلاعات دیتا شیت ، تا حد امکان کدها و کتابخانه های مورد نیاز را ایمیل فرمایید.
            متواضعانه از شما قدردانی میکنم- لطفی منش

            • سلام
              در خصوص پروتکل ارتباطی باید دیاگرام را بررسی کنید و تشخیص دهید که با I2C یا SPI کار می‌کند.
              در خصوص کتابخانه پیشنهاد می‌شود کتابخانه GLCD را فراخوانی و تست کنید.

  • با سلام وعرض خسته نباشید.
    معذرت میخواهم فکر کنم کدهای آردوینو وکدهای HTML داخل برنامه با هم ترکیب شدند وهنگام اپلود نتیجه درست نمایش نمیدهند.
    در هر صورت ازمطالب بسیار عالی سایت تشکر میکنم.

    • سلام بله میشه

      فقط ممکنه در uno با کمبود حافظه رو بهرو بشینچون این کتابخونه حجم بسیار زیادی داره .
      پیشنهاد میکنم اگه برنامتون پیچیدس سراغ آردوینو مگا ۲۵۶۰ برین

      • سلام… با تشکر از شما بابت سایت بسیار خوب و برنامه های آموزنده ای که تهیه میبینید… …. مشکلی که در این باب دارم از oled ssd1306 استفاده میکنم و زمانیکه این برنامه یا مثال خود آردوینو رو verify میکنم با این ارور مواجه میشم….:
        exit status 1
        Error compiling for board Arduino/Genuino Mega or Mega 2560.

        خواهش میکنم راهمناییم کنید…. با سپاس فراوان از زحمات بی منت و بی دریغ شما….

  • با سلام و خسته نباشید.
    آموزشتون واقعا عالی بود.
    میخواستم ازتون بپرسم این نمایشگر و یا نمایشگر بزرگتر از این رو چجوری میتونم اینترنتی بخرم؟؟؟؟
    ممنون میشم اگه جواب بدین

  • سلام من کد هارو کپی کردم ولی این خطا رو میده:
    expected constructor, destructor, or type conversion before ‘;’ token

  • سلام شما تو نظرها گفتین که میشه تو این پروژه از مدل ssd1306 هم استفاده کرد و فقط باید یک آبجکت بسازیم .
    من خیلی مبتدی ام . میشه درباره ساخت همین آبجکت یا کارایی که باید انجام بدیم تا با مدل ssd1306 هم راه بیوفته یه توضیحی بدین ! ممنون میشم .

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

    • با سلام
      ضمن تشکر از توجه شما، در حال حاضر فقط تبادل از طریق ثبت نظر در سایت امکان پذیر است.

  • من این ماژول رو با پروتکال I2C و چیپ SSD1306 که ۶ تا پایه داره خریداری کردم
    که پایه های به ترتیب GND ,VCC ,SCL ,SDA ,RES ,DC ترتیب پایه هاش برای راه اندازی به برد اروینو به چه صورت باید باشه ؟

    • با سلام
      ضمن تشکر از توجه شما، برای اتصال این برد کافیست چهار پایه GND , VCC , SCL , SDA را متصل کنید. دو پایه دیگر را رها کنید. از آنجایی که پروتکل ارتباطی این برد I2C می‌باشد. چنانچه شیوه اتصال این پروتکل به آردوینو را نمی‌دانید، از آموزش پروتکل I2C با آردوینو استفاده کنید.

    • با سلام
      با توجه به اسم پایه‌ها میتوانید پروتکل را تشخیص دهید به عنون مثال در پروتکل I2C علاوه بر پایه‌های تغذیه دو پایه دیگر به نام‌های SCL و SDA موجود است. در پروتکل SPI نام پایه‌ها به صورت SCLK , MOSI , MISO , SS می‌باشد.

    • سلام
      لطفا منظورتون را دقیقا از پاک شدن اعلام کنید تا کامل تر بتوانیم راهنمایى کنیم.
      سپاسگزارم

      • سلام خیلی ممنون . ببنید من یه نوشته چند کلمه ای دارم میخوام کلمه اول ظاهر شه رو صفحه ی نمایش بعد نوشتهی بعدی خط بعد نیاد بلکه صفحه ی نمایش پاک شه و کلمه بعدی جای کلمه ی قبلی قرار بگیره . البته این تیکه کدم خودم نوشتم ولی جواب نداد
        void clear(){
        int x,y;
        for(y=0;y<64;y++){
        for(x=0;x<128;x++){
        u8g.drawStr(x,y," ");
        }}}

          • سلام
            من هم میخواهم lcd رو پاک کنم ولی کدی که گفتین ارور میده، کد درست به چه صورت هست. این کد (((( display.clearDisplay() ))))

            • سلام
              یک دستور برای حالت Sleep و wake در کتابخانه Adafruit وجود دارد و از آن می‌توانید استفاده کنید.
              void sleepDisplay(Adafruit_SSD1306* display) {
              display->ssd1306_command(SSD1306_DISPLAYOFF);
              }

              void wakeDisplay(Adafruit_SSD1306* display) {
              display->ssd1306_command(SSD1306_DISPLAYON);
              }

    • با سلام
      ضمن تشکر از توجه شما، باید از کتابخانه مربوطه استفاده کنید. البته اگر همین کتابخانه آن تراشه را پشتیبانی نکند.

  • سلام خوبید ؟
    ببخشید میخواستم بدونم که اگه بخوام صفحه نمایشگر OLED رو پاک کنم از چه کدی باید استفاده کنم ؟

  • با تشکر از جناب مهندس قربانی
    خیییییییییییییییییییلی عالی
    از مطالعه مطالب مورد علاقه خودم که توسط جوانهای با استعداد و درس خون ارایه میشه بی نهایت لذت میبرم.

  • به همکاری و راهنمایی برنامه نویس حرفه ای آردوینو جهت انجام پروژه احتیاج دارم (همراه دستمزد توافقی)
    در صورت آمادگی با ایمیل اینجانب تماس بگیرید. متشکرم

  • سلام
    آیا راهی داره که این ماژول را با همین کتابخانه به nodemcu esp8266 وصل کرد؟!
    چون به صورت
    یش فرض روی ماژول esp8266 پورت های sda و scl را نداریم!

  • من یک نمونه از این OLED که SSD1306 است و رابط I2C دارد خریداری کرده ام . در صورت امکان یک کد که روی est8266 اجرا شود هم در این آموزش قرار دهید.باتشکر

  • سلام… با تشکر از شما بابت سایت بسیار خوب و برنامه های آموزنده ای که تهیه میبینید… به خصوص تشکر ویژه از شما جناب مهندس طباطبایی و سرکار خانوم بلورچیان بابت رانمایی های قبلی…. مشکلی که در این باب دارم از oled ssd1306 استفاده میکنم و زمانیکه این برنامه یا مثال خود آردوینو رو verify میکنم با این ارور مواجه میشم….:
    exit status 1
    Error compiling for board Arduino/Genuino Mega or Mega 2560.

    خواهش میکنم راهمناییم کنید…. با سپاس فراوان از زحمات بی منت و بی دریغ شما….

      • Arduino: 1.8.5 (Windows 8), Board: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

        C:\Users\arshiya\Documents\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino:21:26: fatal error: Adafruit_GFX.h: No such file or directory

        #include

        ^

        compilation terminated.

        exit status 1
        Error compiling for board Arduino/Genuino Mega or Mega 2560.

        This report would have more information with
        “Show verbose output during compilation”
        option enabled in File -> Preferences.
        :\Users\arshiya\Documents\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino:21:26: fatal error: Adafruit_GFX.h: No such file or directory

        #include

        ^

        compilation terminated.

        exit status 1
        Error compiling for board Arduino/Genuino Mega or Mega 2560.

  • سلام من با این کتابخونه oled رو راه اندازی کردم ولی فقط نصف oled کار میکنه و با کتابخونه ی adfruit هم که راه اندازی میکنم یک خط در میون میندازه، چیکار کنم ؟؟

  • سلام
    خسته نباشید
    با چه دستوری میشه oled رو خاموش کرد که توی کمترین مود مصرفی باشه؟
    ممنون میشم جواب رو برام ایمیل کنید
    باتشکر از سایت خوبتون

    • سلام
      کاربر گرامی در این خصوص چندین راه حل وجود دارد. از جمله استفاده از سخت افزاری جهت مدیریت پین تغذیه و… بسته به نوع پروژه بایستی یک راه حل انتخاب بفرمایید. اما پیشنهاد بنده استفاده از روش Blank Out برای خاموش کردن OLED است.
      همچنین پس از پاسخگویی به سوالات از طریق ایمیل اطلاع رسانی می‌شود.

      • سلام خیلی ممنون که جواب دادید،جسارتا متوجه نشدم منظورتو از Blank Out چی هستش.
        اگر ممکنه یکم توضیح بدید.
        من از کتابخونه ی شما نتونسم استفاده کنم متاسفانه برای همین از کتابخونه ی Adafruit_SSD1306-master استفاده می کنم توی این کتابخونه همچین دستوری هستش؟
        ممنون

        • سلام مجدد
          این مورد توسط بنده تست نشده است.
          در این خصوص از دیگر کاربران تقاضا دارم در بحث شرکت کنند.

  • سلام و خسته نباشید.
    من خواستم بدونم با دستوری میشه oled رو خاموش کرد مصرف برقش کم بشه؟
    من وقتی که صفحه oled رو کامل پاک میکنم ۱٫۲۷ میلی امپر مصرف میکنه.
    برای پروژه من ک با باطری با ظرفیت پایین(بخاطر حجم کم پروژه) استفاده میکنم این مقدار زیاد هستش.

  • با سلام و تشکر بابت این پروژه
    ۲ تا اشکال داره
    ۱-این کد   اضافیه تو نمونه اولی
    ۲- راهنمایی در مورد قرار دادن پینهای A4 و A5 نکردید
    متاسفانه سایتهای فارسی همیشه مشکل پروژه های ناقص را دارند

    • با سلام
      کاربر گرامی همانطور که در ویدیو انتهای آموزش مشاهده می‌کنید نمونه اجرا شده بدون ایراد است. اگر در خصوص تکمیل کردن آموزش پیشنهادی دارید از همین طریق می‌توانید برای دیگر کاربران منتشر کنید. ۲- میتوانید در خصوص موارد دلخواهتان سوالات را به صورت ثبت کامنت مطرح کنید. اگر هم تمایلی به این کارها ندارید، بهتر است از سایت‌های ایرانی استفاده نفرمایید. در دیجی اسپارک کلیه آموزش‌ها در آزمایشگاه اجرا و بررسی می‌شوند سپس محتوای آن‌ها تولید می‌شود. این موضوع نیاز به درک بالای تمامی کاربران دارد.

    • با سلام
      ممکن است حروف نوشته شده دچار تغییراتی شده باشد. ارور دریاقتی را ارسال کنید تا بررسی شود.

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

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

    • با سلام
      با کلیک بر روی ارور در خطی که یکی از علامت های ; جا گذاشته اید، نمایش داده می‌شود.

    • با سلام
      بله امکان تعریف مکان نما در OLED وجود دارد. در این خصوص از دستور display.setCursor(0,0); میتوانید استفاده کنید.