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

سنستعرض مكونات الأجهزة اللازمة وتعليمات التوصيل وكود الأردوينو لتشغيل كل شيء. للحصول على دليل مرئي، تأكد من مشاهدة الفيديو المرافق لهذا الدرس (في الفيديو عند 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.
- ضع في الاعتبار تبديد الحرارة عند تزويد عدة وحدات بالطاقة.
تعليمات الأسلاك

لتوصيل شاشة 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()الدالة، حيث نقوم أيضًا بمسح الشاشة للتحضير للرسم.

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- عرض المخرجات
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#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;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 128 x 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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
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, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
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);
}
الأشياء التي قد تحتاجها
-
أمازوناشترِ OLED 128x32 من أمازونamzn.to
-
علي إكسبريساشترِ شاشة OLED SSD1306 بحجم 128x32 من علي إكسبريسs.click.aliexpress.com
الموارد والمراجع
-
خارجيمكتبة Adafruit-GFX (من GitHub)github.com
-
خارجيمكتبة SSD1306 (من GitHub)github.com
ملفات📁
لا توجد ملفات متاحة.