كود البحث

كود أردوينو وفيديو لشاشة SSD1306 OLED 128 x 32 مع I2C

كود أردوينو وفيديو لشاشة SSD1306 OLED 128 x 32 مع I2C

في هذا الدرس سنستعرض كيفية استخدام شاشة OLED طراز SSD1306 بمقاس 128 × 32 مع واجهة الاتصال I2C على لوحة أردوينو. الهدف هو عرض عناصر متنوعة مثل النصوص والمستطيلات والقيم الديناميكية مثل الجهد ودرجة الحرارة على الشاشة. هذا الإعداد مثالي للمشاريع التي تتطلب حلاً صغير الحجم وفعالًا لعرض البيانات.

SSD1306 OLED 128x32

سنستعرض مكونات الأجهزة اللازمة وتعليمات التوصيل وكود الأردوينو لتشغيل كل شيء. للحصول على دليل مرئي، تأكد من مشاهدة الفيديو المرافق لهذا الدرس (في الفيديو عند 00:00).

شرح الأجهزة

تشمل المكونات الرئيسية لهذا المشروع شاشة SSD1306 من نوع OLED، وهي شاشة منخفضة الطاقة تستخدم بروتوكول I2C لتسهيل الربط. تتميز الشاشة بدقة 128 × 32 بكسل، مما يجعلها مناسبة لعرض النصوص والالرسومات البسيطة.

للتحكم في الشاشة سنستخدم لوحة أردوينو، التي سترسل الأوامر والبيانات عبر I2C. يتولى الأردوينو منطق عرض المعلومات باستخدام مكتبات مثلAdafruit_GFXوAdafruit_SSD1306. تُبَسِّط هذه المكتبات عملية الاتصال وتسمح برسم الأشكال والنصوص بسهولة

تفاصيل ورقة البيانات

المصنّعأدافروت
رقم القطعةSSD1306
جهد المنطق/المدخلات والمخرجات3.3 - 5 فولت
جهد التغذية3.3 - 5 فولت
استهلاك التيار الكهربائي~20 mA (نموذجي)
دقة العرض128 × 32 بكسل
واجهةآي2سي
الأبعاد128 × 32 مم
ملاحظات / تنويعاتمتوفر بأحجام وواجهات متنوعة
  • تحقق من عنوان I2C، عادةً 0x3C لشاشات OLED.
  • تأكد من توفير مصدر طاقة مناسب لتجنب الضرر.
  • استخدم مقاومات سحب للأعلى لخطّي SDA وSCL إذا لزم الأمر.
  • اجعل التوصيلات قصيرة لتقليل التشويش في إشارة I2C.
  • ضع في الاعتبار تبديد الحرارة عند تزويد عدة وحدات بالطاقة.

تعليمات الأسلاك

Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32

لتوصيل شاشة OLED طراز SSD1306، قم أولاً بتوصيل دبوس VCC في الشاشة بمخرج 5V في الأردوينو. بعد ذلك، وصل دبوس GND بأحد دبابيس الأرضي في الأردوينو. لواجهة I2C، وصل دبوس SDA في الشاشة بدبوس SDA في الأردوينو، والذي يكون A4 في لوحة UNO. ثم وصل دبوس SCL في الشاشة بدبوس SCL في الأردوينو، والذي يكون A5 في لوحة UNO. إذا كنت تستخدم طراز أردوينو مختلفاً، راجع تخصيص الدبابيس الخاص بالطراز لمعرفة مواقع SDA وSCL.

للمكونات الإضافية، إذا كان لديك صمام ضوئي (LED) ترغب في التحكم به، فوصّله بالدبوس 9 عبر مقاوم قيمته 330 أوم. تأكد من توصيل الطرف الآخر للمقاوم بالأنود للصمام، بينما يجب توصيل الكاثود بالأرضي. سيسمح هذا التوصيل بإضاءة الصمام عندما يُفعّل الدبوس 9.

أمثلة على الكود وشرح خطوة بخطوة

في كود الأردوينو، نبدأ بتضمين المكتبات اللازمة لشاشة OLED. أحد المعرّفات الرئيسية هوdisplay، وهو مثال على الـAdafruit_SSD1306الفئة. يتم تهيئة العرض في الـsetup()الدالة، حيث نقوم أيضًا بمسح الشاشة للتحضير للرسم.

SSD1306 OLED 128x32
void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay(); 
}

في الـloop()في الدالة نُعرّف متغيرًا نصيًاvStringللاحتفاظ بقيمة الجهد، التي يتم تحديثها ديناميكيًا. الـrobojaxText()تُستخدم الدالة لعرض نص على الشاشة عند إحداثيات محددة.

void loop() {
  String vString = String(count, 3);
  display.clearDisplay();
  robojaxText("Voltage:          ", 4, 3, 1, false);
  robojaxText(vString, 72, 3, 1, false);
  display.display();
  count += 0.173;
  delay(2000); 
}

الrobojaxText()الدالة ضرورية لتحديد موضع النص وعرضه. تأخذ معلمات لسلسلة النص، وإحداثيات x و y، وحجم النص، وقيمة منطقية لتحديد ما إذا كان يجب تحديث العرض على الفور.

void robojaxText(String text, int x, int y, int size, boolean d) {
  display.setTextSize(size);
  display.setTextColor(WHITE);
  display.setCursor(x, y);
  display.println(text);
  if(d) {
    display.display();
  }
}

تقوم هذه الدالة بتعيين حجم النص ولونه وموضع المؤشر قبل طباعة النص. تذكّر مشاهدة الفيديو للحصول على شرح كامل للكود (في الفيديو عند 10:00).

عرض توضيحي / ما الذي تتوقعه

عند رفع الكود إلى الأردوينو، يجب أن تعرض شاشة OLED قيم الجهد ودرجة الحرارة والسعة وتُحدَّث ديناميكيًا كل ثانيتين. يجب أيضًا أن ترى مستطيلًا مرسومًا حول عناصر النص. إذا لم تُظهر الشاشة أي شيء، فتأكد من أن الوصلات صحيحة وأن عنوان I2C يطابق العنوان المحدد في الكود.

طوابع زمنية للفيديو

  • 00:00- مقدمة عن المشروع
  • 02:00- تعليمات الأسلاك
  • 05:00- شرح الكود
  • 10:00- عرض المخرجات

الصور

SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
83-Arduino code and video for SSD1306 OLED 128 x 32 display with I2C
اللغة: C++
/*
 * هذا مثال لشاشات OLED أحادية اللون لدينا المعتمدة على وحدات تحكم SSD1306.
 * 
 * هذا المثال مخصص لشاشة بحجم 128x32 باستخدام I2C.
 * 
 * إذا واجهت الخطأ: Adafruit_GFX.h غير موجود، قم بتحميل مكتبة Adafruit-GFX
 * https://github.com/adafruit/Adafruit-GFX-Library
 * 
 * قم بشراء هذه الوحدة OLED من أمازون: https://amzn.to/36zFvTb
 * 
 * كتبها ليمور فريد/ليديادا لشركة Adafruit Industries.
 * رخصة BSD، تحقق من license.txt لمزيد من المعلومات.
 * يجب تضمين جميع النصوص أعلاه وشاشة البداية في أي إعادة توزيع.
 * 
 * شاهد الفيديو الخاص بهذا الرمز لتتعلمه بالكامل.
 * شاهد الفيديو هنا: https://youtu.be/RjyulqVsz2o
 * هذا الرمز مقدم "كما هو" دون أي ضمان.
 * تم تحديثه بواسطة أحمد شمشيري لدورة فيديو Robojax.com
 * بتاريخ 18 مارس 2018 في الساعة 10:21 في أجاكس، أونتاريو، كندا.
 * يرجى عرض أكواد وفيديوهات أخرى من Robojax على http://robojax.com/learn/arduino
 * إذا كنت تشارك هذا الرمز، يجب عليك الاحتفاظ بهذه الملاحظة المتعلقة بحقوق الطبع والنشر.
 */
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;

/*
 * اتصال الدبوس:
 * راجع الاتصال بالدبوس: https://www.arduino.cc/en/Reference/Wire
 * لـ UNO: SDA إلى A4، SCL إلى A5
 * لـ Mega2560: SDA إلى 20، SCL إلى 21
 * لـ Leonardo: SDA إلى 2، SCL إلى 3
 * لـ Due: SDA إلى 20، SCL إلى 21
 * VCC إلى 5V
 * GND إلى GND :-)
 */


 // هذه هي عرض وارتفاع الشاشة والتي هي 128 × 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH  128


#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

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

 // بشكل افتراضي، سنقوم بتوليد الجهد العالي من خط 3.3 فولت داخليًا! (رائع!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // ابدأ بالعنوان I2C 0x3C (لـ 128x32)
  display.display();
  delay(2000);
 // امسح الذاكرة المؤقتة.
  display.clearDisplay();
}


void loop() {
  String vString =  String(count, 3); // استخدام رقم عشري و الـ
  display.clearDisplay();
  robojaxText("Voltage:          ", 4, 3, 1, false);
  robojaxText(vString, 72, 3, 1, false);
  robojaxText("V", 110, 3, 1, false);
  robojaxText("Temperature: 32C", 4, 11, 1, false);
  robojaxText("Capacity:   92.86L", 4, 21, 1, false);
 // display.drawLine(1, 37, 100, 37, الأبيض);
 display.drawRect(1, 1, 126,31, WHITE);
 // display.drawCircle(63,31, 31, الأبيض);
 // display.startscrollright(0x00, 0x0F);
  display.display();
  count +=0.173;
   delay(2000);
}


/*
 * روبو جافا نص (نص سلسلة، عدد صحيح x، عدد صحيح y، عدد صحيح حجم، صحيح أو خطأ d) النص هو سلسلة النص المراد طباعتها x هو الموقع x العددي للنص y هو الموقع y العددي للنص الحجم هو حجم النص، 1، 2، 3 إلخ d هو إما صحيح أو خطأ. إذا كانت صحيحة، يتم تحديث العرض.
 */
void robojaxText(String text, int x, int y,int size, boolean d) {

  display.setTextSize(size);
  display.setTextColor(WHITE);
  display.setCursor(x,y);
  display.println(text);
  if(d){
    display.display();
  }

 // delay(100);
}

الأشياء التي قد تحتاجها

الموارد والمراجع

ملفات📁

ورقة البيانات (pdf)

  • SSD1306 display datasheet
    SSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
    SSD1306_display_datasheet.pdf 1.79 MB

Fritzing File

  • SSD1306 128x32 OLED Wiring
    Fritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
    SSD1306_128x32_wiring.fzz

Wiring diagram

  • SSD1306 128x32 OLED Wiring
    Fritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
    SSD1306_128x32_wiring.fzz