در قسمتهای قبلی به آموزش توابع مربوط به کتابخانه ماژول نمایشگر OLED پرداختیم. در این قسمت قصد داریم به نمایش لوگو نمایشگر OLED و همچنین تصویر در نمایشگر OELD بپردازیم. در ادامه آموزش با مرجع تخصصی آردوینو ، دیجی اسپارک همراه باشید. مطالب آموزشی قبلی در لینکهای زیر قابل دسترس هستند.
آموزش راهاندازی نمایشگر OLED آردوینو بخش اول
آموزش راهاندازی ماژول نمایشگر OLED آردوینو بخش دوم
آموزش ماژول نمایشگر OLED آردوینو بخش سوم
آموزش ماژول نمایشگر OLED آردوینو بخش چهارم
آموزش ماژول نمایشگر OLED آردوینو بخش پنجم
آموزش ماژول نمایشگر OLED آردوینو بخش ششم
رسم تصاویر در OLED با Gimp
میخواهیم تصویر زیر را بر روی نمایشگر OELD نمایش دهیم. در ابتدا برای نمایش لوگو نمایشگر OLED نرمافزار Gimp را از لینک زیر دانلود و نصب نمایید. دانلود نرمافزار Gimp از soft98 مرحله اول : وارد نرمافزار شوید و تصویری مورد نظر را درون این نرمافزار باز میکنیم.باید دقت داشته باشید رزولوشن تصویر کمتر از ۱۲۸*۶۴ باشد( رزولوشن عکس باید کمتر یا مساوی تراکم پیکسلی نمایشگر باشد).همچنین توجه داشته باشید تصویر مورد نظر فقط باید دارای دو رنگ مشکی و سفید باشد ، در غیر این صورت باید تصویر را ویراییش کنیم و به رنگ سفید و مشکی تبدیل کنیم.( رنگی مشکی در تصویر به صورت رنگ سفید در نمایشگر و رنگ مشکی به رنگ سفید در ماژول OLED نمایش داده میشود).
مرحله دوم : سپس از منوی file گزینه Export as را انتخاب میکنیم و در پنجره باز شده فرمت فایل را بر روی x BitMap image قرار میدهیم و تصویر خود را در مکان موردنظر ذخیره میکنیم.
رسم تصاویر OLED با تابع drawXBMP
به وسیلهی این تابع میتوان تصاویری را بافرمت XBMP را بر روی نمایشگر OLED نمایش داد.ساختار کلی این تابع به صورت زیر است.
drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
پارامترها به شرح زیر است.
x : مختصات نمایش تصویر در راستای محور x
y : مختصات نمایش تصویر در راستای محور y
w : اندازهی عرض تصویر میباشد
h : ارتفاع تصویر میباشد
bitmap : آرایهای از کدهای تصویر تولید شده میباشد( این قسمت توضیح داده میشود)
مرحله سوم: اکنون به محلی که تصویر مورد نظر را با فرمت xbm ذخیره کردیم مراجعه نموده ، برروی آن راست کلیک کرده و آن را با یک editor باز میکنیم:
مرحله چهارم: کد زیر را در نظر بگیرید :
#include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI #define test_width 99 #define test_height 64 static const unsigned char test_bits[] PROGMEM = { }; void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.drawXBMP( 0, 0, test_width, test_height, test_bits); } void setup(void) { } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); }
کد آردوینو ماژول OLED I2C
میبایست بهجای define test_width و define test_heigh در ابتدای برنامه ، عرض و ارتفاع تصویر را وارد کنیم.همچنین باید درون آرایه test_bits[] کدهای تولید شده در مرحله سوم را قرار دهیم. پس کد نهایی ما به صورت زیر در میآید.
#include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI #define test_width 99 #define test_height 64 static const unsigned char test_bits[] PROGMEM = { ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, ۰x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x1e, 0x60, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x1f, 0x60, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, ۰x00, 0x00, 0x0f, 0x60, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, ۰x00, 0x00, 0x86, 0x03, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, ۰x07, 0x00, 0x00, 0x87, 0x03, 0x60, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, ۰x00, 0x0f, 0x00, 0x80, 0x07, 0x03, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, ۰x00, 0x00, 0x0e, 0x00, 0xc0, 0x03, 0x07, 0x60, 0x00, 0x00, 0x3a, 0x00, ۰x00, 0x0e, 0x10, 0x1c, 0x00, 0xc0, 0x00, 0x06, 0x60, 0x00, 0x00, 0x33, ۰x80, 0x00, 0x7e, 0x18, 0x18, 0x00, 0x60, 0x00, 0x06, 0x60, 0x10, 0x24, ۰x33, 0xc0, 0x00, 0xff, 0x18, 0x18, 0x00, 0x60, 0x00, 0x06, 0x64, 0x30, ۰x66, 0x33, 0xc0, 0x00, 0xf0, 0x18, 0x30, 0x00, 0x60, 0x00, 0x06, 0x66, ۰x30, 0x36, 0x33, 0xe0, 0x00, 0xf0, 0x10, 0x10, 0x00, 0xe0, 0x80, 0x06, ۰x66, 0x18, 0x36, 0x33, 0x70, 0x00, 0x78, 0x18, 0x10, 0x00, 0xe0, 0xff, ۰x03, 0xe6, 0xff, 0xff, 0x11, 0x30, 0xfc, 0xff, 0x9f, 0x1f, 0x00, 0xc0, ۰xff, 0x01, 0xec, 0xff, 0xff, 0x31, 0x18, 0xfc, 0xdf, 0x8f, 0x0f, 0x00, ۰x00, 0x7f, 0x00, 0x84, 0xf6, 0xcd, 0x08, 0x18, 0xfc, 0xc7, 0x87, 0x07, ۰x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x30, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x00, 0x00, 0x18, 0x30, ۰x18, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x00, 0x00, 0x38, ۰x1c, 0x38, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x36, 0x00, 0x00, ۰xf0, 0x1f, 0x18, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, ۰x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x0c, ۰x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, ۰x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ۰x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void draw(void) { // graphic commands to redraw the complete screen should be placed here u8g.drawXBMP( 0, 0, test_width, test_height, test_bits); } void setup(void) { } void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); }
کد فوق را بر روی آردوینو آپلود کنید. اگر تمام مراحل را درست انجام داده باشید، نتیجهای همانند تصویر زیر مشاهده میکنید.
دو تصویر برای تمرین شما عزیزان قرار داده شده است، طبق آموزشهای داده شده این دو عکس را بر روی نمایشگر OLED نمایش دهید و در صورت با ما در میان بگزارید.
لوازم مورد نیاز
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلام وخسته نباشید وتشکر از مطالب بسیار عالی سایت
احتراما خواهشمندم در صورت امکان LCD گرافیکی را نیز آموزش بدهید تا بتوانیم این پروزه ها راروی آن ببندیم زیرا از نظر اندازه ازOLED بزگتر میباشد.
با تشکر دوباره از زحمات شما
[…] آموزش نمایش لوگو در نمایشگر OLED […]
سلام امکانش هست اصول نمایش روی این نمایشگر رو آموزش بدید تا بتونیم با میکرو کنترلرهای دیگه به جز آردوینو راه اندازی و استفاده کنیم ؟؟؟؟
سلام ماژول OLED برای سایر میکروکنترلر ها دارای کتابخانه هست و نیاز به کدنویسی سطح پایین نیست
میشه کتابخانشو واسه avr معرفی کنید به زبان c لطفا
[…] آموزش نمایش لوگو نمایشگر OLED آردوینو بادیجی اسپارک آموزش ماژول نمایشگر OLED آردوینو بخش چهارم · آموزش ماژولدانلود نرمافزار Gimp از soft. مرحله اول وارد […]
سلام مهندس
میگم واسه نمایش متن روی ماژول تابلو روان که برنامه نویسیش توی محیط اردوینو باشه میتونید کمکم کنید من خودم برنامشو نوشتم فقط برای فارسی نویس مشکل دارم ایا باید کتابخونه فارسی نصب کنم چجوریه ممنون میشم راهنمایی کنید
سلام
کاربر گرامی لطفا در پست های مرتبط سوال خود را مطرح نمایید.
ببخشید من کد شما رو آپلود کردم اما نصف تصویر رو نشون می داد.
خودمم یه عکس با همون کارایی که گفته بودین ساختم اما وقتی آپلود کردم با یه صفحه خط خطی مواجه شدم.
کدم هم اینه
http://s9.picofile.com/file/8337241542/Oled.ino.html
عکس هم اینه
http://s8.picofile.com/file/8337241584/Untitled.png
با سلام
ابعاد تصویر را تغییر دهید مجددا امتحان کنید. سپس از همین طریق نتیجه را اعلام بفرمایید.
ببخشید آیا امکانش هست که یک تصویر دیگر بعد این لگو گذاشت
با سلام
بله امکان پذیر است.
سلام
http://uupload.ir/files/ckv6_img_20190823_185712.jpg
سلام
با توجه به قوانین سایت، جهت استفاده از فرصت ارسال رایگان فروشگاه لینک زیر را مطالعه نمایید.
روش دریافت کد تخفیف ارسال رایگان دانشجو کیت
سلام
انجام این پروژه
http://uupload.ir/files/zl10_img_20190823_183819.jpg
با سلام
از توجه شما ممنونم.
با توجه به قوانین سایت، جهت استفاده از فرصت ارسال رایگان فروشگاه لینک زیر را مطالعه نمایید.
روش دریافت کد تخفیف ارسال رایگان دانشجو کیت
سلام بنده هرکاری میکنم یک خط درمیان نمایش میده چکار کنم؟
با سلام
لطفا شفاف تر توضیح دهید تا راهنمایی شود.
سلام. لطفا برای باز کردن تصویر با فرمت xbm که در مرحله سوم گفته شده که یعنی به صورت کد نمایشش بده یه نرم افزار معرفی کنید
با سلام و تشکر از شما
برای این منظور به پست زیر مراجعه کنید.
اتصال آردوینو UNO به تلویزیون از طریق کابل AV و بدون نیاز به سخت افزار اضافی
سلام و وقت بخیر من تازه شروع به یادگیری کردم و یه مشکلی دارم البته کلی گوگل کردم و جوابی پیدا نکردم
در مورد تمایش چند فریم مشکل بر خوردم
#include
#include “SSD1306.h”
#include “OLEDDisplayUi.h”
#include “Images.h”
SSD1306 display(0x3c,4,5);
OLEDDisplayUi ui (&display);
void drawFrame1(OLEDDisplay *display , OLEDDisplayUiState* state ,int16_t x,int16_t y);
void drawFrame2(OLEDDisplay *display , OLEDDisplayUiState* state ,int16_t x,int16_t y);
void drawOverlay1(OLEDDisplay *display , OLEDDisplayUiState* state);
FrameCallback frames []={drawFrame1,drawFrame2};
int numberOfFrames=2;
OverlayCallback overlays[]={drawOverlay1};
int numberOfOverlay=1;
void setup() {
ui.init();
display.clear();
ui.setTargetFPS(60);
ui.setFrames(frames,numberOfFrames);
ui.setOverlays(overlays,numberOfOverlay);
}
void loop() {
display.flipScreenVertically();
ui.update();
}
void drawFrame1(OLEDDisplay *display , OLEDDisplayUiState,int16_t x,int16_t y){
display->drawXbm(x+34,y+2,60,60,android);
}
void drawFrame2(OLEDDisplay *display , OLEDDisplayUiState,int16_t x,int16_t y){
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(0+x,10+y,”Ramin Ostad”);
display->setFont(ArialMT_Plain_16);
display->drawString(0+x,20+y,”IOT LEsson 10″);
display->setFont(ArialMT_Plain_24);
display->drawString(0+x,34+y,”IOT.it”);
}
void drawOverlay1(OLEDDisplay *display , OLEDDisplayUiState* state){
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(92,54,”Netramin”);
}
===============================================
Error:
Arduino: 1.8.15 (Windows 10), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)”
sketch\OLED-Ui.ino.cpp.o:(.data.frames+0x0): undefined reference to `drawFrame1(OLEDDisplay*, OLEDDisplayUiState*, short, short)’
sketch\OLED-Ui.ino.cpp.o:(.data.frames+0x4): undefined reference to `drawFrame2(OLEDDisplay*, OLEDDisplayUiState*, short, short)’
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
با سلام
لطفا مشکل و ارور دریافتی را فقط ضمیمه کنید تا بررسی شود.