در این آموزش قصد داریم به نحوه راه اندازی OLED های با درایور SD1306 بپردازیم . این OLED ها سایز کوچکی داشته و با تراکم پیکسل بالایی که دارند می توانند تصایور را با کیفیت بالاتری نسبت به LCD های گرافیکی نمایش دهند . می توانید از این OLED ها در پروژه های مبتنی بر ESP32 استفاده کنید . حتی در بسیاری از برد های با هسته ESP32 از این OLED ها استفاده شده است ( برد های مانند Heltek و TTGO ) . در این آموزش از کتابخانه Adafruit_SD1306 استفاده میکنیم که امکانات خوبی دارد . این کتابخانه سازگاری خوبی با هسته های AVR و ESP ها دارد همچنین از الگو هایی برای بالا بردن سرعت اجرا و کاهش استفاده از RAM استفاده می کند . اگر از نمایشگر های مونو مانند OLED ها و LCD های گرافیکی در پروژه های خود استفاده میکنید می توانید از کتابخانه U8g2 استفاده کنید که یک کتابخانه یکپارچه و کامل برای نمایشگر های تک رنگ است .

در این آموزش از برد ESP32 و OLED با درایور SD1306 استفاده خواهیم کرد . SD1306 توانای ارتابط از طریق رابط های SPI و I2C را دارد اما اغلب از رابط I2C به دلیل پین های کمتر ، استفاده می شود . در جدول زیر نحوه اتصال پین های I2C ماژول OLED به برد ESP32 نشان داده شده است :

 

شرح کتابخانه Adafruit_SSD1306 :

برای استفاده از کتابخانه OLED لازم است کتابخانه های زیر را به برنامه خود اضافه کنید (ابتدا باید آن ها را نصب کنید ) :

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

کتابخانه Wire جهت ارتباط I2C و نیز کتابخانه GFX شامل توابع مشترک نمایشگر های مونو کالر می باشد ( توابعی مانند رسم خط ، نقطه و…) .

 

برای کار با متد های کتابخانه ابتدا یک شی از کلاس Adafruit_SD1306 باید بسازید . تابع سازنده ای نکلاس خود شامل سه پارامتر است که شامل سطر ، ستون و پین RESET نمایشگر می باشد . در صورتی که پین RESET نمایشگر به جایی متصل نباشد می توانید این پارامتر را 1- قرار دهید :

Adafruit_SSD1306 display(تعداد سطر ، تعداد ستون, &Wire, -1);

 

از تابع زیر برای شروع کار با OLED استفاده می شود . این تابع را باید در روتین Setup فراخوانی کنید :

display.begin(SSD1306_SWITCHCAPVCC, 0x3C)

 

مقدار 0x3C مربوط به آدرس OLED می باشد کهممکن است متفاوت باشد . قبل از راه اندازی OLED از طریق برنامه های اسکنر آدرس I2C می توانید آدرس OLED خود را پیدا کنید .

بهتر است همیشه از یک شرط برای انجام صحیح پیکر بندی OLED استفاده کید تا از خطا های احتمالی آگاه بشید :

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
  Serial.println("SSD1306 allocation failed");
  for(;;); // Don't proceed, loop forever
}

 

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

display.clearDisplay();

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

display.setTextSize(1);

 

سپس رنگ متن را انتخاب می کنید :

display.setTextColor(WHITE);

پس از اجرای توابع فوق می توانید با استفاده از تا زیر مکان مکان نما را مشخص کنید :

display.setCursor(X,Y);

 

با تعیین موقعیت مکان نما ، می توانید توسط تابع print هر متنی را بر روی نمایشگر چاپ کنید :

display.println("Hello, world!");

 

 

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

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

#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

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  // Display static text
  display.println("Scrolling Hello");
  display.display(); 
  delay(100);
 
}

void loop() {
  // Scroll in various directions, pausing in-between:
  display.startscrollright(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrollleft(0x00, 0x0F);
  delay(2000);
  display.stopscroll();
  delay(1000);
  display.startscrolldiagright(0x00, 0x07);
  delay(2000);
  display.startscrolldiagleft(0x00, 0x07);
  delay(2000);
  display.stopscroll();
  delay(1000);
}

 

Tags:
About Author: USER_4