پروتکل ارتباطی نمایشگر OLED
ماژول OLED با پروتکل ارتباطی I2C قابلیت ارتباط با میکروکنترلر و آردوینو توسط پروتکل I2C را دارد. زاویه دید حداکثر 160 درجه و همچنین کنتراست بالای این نوع نمایشگرها از ویژگیهایی است که باعث برتری این نوع نمایشگر می شود.
از این نمایشگر ها در ساعت های هوشمند، گجت های پوشیدنی و… به وفور استفاده می گردد. اگر در راه اندازی نمایشگر oled با آردوینو به مشکل برخوردید این آموزش قطعا براتون مفید هست.
آموزش مقدماتی آشنایی با آردوینو را ببینید. برای رفتن به آموزش توابع پایه آردوینو کلیک کنید.
کتابخانه های راه انداز OLED
برای راه اندازی ارتباط با نمایشگر OLED با پردازنده آردوینو کتابخانه های بسیاری وجود دارند. برخی از آنها عبارت اند از:
ACROBOTIC SSD1306 ,Adafruit Feather ,Adafruit SH110X ,Adafruit SSD1305 ,Adafruit SSD1306 ,Adafruit SSD1306 Wemos Mini ,Adafruit SSD1325 ,Adafruit SSD1327 ,Adafruit SSD1331 ,Adafruit SSD1351 ,bb_spi_lcd ,ER_OLEDM1_CH1115 ,ESP QRcode ,lcdgfx ,U8g2 ,U8glib ,Ucglib ,U8glib-HAL ,ssd1306
چرا کتابخانه Adafruit_SSD1306
برای راه اندازی نمایشگر OLED با آردوینو نیاز به درایور داریم که ماژول های داخل بازار با درایور ssd1306 موجود هستند. اگر از این ماژول ها استفاده میکنید باید کتابخانه ای انتخاب کنید که از این درایور پشتیبانی کند. از میان تمامی کتابخانه های این درایور، Adafruit_SSD1306 از همه استاندارد تر و کامل تر هست. به شخصه تجربه کردم که برخی از کتابخانه ها داخل پروژه اختلال ایجاد میکنند مخصوصا زمانی که غیر از نمایشگر المان دیگری به پورت I2C متصل می باشد.
پس برای کم شدن دردسرمان مستقیم به برسی Adafruit_SSD1306 میپردازیم.
کتابخانه های مورد نیاز برای Adafruit_SSD1306
#include
#include
#include
#include
داخل برنامه باید علاوه بر Adafruit_SSD1306.h کتابخانه Adafruit_GFX.h را هم نصب کنید.
اگر نمایشگر I2C دارید کتابخانه Wire.h و اگر نمایشگر شما از نوع SPI است، کتابخانه SPI.h را نصب کنید.
لیست توابع کتابخانه Adafruit_SSD1306.h و Adafruit_GFX.h
جهت پیدا کردن سریع توضیحات هر تابع، با کلیک در لیست زیر به بخش مربوطه هدایت می شوید.
- ;()Adafruit_SSD1306 display تعریف نمایشگر
- ;()Begin شروع به کار
- ;()display نمایش محتوا
- ;()clearDisplay پاک کردن محتوا
- ;()drawPixel تنظیم / پاک / معکوس یک پیکسل
- ;()invertDisplay معکوس تمامی پیکسل ها
- ;()dim تنظیم روشنایی
- ;()print نمایش متن
- ;()setTextSize تنظیم سایز نوشته
- ;()setTextColor تنظیم رنگ نوشته
- ;()setFont تعریف فونت نوشته
- ;()setCursor محل قرار گیری نوشته
- ;()scroll نمایش اسلایدی برای متن
- ;()drawLine کشیدن خطوط در نمایشگر
- ;()drawRect رسم مربع و مستطیل تو خالی
- ;()fillRect مربع و مستطیل تو پر
- ;()drawRoundRect رسم مربع و مستطیل گوشه گرد تو خالی
- ;()fillRoundRect مربع و مستطیل گوشه گرد تو پر
- ;()drawCircle رسم دایره تو خالی
- ;()fillCircle دایره تو پر
- ;()drawTriangle رسم مثلث تو خالی
- ;()fillTriangle مثلث تو پر
- ;()drawBitmap نمایش تصویر
- ابزار آنلاین تبدیل عکس به کد
تمامی توابع برای راه اندازی نمایشگر OLED با آردوینو
توابع راه اندازی و تنظیمات نمایشگر
;()Adafruit_SSD1306 display
در ابتدا راه اندازی oled در برنامه آردوینو باید یک شئ از کتابخانه را برای نمایشگر تعریف کنیم. به فرم کد زیر این کار را انجام دهید.
در پارامتر اول تابع، تعداد پیکسل عرض نمایشگر را مشخص می کند.
سپس پارامتر دوم تابع، تعداد پیکسل طول نمایشگر را مشخص می کند.
بعد پارامتر سوم تابع، پایه های I2C را مشخص می کند. (&Wire به معنی اتصال به پایه های اصلی این پورت از پردازنده است)
در نهایت پارامتر چهارم تابع، پایه متصل به ریست نمایشگر را مشخص می کند. (-1 به معنی متصل نبودن که معمولا از همین مقدار استفاده میکنیم)
برای نمایشگر OLED با رابط I2C از کد زیر استفاده کنید!
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
برای نمایشگر OLED با رابط SPI از کد زیر استفاده کنید!
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
;()Begin
تابع معروف Begin که در اکثر کتابخانه ها برای شروع به کار استفاده میشود. برای نمایشگر OLED باید در حلقه setup تعریف شود. این تابع دو پارامتر دارد، پارامتر اول برای تعریف نوع نمایشگر و پارامتر دوم آدرس I2C نمایشگر است.
اگر از نمایشگر نوع SPI استفاده میکنید فقط باید نوع نمایشگر را مشخص کنید و آدرس لازم نیست.
display.begin(SSD1306_SWITCHCAPVCC, 0x3D); //نمایشگر 128*64
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //نمایشگر 128*32
;()display
این تابع برای نمایش محتوای اولیه بافر نمایشگر روی صفحه مورد استفاده قرار میگیرد. با فراخوانی هر تابع برای نمایش ، مقدار داده در بافر ذخیره می شود و با این تابع بافر به نمایشگر منتقل و در صفحه ظاهر می شود.
display.display();
;()clearDisplay
این تابع وظیفه پاک کردن بافر را دارد که در واقع تمام پیکسل های موجود در نمایشگر را خاموش خواهد کرد، این مورد یکی از مواردی است که قبل از راهاندازی اولیه نمایشگر بسیار مورد نیاز است تا در روند اجرای پروژه شما مشکلی ایجاد نشود.
display.clearDisplay();
;()drawPixel
این تابع یک پیکسل را تنظیم ، پاک یا معکوس میکند. این تابع سه پارامتر برای تنظیم دارد که شامل مقدار x, مقدار y و همچنین رنگ پیکسل است.
display.drawPixel(10, 10, WHITE);
;()invertDisplay
این تابع حالت پیکسل ها را معکوس خواهد کرد، که برای مقدار دهی به این تابع از دو مورد true / false استفاده میشود
display.invertDisplay(true);
delay(1000);
display.invertDisplay(false);
delay(1000);
;()dim
این مورد برای استفاده از روشنایی متوسط و کامل نمایشگر استفاده می شود، که به صورت ۰ و ۱ یا true / false مقدار دهی میشود. که در صورت true بودن مقدار نور صفحه کم خواهد شد و در صورت false بودن، از تمام قدرت نور صفحه استفاده خواهید کرد.
display.dim (true); //نور صفحه کم
display.dim (false); //نور صفحه زیاد
توابع نوشتاری متن
از این تابع برای نمایش متن یا مقادیر مورد نظر در نمایشگر استفاده میشود.
همچنین میتوانید از تابع ;()println استفاده کنید، پس از نمایش متن به خط بعدی فرستاده میشود تا برای دریافت متن بعدی آماده باشد.
display.print("Hello World");
display.println("Hello World");
همچنین این دو تابع چاپ متن، توانایی نمایش اعداد باینری، اکتان، دسیمال، هگز و تایین ارزش اعشار را دارند. برای درک بهتر به نمونه کد های زیر و توضیحات توجه کنید.
display.print(78, BIN); //“1001110” روی نمایشگر نوشته میشود
display.print(78, OCT); //“116” روی نمایشگر نوشته میشود
display.print(78, DEC); //“78” روی نمایشگر نوشته میشود
display.print(78, HEX); //“4E” روی نمایشگر نوشته میشود
display.println(1.23456, 0); //“1” روی نمایشگر نوشته میشود
display.println(1.23456, 2); //“1.23” روی نمایشگر نوشته میشود
display.println(1.23456, 4); //“1.2346” روی نمایشگر نوشته میشود
;()setTextSize
این تابع برای مشخص کردن سایز فونت نوشتاری است. برای مثال با وارد کردن مقدار ۱، سایز در مورد نظر برای فونت ۱:۱ پیکسل خواهد بود. برای تایین سایز نوشته از عدد 1 تا 5 میتوانید استفاده کنید.
display.setTextSize(1); //کوچک ترین
display.setTextSize(2);
display.setTextSize(3);
display.setTextSize(4);
display.setTextSize(5); //بزرگ ترین
;()setTextColor
از این تابع برای مشخص کردن رنگ نوشته ها استفاده میشود برای مثال WHITE رنگ نوشته را سفید در نظر خواهد گرفت. (این مورد به نوع نمایشگر نیز وابسته است).
display.setTextColor(WHITE); //نوشته سفید
display.setTextColor(BLACK); //نوشته مشکی
display.setTextColor(INVERSE);//نوشته معکوس
;()setFont
display.setFont(&FreeMonoBoldOblique12pt7b);
در تابع بالا میتوانید از فونت های زیر استفاده کنید.
توجه داشته باشید در ابتدا برنامه پس از تعریف کتابخانه ها باید فونت مورد نظر را فراخوانی کنید. در یک برنامه میتوانید از چندین فونت استفاده کنید.
#include
#include
#include
#include
mono
- FreeMono9pt7b.h
- FreeMono12pt7b.h
- FreeMono18pt7b.h
- FreeMono24pt7b.h
- FreeMonoBold9pt7b.h
- FreeMonoBold12pt7b.h
- FreeMonoBold18pt7b.h
- FreeMonoBold24pt7b.h
- FreeMonoBoldOblique9pt7b.h
- FreeMonoBoldOblique12pt7b.h
- FreeMonoBoldOblique18pt7b.h
- FreeMonoBoldOblique24pt7b.h
- FreeMonoOblique9pt7b.h
- FreeMonoOblique12pt7b.h
- FreeMonoOblique18pt7b.h
- FreeMonoOblique24pt7b.h
sans
- FreeSans9pt7b.h
- FreeSans12pt7b.h
- FreeSans18pt7b.h
- FreeSans24pt7b.h
- FreeSansBold9pt7b.h
- FreeSansBold12pt7b.h
- FreeSansBold18pt7b.h
- FreeSansBold24pt7b.h
- FreeSansBoldOblique9pt7b.h
- FreeSansBoldOblique12pt7b.h
- FreeSansBoldOblique18pt7b.h
- FreeSansBoldOblique24pt7b.h
- FreeSansOblique9pt7b.h
- FreeSansOblique12pt7b.h
- FreeSansOblique18pt7b.h
- FreeSansOblique24pt7b.h
serif
- FreeSerif9pt7b.h
- FreeSerif12pt7b.h
- FreeSerif18pt7b.h
- FreeSerif24pt7b.h
- FreeSerifBold9pt7b.h
- FreeSerifBold12pt7b.h
- FreeSerifBold18pt7b.h
- FreeSerifBold24pt7b.h
- FreeSerifBoldItalic9pt7b.h
- FreeSerifBoldItalic12pt7b.h
- FreeSerifBoldItalic18pt7b.h
- FreeSerifBoldItalic24pt7b.h
- FreeSerifItalic9pt7b.h
- FreeSerifItalic12pt7b.h
- FreeSerifItalic18pt7b.h
- FreeSerifItalic24pt7b.h
متفرقه
- Org_01.h
- Picopixel.h
- Tiny3x3a2pt7b.h
- TomThumb.h
توابع تنظیم و تغییر مختصات
;()setCursor
این تابع برای مشخص کردن محل قرار گیری متن مورد نظر استفاده میشود، که با مقدار دهی دو عددی x و y شروع به کار میکند.
display.setCursor( 16, 5);
;()scroll
از این تابع که دارای زیر مجموعه هایی نیز هست برای ایجاد حالت نمایش اسلایدی متن های ارسالی در نمایشگر استفاده میشود.
// Scroll full screen
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
همچنین میتوانید از میان متن های چاپ شده فقط یک خط را اسلایدی کنید ، به کد زیر توجه کنید!
// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);
توابع اشکال هندسی - Geometry
;()drawLine
از این تابع برای رسم خطوط در نمایشگر های Oled استفاده میشود که برای مقدار دهی باید x , y ابتدا خط و x , y انتهای خط و رنگ خط را در تابع تعریف کنید.
display.drawLine(10,20,10,50 ,WHITE);
;()drawRect
از این تابع برای رسم اشکالی مانند مربع تو خالی در نمایشگر استفاده میشود، که میتوانیم از این مورد برای ساخت UI استفاده کرد. که در مقدار دهی x , y مختصات شروع مربع، عرض ، ارتفاع و رنگ آن را مشخص می کنیم.
display.drawRect(0, 15, 60, 10, WHITE);
;()fillRect
از این تابع برای رسم اشکالی مانند مربع تو پر در نمایشگر استفاده میشود، که میتوانیم از این مورد برای ساخت UI استفاده کرد. که در مقدار دهی x , y مختصات شروع مربع، عرض ، ارتفاع و رنگ آن را مشخص می کنیم.
display.fillRect(0, 15, 60, 10, WHITE);
;()drawRoundRect
از این تابع برای رسم اشکالی مانند مربع تو خالی با گوشه های گرد در نمایشگر استفاده میشود، که میتوانیم از این مورد برای ساخت UI استفاده کرد. که در مقدار دهی x , y مختصات شروع مربع، عرض ، ارتفاع ، شعاع گوشه مربع و رنگ آن را مشخص می کنیم.
display.drawRoundRect(0, 15, 60, 40, 10, WHITE);
;()fillRoundRect
از این تابع برای رسم اشکالی مانند مربع تو پر با گوشه های گرد در نمایشگر استفاده میشود، که میتوانیم از این مورد برای ساخت UI استفاده کرد. که در مقدار دهی x , y مختصات شروع مربع، عرض ، ارتفاع ، شعاع گوشه مربع و رنگ آن را مشخص می کنیم.
display.fillRoundRect(0, 15, 60, 40, 10, WHITE);
;()drawCircle
از این تابع برای رسم اشکال دایره تو خالی در نمایشگر استفاده میشود. که در مقدار دهی x , y مختصات مرکز دایره،شعاع و رنگ آن را مشخص می کنیم.
display.drawCircle(20, 35, 20, WHITE);
;()fillCircle
از این تابع برای رسم اشکال دایره تو پر در نمایشگر استفاده میشود. که در مقدار دهی x , y مختصات مرکز دایره،شعاع و رنگ آن را مشخص می کنیم.
display.fillCircle(20, 35, 20, WHITE);
;()drawTriangle
از این تابع برای رسم اشکال مثلثی تو خالی در نمایشگر استفاده میشود. که در مقدار دهی x , y راس اول، x , y راس دوم، x , y راس سوم و رنگ آن را مشخص می کنیم.
display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);
;()fillTriangle
از این تابع برای رسم اشکال مثلثی تو پر در نمایشگر استفاده میشود. که در مقدار دهی x , y راس اول، x , y راس دوم، x , y راس سوم و رنگ آن را مشخص می کنیم.
display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);
تابع نمایش عکس - Bitmap
;()drawBitmap
از این تابع برای نمایش تصویر در نمایشگر استفاده میشود. که در مقدار دهی x , y مختصات شروع تصویر ، متغییر حاوی کد های تصویر ، عرض و ارتفاع تصویر و رنگ آن را مشخص می کنیم.
display.drawBitmap( 70, 16, test_bits, 50, 50, WHITE);
برای استفاده از کد نمونه بالا باید متغییر زیر را در ابتدا برنامه تعریف کنید.
static const unsigned char test_bits[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1f, 0x07, 0xf8, 0x3c, 0x00,
0x00, 0x00, 0x3c, 0x3f, 0xfe, 0x1e, 0x00, 0x00, 0x00, 0x78, 0xff, 0xff, 0x87, 0x00, 0x00, 0x00,
0x73, 0xe0, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x0f,
0xf8, 0x78, 0x00, 0x00, 0x00, 0x1c, 0x7f, 0xff, 0x8e, 0x00, 0x00, 0x00, 0x38, 0xf8, 0x07, 0x87,
0x00, 0x00, 0x00, 0x71, 0xe0, 0x03, 0xc7, 0x00, 0x00, 0x00, 0x73, 0xc1, 0xc0, 0xe3, 0x80, 0x00,
0x00, 0xe7, 0x1f, 0xfc, 0x78, 0x00, 0x00, 0x01, 0xcf, 0x3e, 0x3e, 0x38, 0x00, 0x00, 0x00, 0x8e,
0x78, 0x0f, 0x38, 0x00, 0x00, 0x00, 0x0e, 0xf0, 0x03, 0x9c, 0x80, 0x00, 0x00, 0x18, 0xe7, 0xf1,
0x8c, 0xc0, 0x00, 0x00, 0x39, 0xcf, 0xf9, 0xce, 0xc0, 0x00, 0x00, 0x71, 0x9e, 0x3c, 0xc6, 0xc0,
0x00, 0x01, 0xe3, 0x1c, 0x1c, 0xc6, 0xe0, 0x00, 0x01, 0xc7, 0x18, 0x8c, 0xc6, 0xe0, 0x00, 0x01,
0x8f, 0x39, 0xcc, 0xc6, 0xe0, 0x00, 0x00, 0x0e, 0x71, 0xcc, 0xcc, 0xe0, 0x00, 0x00, 0x3c, 0xe3,
0x8c, 0xcc, 0xe0, 0x00, 0x00, 0x78, 0xe3, 0x1c, 0xcc, 0xe0, 0x00, 0x00, 0xf1, 0xc7, 0x1d, 0xcc,
0xe0, 0x00, 0x01, 0xc7, 0x9e, 0x39, 0x9c, 0xc0, 0x00, 0x01, 0x8f, 0x1e, 0x31, 0x98, 0xc0, 0x00,
0x00, 0x0f, 0x1c, 0x71, 0x98, 0xc0, 0x00, 0x00, 0x3e, 0x38, 0xe1, 0x9c, 0xc0, 0x00, 0x00, 0x70,
0xe1, 0xdd, 0x8c, 0x00, 0x00, 0x01, 0xf0, 0xe3, 0xdd, 0x8e, 0x00, 0x00, 0x01, 0xc3, 0xc7, 0x9d,
0x87, 0x00, 0x00, 0x00, 0x0f, 0x1e, 0x38, 0xc7, 0x80, 0x00, 0x00, 0x0f, 0x1e, 0x38, 0xe3, 0x80,
0x00, 0x00, 0x3c, 0x38, 0x38, 0x70, 0x00, 0x00, 0x00, 0x78, 0x70, 0x1c, 0x78, 0x00, 0x00, 0x00,
0x61, 0xe7, 0x9c, 0x1e, 0x00, 0x00, 0x00, 0x03, 0xdf, 0xce, 0x04, 0x00, 0x00, 0x00, 0x07, 0x9f,
0xc7, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3c, 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x61, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
برای دریافت کد هگز تصویر مورد نظرتون ابتدا باید عکس را به کمک یک ویرایشگر تصویر مانند paint به ابعاد مورد نظر برای نمایش در نمایشگر تغییر بدهید و در آخر با پسوند bmp ذخیره کنید. با این کار عکس شما سیاه و سفید می شود؛ در واقع از دو رنگ سفید و مشکی ساخته می شود. برای مثال تصویر زیر را در ابعاد 50*50 با پسوند bmp ذخیره می کنیم.
سپس به کمک ابزار آنلاین زیر که فارسی سازی شده تصویر مورد نظرتان را آپلود کنید. با انجام تنظیمات دلخواه، کد تصویر را ایجاد کنید و به فرم برنامه بالا که گفتیم در ابتدا برنامه خود وارد کنید.
در این آموزش تمامی توابع مربوط به راه اندازی نمایشگر های جذاب oled با چیپ ssd1306 برای کامپایلر آردوینو را برسی کردیم. در صورتی که برای راه اندازی نمایشگر خود به مشکل برخورد کردید بدون نگرانی از طریق دیدگاه های همین صفحه مشکل خود را بیان کنید تا در اصرع وقت برسی و برطرف کنیم.
سلام و درود
ببخشید من وقتی فونت رو روی نمایشگر تغییر میدم
دیگه نمی تونم متن رو وارونه نشون بدم
میخواستم بدونم راه حلی وجود داره
سلام کد های مربوط به این قسمت از پروژتون رو در دیدگاه ها بذارید تا برسی کنم!
با سلام و خسته نباشید ببخشید بنده تازه کار هستم ، با اردینو میخواستم oled ssd1306را راه اندازی کنم از کتابخانه اردینو همین کد را آپلود کردم سه تا کتابخانه میاره ولی ارور میده که wire.h وجود ندارد میام که همین کتابخانه را نصب کنم وجود ندارد one wire و مشابه اینها را میاره چکار باید بکنم از کجا نصب کنم که ارور نده ممنون
سلام واتساپ بهم پیام بدید تا ارور رو برسی کنم، برای wire نیاز به نصب کتابخانه نیست چون پیشفرض در نرم افزار نصب هست!
09140360836