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

آموزش راه اندازی ماژول OLED با بردهای آردوینو درایور SSD1306 و رفع مشکلات

getting-started-with-oled-display-and-arduino-ssd1306-driver-digispark
نوشته شده توسط پریسا پوربلورچیان

با ورود ماژول OLED یا به عبارتی Organic Light emitting diode به دنیای نمایشگرها انقلاب تازه‌ای در الکترونیک را رقم زده است. پرنور، شفاف و بسیار نازک و انتخاب رنگ از ویژگی‌های بارز ماژول OLED مدرن است. پس از آموزش راه اندازی ال سی دی های کاراکتری نوبت به OLED گرافیکی رسیده است. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


نمایشگر OLED SSD1306


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

  • رابط: SSD1306 با رابط I2C (دو سیمی) یا SPI (چهار سیمی) برای ارتباط با میکروکنترلرها و سیستم‌های تعبیه شده استفاده می‌شود. این رابط‌ها امکان کنترل آسان و اتصال سریع را فراهم می‌کنند.
  • ولتاژ کاری: SSD1306 با ولتاژ کاری ۳٫۳ ولت عمل می‌کند، اما برخی نسخه‌ها نیز قابلیت کار با ولتاژ ۵ ولت را دارند.
  • رزولوشن: SSD1306 دارای رزولوشن ۱۲۸×۶۴ پیکسل است، یعنی توانایی نمایش ۱۲۸ ستون و ۶۴ ردیف را دارد.
  • حافظه داخلی: این تراشه دارای حافظه داخلی کوچکی برای ذخیره تصاویر، فونت‌ها و دیگر داده‌های نمایشگر است.
  • کنتراست قابل تنظیم: SSD1306 امکان تنظیم کنتراست نمایشگر را فراهم می‌کند، که به کاربر اجازه می‌دهد روشنایی و وضوح نمایشگر را تنظیم کند.
  • پشتیبانی از گرافیک: SSD1306 قابلیت نمایش متن، تصاویر و آیکون‌ها را روی نمایشگر OLED فراهم می‌کند. این تراشه قابلیت رسم خطوط، مستطیل‌ها، دایره‌ها و دیگر اشکال هندسی را نیز دارد.
  • قابلیت چندرنگی: SSD1306 قابلیت نمایش چندین رنگ را ندارد و بیشتر در نمایشگرهای تک رنگ استفاده می‌شود. اغلب از رنگ سبز یا آبی در نمایشگرهای OLED با استفاده از SSD1306 استفاده می‌شود.
  • مصرف انرژی کم: به دلیل استفاده از تکنولوژی OLED، SSD1306 مصرف انرژی کمی دارد و در پروژه‌هایی که به عمر باطری بالا نیاز دارند مناسب است.
  • کتابخانه‌های نرم‌افزاری: برای کنترل SSD1306 و نمایش محتوا بر روی نمایشگر، کتابخانه‌های نرم‌افزاری متعددی برای میکروکنترلرها و سیستم‌های تعبیه شده وجود دارد. این کتابخانه‌ها عملیات مانند نمایش متن، رسم شکل هندسی و نمایش تصاویر را ساده‌تر می‌کنند.

برای استفاده از SSD1306 در پروژه‌های مبتنی بر میکروکنترلرها مانند Arduino، Raspberry Pi و ESP8266، کتابخانه‌هایی نظیر Adafruit SSD1306، U8g2 و OLED_I2C استفاده می‌شود. این کتابخانه‌ها دارای روش‌ها و توابعی هستند که به کاربر امکان کنترل نمایشگر SSD1306 را می‌دهند و تسهیلات بیشتری در نمایش محتوا فراهم می‌کنند.استفاده از SSD1306 در پروژه‌های الکترونیکی مانند ساعت‌های دیجیتال، نمایشگرهای اطلاعاتی کوچک و دستگاه‌های قابل حمل دیگر بسیار رایج است.

  • اندازه کوچک: SSD1306 دارای اندازه کوچکی است که مناسب برای استفاده در پروژه‌هایی با محدودیت فضا است.
  • رزولوشن بالا: این نمایشگر دارای رزولوشن ۱۲۸×۶۴ پیکسل است، که تصاویر و متن‌های واضحی را نشان می‌دهد.
  • اتصال آسان: SSD1306 با استفاده از رابط I2C یا SPI با میکروکنترلرها و سیستم‌های تعبیه شده ارتباط برقرار می‌کند.
  • کارکرد با ولتاژ پایین: نمایشگر SSD1306 با ولتاژ کاری ۳٫۳ ولت عمل می‌کند و مصرف انرژی کمی دارد.
  • قابلیت تنظیم کنتراست: با تنظیم کنتراست، می‌توانید روشنایی و وضوح نمایشگر را تنظیم کنید.

برای استفاده از SSD1306، می‌توانید از کتابخانه‌های نرم‌افزاری موجود برای میکروکنترلرها مانند Arduino یا Raspberry Pi استفاده کنید. این کتابخانه‌ها عملیات کنترل SSD1306 را ساده می‌کنند و شما قادر خواهید بود متن، تصاویر و دیگر محتویات را روی نمایشگر نشان دهید.

 


بررسی پایه OLED SSD1306 PINOUT


نمایشگر OLED SSD1306 دارای چهار پایه اصلی است که برای اتصال به میکروکنترلر یا سیستم تعبیه شده استفاده می‌شوند. این پایه‌ها عبارتند از:

  • VCC: این پایه برای تغذیه نمایشگر OLED استفاده می‌شود. به ولتاژ کاری ۳٫۳ ولت وصل می‌شود. همچنین، ممکن است نیاز به کاندنساتور برای استقرار مناسب ولتاژ باشد.
  • GND: این پایه به منبع زمین متصل می‌شود و برای اتصال به زمین مشترک میکروکنترلر و نمایشگر OLED استفاده می‌شود.
  • SDA (Serial Data): این پایه برای ارتباط داده‌ها بین میکروکنترلر و نمایشگر OLED در رابط I2C استفاده می‌شود. داده‌های سریال بین این پایه و میکروکنترلر جابجا می‌شوند.
  • SCL (Serial Clock): این پایه برای هماهنگ کردن سیگنال‌های سریال در رابط I2C استفاده می‌شود. این سیگنال توسط میکروکنترلر فرستاده می‌شود و هماهنگی انتقال داده‌ها بین دستگاه‌ها را فراهم می‌کند.

پایه‌های SDA و SCL برای رابط I2C استفاده می‌شوند و میکروکنترلر باید قادر باشد به این پایه‌ها وصل شود و با استفاده از کتابخانه‌های مربوطه، ارتباط داده‌ها را با نمایشگر برقرار کند.علاوه بر این چهار پایه اصلی، ممکن است برخی نسخه‌های SSD1306 شامل پایه‌هایی مانند RST (بازنشانی) و CS (انتخاب چیپ) باشند. این پایه‌ها برای عملیات خاص مانند بازنشانی نمایشگر یا انتخاب چیپ در رابط SPI است که در آن از چندین تراشه استفاده می‌شود. پایه RST برای بازنشانی (ریست) نمایشگر استفاده می‌شود. با اعمال سیگنال ریست به این پایه، می‌توان نمایشگر را به حالت اولیه برگرداند.

  • پایه CS (Chip Select) نیز در رابط SPI استفاده می‌شود. این پایه برای انتخاب نمایشگر در میان چندین تراشه ممکن است استفاده شود. با فعال کردن پایه CS مربوطه، نمایشگر SSD1306 می‌تواند ارتباط با میکروکنترلر را برقرار کند و دستورات و داده‌های مربوطه را دریافت کند.

 


پشتیبانی از تمامی میکروکنترلرها


نمایشگر OLED SSD1306 قابلیت پشتیبانی از میکروکنترلرهای مختلف را دارد. این تراشه از رابط‌های ارتباطی متنوعی مانند I2C و SPI پشتیبانی می‌کند که به کمک آنها می‌توان با میکروکنترلرها و سیستم‌های تعبیه شده ارتباط برقرار کرد.به عنوان مثال، میکروکنترلرهایی که از رابط I2C پشتیبانی می‌کنند، از جمله میکروکنترلرهای محبوب Arduino (مانند Arduino Uno، Arduino Nano)، Raspberry Pi، ESP8266 و ESP32 می‌باشند. برای استفاده از SSD1306 با این میکروکنترلرها، کتابخانه‌های مربوطه مانند Adafruit SSD1306 و U8g2 را می‌توان استفاده کرد.همچنین، SSD1306 نیز قابل استفاده با میکروکنترلرهایی است که از رابط SPI پشتیبانی می‌کنند. برخی از میکروکنترلرهایی که از رابط SPI پشتیبانی می‌کنند شامل Arduino (مانند Arduino Due، Arduino Mega) و STM32 می‌باشند. در این حالت نیز می‌توان از کتابخانه‌های مانند Adafruit SSD1306 و U8g2 برای کنترل نمایشگر استفاده کرد.از طریق این کتابخانه‌ها و میکروکنترلرهای مختلف، می‌توان دستورات و داده‌های مربوط به نمایشگر OLED SSD1306 را کنترل و ارسال کرد تا محتوا را بر روی نمایشگر نمایش داده شود.علاوه بر میکروکنترلرهای مذکور، SSD1306 قابلیت پشتیبانی از سایر میکروکنترلرها نیز دارد، زیرا از رابط‌های استاندارد مانند I2C و SPI استفاده می‌کند که بسیاری از میکروکنترلرها این رابط‌ها را پشتیبانی می‌کنند.

PIC میکروکنترلرها: میکروکنترلرهای PIC از شرکت Microchip، مانند PIC16F و PIC18F، قادر به ارتباط با SSD1306 از طریق رابط I2C و SPI هستند.

STM32 میکروکنترلرها: میکروکنترلرهای STM32 از شرکت STMicroelectronics، مانند STM32F1 و STM32F4، قابلیت ارتباط با SSD1306 را از طریق رابط I2C و SPI دارند.

MSP430 میکروکنترلرها: میکروکنترلرهای MSP430 از شرکت Texas Instruments، مانند MSP430G و MSP430F، قادر به کنترل SSD1306 از طریق رابط I2C هستند.

AVR میکروکنترلرها: برخی از میکروکنترلرهای AVR از شرکت Microchip، مانند ATmega328 و ATmega2560، قابلیت اتصال به SSD1306 را از طریق رابط I2C و SPI دارند.

ARM Cortex-M میکروکنترلرها: بسیاری از میکروکنترلرهای ARM Cortex-M از شرکت‌های مختلف، مانند NXP، STM32، و Texas Instruments، قابلیت اتصال و کنترل SSD1306 را دارند.

 

 


روش اتصال به میکروکنترلرها


روش اتصال نمایشگر OLED SSD1306 به میکروکنترلرها می تواند بسته به رابط ارتباطی مورد استفاده (I2C یا SPI) و نوع سیستم و میکروکنترلری که شما استفاده می کنید، متفاوت باشد. در ادامه، دو روش اتصال رایج را برای شما شرح می دهم:

روش اتصال با استفاده از رابط I2C:

اتصال پایه VCC (تغذیه) نمایشگر به منبع تغذیه ۳٫۳ ولت میکروکنترلر.
اتصال پایه GND (زمین) نمایشگر به زمین مشترک میکروکنترلر.
اتصال پایه SDA (سریال داده) نمایشگر به پین SDA میکروکنترلر.
اتصال پایه SCL (سریال کلاک) نمایشگر به پین SCL میکروکنترلر.
اتصال مقاومت pull-up 4.7K از خط SDA به تغذیه ۳٫۳ ولت.
اتصال مقاومت pull-up 4.7K از خط SCL به تغذیه ۳٫۳ ولت.

روش اتصال با استفاده از رابط SPI:

اتصال پایه VCC (تغذیه) نمایشگر به منبع تغذیه ۳٫۳ ولت میکروکنترلر.
اتصال پایه GND (زمین) نمایشگر به زمین مشترک میکروکنترلر.
اتصال پایه MOSI (خروجی سریال داده) نمایشگر به پین MOSI میکروکنترلر.
اتصال پایه SCK (سریال کلاک) نمایشگر به پین SCK میکروکنترلر.
اتصال پایه CS (انتخاب چیپ) نمایشگر به پین CS میکروکنترلر.
اتصال پایه D/C (انتخاب دستور/داده) نمایشگر به پین دلخواه میکروکنترلر (مانند پین D9 در Arduino).
اتصال پایه RST (بازنشانی) نمایشگر به پین دلخواه میکروکنترلر (مانند پین D8 در Arduino).

اتصال مقاومت pull-up 4.7K از خط MOSI به تغذیه ۳٫۳ ولت.
اتصال مقاومت pull-up 4.7K از خط SCK به تغذیه ۳٫۳ ولت.

در هر دو روش اتصال فوق، می‌توانید از کتابخانه‌های نرم‌افزاری مانند Adafruit SSD1306 و U8g2 برای کنترل نمایشگر OLED SSD1306 استفاده کنید. این کتابخانه‌ها دستورات و توابع مورد نیاز برای ارسال دستورات و داده‌ها به نمایشگر را فراهم می‌کنند.

 

 


نصب کتابخانه SSD1306 در آردوینو


کتابخانه OLED SSD1306 یک کتابخانه نرم‌افزاری است که برای کنترل نمایشگر OLED با استفاده از تراشه SSD1306 طراحی شده است. این کتابخانه امکان نمایش متن، تصاویر و گرافیک را روی نمایشگر فراهم می‌کند.این کتابخانه قابلیت اتصال به نمایشگر SSD1306 از طریق رابط I2C و SPI را دارد. این امکان را به شما می‌دهد که با استفاده از هر رابطی که میکروکنترلر شما پشتیبانی می‌کند، نمایشگر را به سیستم خود متصل کنید. کتابخانه OLED SSD1306 قابل استفاده با انواع میکروکنترلرهای محبوب است که ازجمله آردوینو (Arduino)، رزبری پای (Raspberry Pi)، ESP8266 و ESP32 است. این کتابخانه با استفاده از رابط‌های استاندارد، میکروکنترلر شما را قادر می‌سازد تا به آسانی با SSD1306 ارتباط برقرار کنید. با استفاده از کتابخانه OLED SSD1306، شما می‌توانید متن، عدد، سمبل و حتی تصاویر و گرافیک‌های ساده را روی نمایشگر OLED نمایش دهید. این کتابخانه شامل توابعی است که امکان تنظیم اندازه و قلم، ترتیب نمایش، تصاویر و خطوط گرافیکی را فراهم می‌کند.از طریق کتابخانه OLED SSD1306، شما قادر خواهید بود کنتراست و روشنایی نمایشگر را کنترل کنید. با استفاده از توابع مربوطه، می‌توانید مقادیر مربوطه را تنظیم کنید و نورپردازی نمایشگر را تغییر دهید. نمایشگر OLED SSD1306 از صفحه‌بندی چند صفحه‌ای پشتیبانی می‌کند. این به شما امکان می‌دهد چندین صفحه را برای نمایش متن و گرافیک در نظر بگیرید و بین آن‌ها جابجا شوید. کتابخانه OLED SSD1306 نیز توابعی برای سوئیچ کردن بین صفحات را فراهم می‌کند.کتابخانه OLED SSD1306 طراحی شده است تا استفاده آسان و ساده‌ای را برای کاربران فراهم کند. با استفاده از توابع و دستورالعمل‌های موجود در کتابخانه، می‌توانید به سرعت نمایشگر OLED را کنترل کرده و داده‌ها و گرافیک‌های مورد نظر خود را نمایش دهید.

 

ماژول نمایشگر OLED با پروتکل ارتباطی I2C درایور SSD13

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

  • وارد پوشه Document شده و سپس فایل آردوینو Arduino را باز کنید.
  • وارد پوشه Library شده و فایل دانلود شده را کپی کنید.
  • سپس از حالت زیپ خارج کرده و در صورت داشتن اسم master در انتهای اسم فایل آن را پاک کنید.

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

در ادامه به کتابخانه Adafruit_gfx نیاز داریم. همانند تصویر زیر کتابخانه را فیلتر و نصب کنید:

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

 


تست OLED نمایش محتوا و عدد


در این بخش چند نمونه کد آردوینو جهت نمایش انواع محتوا بر روی ماژول OLED را بررسی و اجرا می‌کنیم.

نمایش متن 

 جهت نمایش متن از دستور display استفاده می‌کنیم. در کد زیر تمامی خط های برنامه معرفی شده است. آن را کپی و به نرم افزار آردوینو انتقال دهید:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> //کتابخانه
#include <Adafruit_SSD1306.h> // کتابخانه

Adafruit_SSD1306 display(-1); // ساخت یک آبجکت برای کتابخانه

void setup()   
{                
  // آدرس دهی I2c
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  //پاک کردن حافظه بافر
  display.clearDisplay();

  // نمایش متن بر روی OLED
  display.setTextSize(2); // انتخاب سایز نمایش متن بین ۱ و ۲ انتخاب کنید
  display.setTextColor(WHITE); // انتخاب رنگ
  display.setCursor(0,0); // تعیین مکان نمای نمایش متن بر روی oled
  display.println("theladypi");// متن مورد نظر
  display.display();
  delay(2000);
  display.clearDisplay();

 
}

void loop() {}

جهت نمایش متن مورد نظر در دستور زیر متن را وارد کنید:

 display.println("theladypi");// متن مورد نظر

انتخاب سایز متن بین عدد ۱ و ۲ متغیر است. با توجه به تعداد کاراکترهای کلمه مورد نظر سایز را انتخاب کنید:

 display.setTextSize(2); // انتخاب سایز نمایش متن بین ۱ و ۲ انتخاب کنید

انتخاب مکان نما و یا موقعیت نمایش متن در OLED تحت کنترل شماست. کافیست در خط زیر مشخص کنید:

display.setCursor(x,y);

عدد X مربوط به محور افقی و عدد Y مربوط به محور عمودی است .

و در نهایت با دستور زیر متن پاک می‌شود:

  display.clearDisplay();

 


نمایش عدد روی ماژول OLED


جهت نمایش عدد بر روی OLED از دستور زیر استفاده می‌کنیم:

display.println(123456789);

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

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> //کتابخانه
#include <Adafruit_SSD1306.h> // کتابخانه

Adafruit_SSD1306 display(-1); // ساخت یک آبجکت برای کتابخانه

void setup()   
{                
  // آدرس دهی I2c
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  //پاک کردن حافظه بافر
  display.clearDisplay();

  // نمایش متن بر روی OLED
  display.setTextSize(2); // انتخاب سایز نمایش متن بین ۱ و ۲ انتخاب کنید
  display.setTextColor(WHITE); // انتخاب رنگ
  display.setCursor(0,0); // تعیین مکان نمای نمایش متن بر روی oled
  display.println("123");// متن مورد نظر
  display.display();
  delay(2000);
  display.clearDisplay();

 
}

void loop() {}

 


ساخت اشکال هندسی OLED


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

drawRect()

fillRect()

drawRoundRect()

fillRoundRect()

drawCircle()

fillCircle()

drawTriangle()

fillTriangle()

 سپس بر اساس ابعاد مورد نظر آن را کامل می‌کنیم.

 


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


جهت نمایش کادر مستطیل در ماژول OLED از کد آردوینو زیر استفاده کنید.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> //کتابخانه
#include <Adafruit_SSD1306.h> // کتابخانه

Adafruit_SSD1306 display(-1); // ساخت یک آبجکت برای کتابخانه

void setup()   
{                
  // آدرس دهی I2c
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  //پاک کردن حافظه بافر
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Rectangle");
display.drawRect(0, 15, 60, 10, WHITE);
display.display();
delay(2000);

display.clearDisplay();  
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Rectangle");
display.fillRect(0, 15, 60, 10, WHITE);
display.display();
delay(2000);
  display.clearDisplay();

 
}

void loop() {}

همانطور که در کدها مشخص است، دستور زیر اضافه شده است.

display.drawRect(0, 15, 60, 10, WHITE);

display.fillRoundRect(0, 15, 60, 40, 10, WHITE);

که به ترتیب عددهای نوشته شده محور X، محور Y، عرض و ارتفاع و رنگ است. انتخاب تک تک اعداد بر عهده خودتان است و به دلخواه میتوانید اعداد مورد نظر را جایگزین کنید. هر دو حالت مستطیل پر و مستطیل خالی برای OLED در کد قرار گرفته شده است و با فاصله ۲۰۰۰ میلی ثانیه تغییر شکل میدهد.

 

 


نمایش دایره در OLED


جهت نمایش دایره در ماژول OLED از کد آردوینو زیر استفاده کنید.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h> //کتابخانه
#include <Adafruit_SSD1306.h> // کتابخانه

Adafruit_SSD1306 display(-1); // ساخت یک آبجکت برای کتابخانه

void setup()   
{                
  // آدرس دهی I2c
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  

  //پاک کردن حافظه بافر
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Circle");
display.drawCircle(20, 21, 9, WHITE);
display.display();
delay(2000);

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Filled Circle");
display.fillCircle(20, 21, 9, WHITE);
display.display();
delay(2000);
  display.clearDisplay();

 
}

void loop() {}

همانطور که در کدها مشخص است، دستور زیر اضافه شده است.

display.drawCircle(20, 21, 9, WHITE);

display.fillCircle(20, 21, 9, WHITE);

که به ترتیب عددهای نوشته شده محور X، محور Y، عرض و رادیوس است. انتخاب تک تک اعداد بر عهده خودتان است و به دلخواه میتوانید اعداد مورد نظر را جایگزین کنید. هر دو حالت دایره پر و دایره خالی برای OLED در کد قرار گرفته شده است و با فاصله ۲۰۰۰ میلی ثانیه تغییر شکل میدهد.

 

 


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


نمایشگر OLED 

برد آردوینو

برد ویموس

برد Nodemcu

کابل فلت

 


جمع بندی لیدی پای


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

 

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

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

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

۹۲ دیدگاه

  • سلام ممنون جای این آموزش خالی بود
    من یه مشکل توی استفاده از این کتابخانه دارم که نتونستم حل کنم برای همین از کتابخانه های دیگری استفاده میکردم.
    متن ارور :
    error: Adafruit_I2CDevice.h: No such file or directory
    چگونه باید برطرفش کنم؟

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

    • سلام خسته نباشید
      Oled ای که من دارم
      ۶ تا پایه DC RES D1 D0 VCC GND
      داره
      بعد از اتصال به اردوینو به ترتیب به پین های GND 5V 10 11 12 13
      فراخوانی توی محیط IDE هیچ اتفاق خاصی خاصی نمیوفته و OLED همچنان خاموشه
      ممکنه خراب باشه؟
      در ضمن اینم بگم که پایه CS نداره

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

        • سلام وتشکر از زحمات و مطالب مفید کار بردی شما سوال داشتم که با تغییر کدام کد میشود جهت نمایش روی اولد را ۱۸۰ درجه تغییر داد با تشکر از شما

          • با سلام
            این مورد توسط بنده تست نشده است اما بایستی از فایل هگز i2cset -y 0 0x3C 0xA1 0xC8 به این صورت تغییرات را اعمال کنید.

    • من هم این مشکل رو داشتم، کتابخونه Adafruit_BusIO رو هم علاوه بر دو کتابخونه متن آموزش نصب کردم مشکل رفع شد

  • در طی این چند سالی که با oledکار میکنم تا به حال آموزش فارسی برای این مورد به این کاملی ندیدم
    خدا قوت

  • سلام و خسته نباشید
    آیا میشه برای شکل های دایره شرط نویسی کرد مثلا طی یک عملی دایره پر و خالی بشه

  • سلام و خسته نباشید با توجه به اینکه میگید پروتکل این برد ۲سی هست و باید به پایه هایی داخل جدول هست متصل بشه خب پس اگر بخواهیم از خانواده اردویینو استفاده کنیم مثلا اردویینو نانو پس نمیشه این برد را راه اندازی کرد چون پایه ورودی انالوگ ندارد (A)؟

  • سلام ببخشید من یه سوال داشتم خدمتتون در خصوص پروه یه برنامه ایی میخام بنویسم که بتونه دما رو کنترل کنه مثلا از مقدار مثبت ۲۳ بالا تر نرعه یا از منفی ۲۳ پایین تر نیاد و از برد نود msu استفاده کردم با سنسور lm35 ممنون میشم کمکم کنید چون برای پروژه ام نیاز فوری دارم از توضیحات جامع و کامل تون متشکرم

  • سلام خسته نباشید امیدوارم حالتون خوب باشه راستش خواستم بپرسم تو این مدلی که برای صفحه نمایش oled استفاده کردید میتونیم رد دستور :
    ;(display.setTextColor(WHITE
    میتونیم به جای رنگ سفید از رنگ های دیگه هم استفاده کنیم ؟؟؟

    • با سلام
      این مورد بسته به نوع ال ای دی مورد استفاده دارد. مثلا ال ای دی دو رنگ این امکان را فراهم می‌کند تا تغییر رنگ داشته باشید.

  • روز بخیر ممنون از آموزش خوبتون.

    این برنامه برای من درست کار نکرد و نمایشگر ۱۲۸*۶۴ را بصورت ۱۲۸*۳۲ شناسایی می کرد و موقع نمایش یک خط در میان خطوط مشکلی افقی مینداخت.
    این خط از آموزش را:
    Adafruit_SSD1306 display(-1); // ساخت یک آبجکت برای کتابخانه

    با خط زیر جایگزین کردم و مشکل رفع شد:

    Adafruit_SSD1306 display(128, 64, &Wire, -1);

    • با سلام
      کاربر گرامی در این خصوص بایستی طبق اطلاعات گفته شده در دیتاشیت تغییرات را لحاظ کنید.

  • در تعریف ابجکت عبارت داخل پرانتز به چه معناست؟
    حافظه بافر چرا باید خالی شود؟
    آدرس دهی i2c را توضیح دهید لطفا
    درمورد تنضیمات اشکال توضیح دهید

    • با سلام
      در این خط (Adafruit_SSD1306 display(-1 پایه ریست تعریف شده است -۱ = no reset pin
      آدرس دهی i2c به صورت پیش فرض در کتابخانه تعریف شده است و با نصب کتابخانه تمامی این موارد به شما نمایش داده می‌شود. با این حال میتوانید به صورت جداگانه آدرس i2c را دریافت کنید. منظور از پاک کردن حافظه بافر پاک شدن اطلاعات از روی OLED است که به صورت خودکار انجام می‌شود.
      تنظیمات اشکال در هر بخش در کدها مشخص شده است و از کتابخانه دریافت شده است.

  • سلام. من کتابخونه Adafruit_SSD1306 را از داخل خود اردوینو نصب کردم. ولی وقتی کامپایل می کنم خطا می ده. وقتی رفتم داخل کتابخونه رو برسی کردم دیدم این کتابخونه برای بردهای AVR طراحی شده در حالی که من از بردBlue pill استفاده می کنم. برای راه اندازی oled در محیط برد Blue Pill چه راهی وجود داره؟ با تشکر

    • با سلام
      در این خصوص این برد توسط بنده تست نشده است. پیام شما به کارشناس دیگری ارجاع داده می‌شود.

    • با سلام
      از قسمت library manager کتابخانه Adafruit_GFX ورژن ۱٫۷٫۲ را نصب کنید. با استفاده از این کتابخانه بایستی مدار به درستی عمل کند. لطفا این مورد را بررسی نمایید و نتجیه را از همین طریق اعلام فرمایید.

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

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

  • سلام. من برسی کردم دیدم این کتابخانه Adafruit_GFX اصلا مربوط به oled نمی شه و مربوط به tft هست. حالا باید چکار کرد؟ با تشکر

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

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

  • سلام خسته نباشید وقت بخیر. بنده این کد رو در اردوینو وارد کردم و موقع اپلود خطای مشکل کامپایل در اردوینو را به من میدهد. در صورتی که وقتی برنامه خالی یا برنامه دیگه اپلود میکنم به راحتی اپلود میشه و مشکل از برد نیست . حالا نمیدونم به چه علت میخوام این کد رو اپلود کنم این خظا رو میده ؟!!

      • خیلی مچکرم مشکل برطرف شد. به دلیل ورژن کتابخانه این مشکل پیش امده بود .
        سوالایی که برایم پیش امده , با توجه به اینکه کتابخانه هارا به روزرسانی میکنیم اما چرا باید همچنین باگ هایی داشته باشند, و کتابخانه ورژن پایین تر را نصب کنیم؟

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

  • سلام و عرض ادب. روش قرار دادن Vector (تصویر تک رنگ) روی این ماژول رو هم بفرمایید. با تشکر

  • سلام من می خوام فونت متن ام عددی بین ۱ و ۲ باشه. مثلا ۱٫۵ . چطوری می تونم این کار رو کنم؟

  • سلام برد من NodeMcu هست
    لینک دانلودی که قرار دادید کار نمیکنه و به فروشگاه منتقل میشه
    دقیقا مثل تصویر عمکردم و حتی ورژن قدیمی ۱٫۱۰ رو نصب کردم ولی بهم ارور میده
    که این لایبری هم در داخل لایبری Adafruit_GrayOLED.h فراخوانی شده
    من الان ۲ روزه انواع و اقسام لایبری ها رو دانلود کردم ولی کار نمیکنه

    • با سلام
      کدام لینک رو میفرمایید. کتابخانه ای تحت عنوان grayoled نیاز نداریم. تمامی کتابخانه های مورد نیاز در متن آموزش نوشته شده است.

    • با سلام
      اگر از این آموزش استفاده می‌کنید. کتابخانه های زیر را در library manager سرچ و نصب کنید.
      Adafruit SSD1306 by Adafruit
      Adafruit GFX Library by Adafruit
      البته در متن آموزش حتی تصاویر کتابخانه ها قرار گرفته شده است. آموزش را کامل مطالعه و سپس مرحله به مرحله پیش بروید.

      • سلام
        ممنون که پاسخ دادید
        من واقعا متوجه نمیشم
        دقیقا مثل تصویر بالا کنابخونه رو ادد کردم بهم include این رو پیدا نمیکنه
        Adafruit SSD1306 by Adafruit
        Adafruit GFX Library by Adafruit
        دقیقا کپی کردم دیدم همین ها نصب شده
        تو همین کتابخونه Adafruit GFX Library by Adafruit کتابخونه <Adafruit_I2CDevice.h اضافه شده
        و ازش استفاده شده
        بورد رو از NodeMcu به UNO تغییر دادم ولی بازم همین ارور رو داشت

        • لطفا کد را آپلود و در صورت مشاهده ارور دقیقا ارور را کپی و ارسال کنید تا بررسی شود.

    • با سلام
      کاربر گرامی روش راه اندازی نمایشگر OLED SPI با همین کتابخانه است و تفاوتی ندارد. دستورات زیر را جایگزین I2C کنید. حتما در آموزش آپدیت خواهد شد.
      /Comment out above, uncomment this block to use hardware SPI
      #define OLED_DC 8
      #define OLED_CS 10
      #define OLED_RESET 9
      Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
      &SPI, OLED_DC, OLED_RESET, OLED_CS);

  • با سلام و خسته نباشید
    میخواستم بدونم میشه دو ویا بیشتر از این نمایشگرها پشت سر هم با روش I2C استفاده کرد اگر جواب بله هست اون موقع ادرس نمایشگرها چطوری باید باشد تا بتونیم جداگانه اطلاعات را به نمایشگر وصل کنیم

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

  • سلام من یه سوال داشتم من ماژول oled sheld رو دارم میخواستم بدونم پایه کلاک و دیتاش کجاشت

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

    • با سلام
      سپاس از همراهی شما کاربر گرامی
      بله میتوانید از پایه های i2c برد آردوینو پرو مینی A4 , A5 استفاده کنید.

  • سلام خوبید
    خسته نباشید
    Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”

    Build options changed, rebuilding all
    In file included from C:\Users\BS\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_GrayOLED.cpp:20:0:

    C:\Users\BS\Documents\Arduino\libraries\Adafruit_GFX_Library\Adafruit_GrayOLED.h:30:32: fatal error: Adafruit_I2CDevice.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    اینو چیکار کنم؟؟؟؟؟

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

  • با سلام و خسته نباشید ،سوال داشتم اینکه اگه به تعداد ۸ تا oled داشته باشیم بخواهم پشت سرهم به اردینو وصل کنم البته کارکتری سایز کوچکش ، چطور آدرس دهی میشوند این ماژول ها که هر کدام اطلاعات خودشون دریافت کنند ممنون جواب بدین

      • با سلام خیلی ممنون از جوابتون ، ببخشید oled با آدرسهای مختلف بازار وجود دارد تو سایت شما نوشتید آدرس معمولا ۳c , 3D هستند و قابل تغییر نیستند ، اگه ممکن هست اسم این oled را با درایور شون که آدرس متفاوت دارن بگویید ، لازم دارم تعدادی از این oled را با آدرس متفاوت را به اردینو وصل کنم ، ممنون

          • با سلام . خسته نباشید در خصوص آدرس دهی متفاوت oled ssd1306 گفتین بازار وجود دارد بنده گشتم فروشگاه دیجی کالا چند تا هم از اونجا خرید کردم ولی پشت برد همون x3D .x3c نوشته چیزی جدید نوشته نشده بود آدرس متفاوت ایجاد کنه ، چچوری مثلا ده تا از این oled 128. 64 وصل کنم که آدرس متفاوت داشته باشه ، مننون

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

          • با سلام . خسته نباشید در خصوص آدرس دهی متفاوت oled ssd1306 گفتین بازار وجود دارد بنده گشتم فروشگاه دیجی کالا چند تا هم از اونجا خرید کردم ولی پشت برد همون x3D .x3c نوشته چیزی جدید نوشته نشده بود آدرس متفاوت ایجاد کنه ، چچوری مثلا ده تا از این oled 128. 64 وصل کنم که آدرس متفاوت داشته باشه ،

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

  • با سلام و خسته نباشید ، ببخشید اگه ۱۰ عدد از این oled کوچک را به ادرینو متصل شوند آدرس دهی آنها چگونه خواهد بود که هرکدام آدرس دهی شوند ، و دستای خودشان نمایش بدهند ، تو ال سی آدرس دهی تا ۸ ال سی دی ممکن بود آیا تو oled هم چنین امکان آدرس دهی وجود دارد بالاتر از ۸ عدد oled,ممنون

    • با سلام
      باید حتما از oled با آدرس i2c متفاوت استفاده کنید که در پشت برد آدرس دهی شده است. سپس توسط برنامه i2c scanner کد i2c را دریافت کرده و در کد برنامه در کلاس هر oled به صورت جداگانه برای هر oled تعریف می‌کنیم. یعنی ۸ کلاس باید آدرس I2C باید در کد برنامه تعریف شود و سپس فرمان میدهید که در هر کلاس چه پیغامی نمایش داده شود.

  • با سلام و خسته نباشید ممنون ازشما، ببخشید بنده میخواهم oled ssd1306را وصل کردم با ارتباط i2c به اردینو و کتابخانه Adafruti ssd1306 را نصب میکنم از کتابخانه اردینو نصب نمیکنه پیغام ارور میده که دایرکتوری وجود ندارد همچنین چیزی فکر کنم ، بعدم یکی دیگه نصب میکنم همش میگه wire .h دایرکتوری نیست دیگه خسته ام کرده از لینک دانلود میکنم باز پیغام wire .h را میده که دایرکتوری نیست اصلا دایرکتوری کجا هست چجچوری هست نصب کنم wire.h را که نصب بشه درست میشه لطفاً ممنون

    • با سلام
      کتابخانه های wire کتابخانه های داخلی آردوینو است و نیازی به نصب ندارد. بایستی پیغام ارور را ارسال کنید تا راهنمایی کنم.

      • با سلام و خسته نباشید ، با تشکر از شما ، سوال داشتم اینکه ، با ارتباط سریال spi میتوانم ۳۰ عدد oled ssd1306 همگی مشابه و آدرس یکسان دارند به اردینو متصل کنم و آدرس دهی بشوند و بعد برنامه کدنویسی آن چطور خواهد بود چیزی در این مورد نیست ، سوال دوم خواستم ۳۰عدد oled ssd1306 با ارتباطi2c با برد TCA9548a به اردینو وصل بکنم نیمه کاره ماند ، سخت افزاری مشکلی ندارم ، فقط کدنویسی چند TCA و چطور آدرس دهی میشوند ، ممنون و با تشکر از شما

  • سلام سوال کرده بود جوابی داده نشد سوال این بود که با چه کد ی می توان ۱۸۰ درجه جهت نمایش روی اولد را تغییر داد از زحماتتون ممنونم

    • با سلام
      این مورد توسط بنده تست نشده است اما بایستی از فایل هگز i2cset -y 0 0x3C 0xA1 0xC8 به این صورت تغییرات را اعمال کنید.

      • سلام ممنون از راهنمایی تون
        من مبتدی هستم اگر امکانش هست بیشتر راهنمایی بفرمایید
        در این کد یا کتابخانه ها چه تغییری باید داد که جهت نمایش روی اولد برعکس شود

        در این کد جهت نمایش وقتی درست است که پایه های اولد بسمت پایین است
        من میخواهم پایه های اولد به سمت بالا باشد با تشکر از زحمات شما

        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include “SSD1306Wire.h”
        #include “OLEDDisplayUi.h”
        #include “Wire.h”
        #include “OpenWeatherMapCurrent.h”
        #include “OpenWeatherMapForecast.h”
        #include “WeatherStationFonts.h”
        #include “WeatherStationImages.h”
        const char* WIFI_SSID = “ssid”;
        const char* WIFI_PWD = “pwd”;
        #define TZ -5
        #define DST_MN 60
        const int UPDATE_INTERVAL_SECS = 20 * 60;
        const int I2C_DISPLAY_ADDRESS = 0x3C;
        #if defined(ESP8266)
        const int SDA_PIN = D2;
        const int SDC_PIN = D3;
        #else
        const int SDA_PIN = 3;
        const int SDC_PIN = 4;
        #endif

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

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

    بیشتر از ۱۰ روز هست که سوال نن رو جواب ندادید

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

  • مهندس در مورد مگا ۲۵۶۰ فقط روی پایه های sda وscl جواب میده نه روی ۲۰و۲۱ کتابخانه ها کامل است من الان پروژه اسیلوسکوپ همکارتون هم زدم کار نکرد اگر شما خودتون روی مگا ۲۵۶۰ امتحان کردید راهنمایی کنید چون بنده با مثال‌های خود آردونیو ای دی زدم روی همون دو پایه sdaوscl جواب گرفتم و صفحه روشن شد

  • سلام و خسته نباشین تو کتاب خونه های جدید اگر Adafruit_SSD1306 display(-1); این کد باشه lcd کار نمی کنه

  • سلام
    وقت بخیر
    ببخشید می خواستم بدونم میشه از این نمایشگر و ماژول بلوتوث hc05 به طور همزمان استفاده کرد؟
    من از برد آردوینو uno استفاده کردم. بعد از راه اندازی سرعت دریافت اطلاعات از ماژول بلوتوث بشدت کم شد (تاخیر تا۱۰ ثانیه هم می رسید) و بعد از مدتی هم ماژول بلوتوث هیچ چیزی دریافت نکرد (اطلاعات ارسال میشه ولی دریافت نه) .
    حتی وقتی بلوتوث رو له تنهایی هم راه اندازی می کنم این مشکلش پابرجاست
    به نظرتون باید چکار کنم؟

    • با سلام
      عملکرد این دو با هم تداخلی نباید ایجاد کند. بهتر است سرعت بادریت برای انتقال دیتا را تغییر دهید.

      • سلام خسته نیاشید
        من تمام مراحل بالا به درستی انجام میدم اما زمان آپلود کد با این ارور مواجه میشم
        C:\Users\ASUS\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:42:10: fatal error: pgmspace.h: No such file or directory
        #include
        ^~~~~~~~~~~~
        compilation terminated.

        exit status 1

        Compilation error: exit status 1
        لطفا اگه میشه راهنمایی کنید
        خیلی ممنون

        • با سلام
          این ارور مرتبط با نصب کتابخانه است. دقت داشته باشید هر دو کتابخانه Adafruit SSD1306 و Adafruit GFX نصب شده باشد.
          بررسی و نتیجه را اعلام کنید.