آموزش راه اندازی OLED زرد و آبی 64*128 ,32*128 I2C SPI


امروز میخوام یه آموزش خیلی ساده و کاربردی از یه نمایشگر خیلی جذاب و باحال که تعداد پایه های کمی داره و از ارتباط I2C یا SPI (بسته به اینکه کدوم رو خریداری کنید) پشتیبانی میکنه رو در خدمتتون باشم.

 

اول از همه بگم این آموزش رو میتونید هم برای 128*32 تک رنگ هم برای 128*64 تک رنگ یا زرد و آبی استفاده کنید هر سوالی هم داشتید بپرسید 

 

OLED 128*32

 

خب اول از همه یه ضد حال بزنم برا تازه کارا! 

 

اون oled 128*64 زرد و آبی که گرفتین بخش زرد و آبیش جداس یعنی بالاش زرده پایینش آبی پس نمیتونی وسطا زرد داشته باشی یا بالا آبی تصویر گویای همه چیزه ! 

 

محدوده پیکسل های زرد و آبی 

 

محدوده پیکسل های زرد و آبی

 

خب بریم سر راهندازی و برنامه نویسیش: 

 

این عکس بالایی که مشاهده میکنی نوشته vcc , gnd ,scl و sca خب برای مبتدیا بگیم که اینا چین: 

 

هر وقت شما این 4 پایه رو درکنار هم در هر ماژولی دیدین قطع به یقین بدونین که ماژولتون از ارتباط I2C استفاده میکنه! 

 

و اگه پایه ها MOSI MISO CS وCSK بودن بدونین که اون دستگاه داره از ارتباط SPI استفاده میکنه. 

 

حتما سر تفاوت این پرتکل های ارتباطی با هم بحث خواهیم کرد بعدا ، اگه نمیدونی نگران نباش عزیز! 

 

خب بریم سراغ برنامه نویسی تو محیط ARDUINO:

 

اگه میخواییم یه جمله مثه “HELLO WORLD” معروف رو روی OLED ببینیم باید یه برنامه شبیه این پایینی بنویسیم:


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
  Serial.begin(115200);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
   for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(20, 0);
    display.setTextColor(WHITE);
  // Display static text
  display.println("WWW.KEEWE.IR");
    display.display()
delay(3000);
    //display.clearDisplay();
    display.setTextSize(3)

  display.setCursor(20, 20);

  // Display static text
  display.println("keewe");
  display.display();
}
void loop() {
}

اگه موندی که اینا چین نگران نباش خط به خطشو با هم بررسی میکنیم :

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

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

 

Sketch>Inclide Library >Manage Libraries

و نوشتن : Adafruit GFX تو بخش سرچ install کنی هم این هم Adafruit SSD1306 که کنارشه ! 

 

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

 

عمده oled های موجود تو بازار دارای پردازنده ssd1306 هستن. 

 

خب بریم سراغ خط بعدی : 

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 64

خیلی واضحه با define دو تا ثابت برای ارتفاع و عرض oled که داری تعریف میکنی پس اگه oled شما 128*32 هست اینارو تغییر بدین. 

 

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

 

اینجا با این دستور یه پیکر بندی اولیه برا oled انجام میدی عرض و ارتفاع رو میدی و پرتکل ارتباطیت که برای i2c ما &wire رو انتخاب کردیم.. ولی اون -1 چیه ؟!! 

 

-1 یعنی اینکه من برای ریست کردن oled پایه ای رو در نظر نگرفتم ،اگه بخوایین که oled رو ریست کنین باید اینجا شماره پایه ای که میخوایین با اون این کاررو انجام بدین بذارین. 

void setup() {

  Serial.begin(115200);

اینجا تابع void setup شروع شده و بیشتر دستورات پیکربندی اینجا انجام میگیره

 

و همچنین یه ارتباط سریال با بادریت 115200 شروع کردیم (این خط فقط برای دیباگ کردنه و بود و نبودش فرقی تو کار کرد oled نمیکنه ). 

 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64




    Serial.println(F("SSD1306 allocation failed"));




    for(;;);

  }

بچه ها این خط خیلی مهمه از لحاظ آموزشی اکثر oled های موجود تو بازار دارای پردازنده ssd1306 هستن و شما باید بسته به اون پردازنده باید کتابخونه و آدرس 0x3C برای نوع oled تون بذارین . 

 

اگه این شرط درست نباشه یعنی oled درست پیکربندی نشده یا آدرستون اشتباهه یا هم پردازندتون ssd1306 نیست وباید مشکل رو رفع کنید . 

 

(این دیباگ در قسمت سریال نرم افزار آردوینو نمایش داده میشه ) . 

 

delay(2000);

یه تاخیر 2 ثانیه ای ! اصن مهم نیست باشه و نباشه کم باشه یا زیاد باشه! 

 

  display.clearDisplay();

 

display.clearDisplay این دستور میاد کل صفحه oled رو پاک میکنه برای نوشتن تو oled اگه از خط اول مد نظزتون باشه که بنویسید باید کلش رو پاک کنین با همین دستور . 

 

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

 

  display.setTextSize(1);

 

خیلی ساده text size رو میتونین با این دستور انتخاب کنید . 

 

display.setCursor(20, 0);

این دستور کرسر رو میبره روی نقطه ایکه مختصاتش رو میدین به صورت (x,y) 

 

پس تو کد بالا گفتیم که متن از جایی شروع به نوشتن بشه که 20 پیکسل از سمت چپ و 0 پیکسل از بالا فاصله داره 

 

display.setTextColor(WHITE);

 

تو این دستور رنگ قلم تعیین شده ! 

 

تغییر رنگ قلم در OLED

 

ببینید اگه رنگ رو تغییر بدید مطمعنا اررور شناسایی نشدن رنگ رو خواهید گرفت از طرفی میدونیم که رنگها ثابت هستن و تغییر نمیکنن. 

 

پیکسل هر رنگی رو داره رنگ قلم هم به اون رنگ هست این یه تیکه رو پس چرا گذاشتن؟! 

 

صرفا برای اون دسته از oled ها که دارای پیکسل هایی با قابلیت نمایش چند رنگ هستن و برای اون ها هم حتما باید کد هگز رنگ ها تعریف بشه 

 

پس این تیکه فقط برای oled های تمام رنگیه! ولی اصلا حذفش نکنید چون چیزی نمایش داده نمیشه اون وقت ! 

 

display.println("WWW.keewe.IR");

 

تو این خط گفتیم که رشته www.keewe.ir رو چاپ کن و برو به خط بعد 

 

اگر میخواستیم در همون سطر بمونه قاعدتا باید از print به جای println استفاده میکردیم 

 

display.display();

 

این کد برای نمایش چیزیی که فرستادیم باید بعد از نوشتن در print بیاد حتما وگرنه نمایش داده نمیشه 

 

delay(3000);

 

یه مکث 3 ثانیه ای 

 

 display.setTextSize(3);




  display.setCursor(20, 20);




  // Display static text




  display.println("KEEWE");




  display.display();

خب چون نمیخواییم که خط بالا از بین بره یعنی “www.keewe.ir” پس صفحه رو با clearDisplay پاک نمیکنیم و یه تغیری تو دستورات بالا میدیم ، در (20,20) میگیم که کلمه یا جمله بعدی که میگم بهت بنویس مشابه دستورات بالا ! 

 

}

 

void setup رو میبندیم. 

 

void loop() { 




}

 

و این تابع void loop درسته چیزی توش نیست ولی نباید پاکش کنید چون بدنه اصلی برنامه هست و اررور میده اگه نباشه 

 

چون چیزی برای تکرار شدن پی در پی نداشتیم پس اینجارو خالی گذاشتیم 

 

تا وقتی که دستور ClearDisplay داده نشه oled همه چیزهایی که بهش فرستادین رو در صفحه نگه میداره 

 

دیدی چه ساده بود ؟! هر سوالی داشتی بپرس 

 

بعدا آموزش انیمیشن سازی و آیکون و لوگو گذاری در OLED رو باهم خواهیم داشت.. 

 

یاحق

 

برای ارسال نظر لطفا وارد شوید.

درباره حسام نیکخواه

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

مطالب مرتبط