🖥️ راهاندازی نمایشگر OLED SSD1306 با آردوینو و کتابخانهی Adafruit
نمایشگر OLED SSD1306 یکی از محبوبترین صفحههای کوچک دنیای آردوینو است: ارزان، خیلی واضح، کممصرف و فقط با چهار سیم وصل میشود. در این آموزش یاد میگیری روی آن متن بنویسی، شکل بکشی و یک عدد زنده نشان بدهی. اگر در wokwi یا هر شبیه ساز آردوینو دیگری دنبال یک مثال کامل فارسی برای OLED میگشتی، اینجا جای درستی است.
چه چیزی میسازیم؟
یک صفحهی خوشآمد: کلمهی «Salam!» با حروف درشت، یک خط توضیح، یک مستطیل و یک دایرهی توپر، و پایین صفحه یک شمارنده که ثانیههای گذشته از روشن شدن آردوینو را نشان میدهد.
قطعهها
- آردوینو Uno
- نمایشگر OLED SSD1306، ۰٫۹۶ اینچ، ۱۲۸×۶۴، چهارپایهی I2C
- چهار سیم جامپر
سیمکشی
| پایهی OLED | پایهی آردوینو Uno |
|---|---|
| GND | GND |
| VCC | 5V (بیشتر ماژولها رگولاتور دارند؛ 3.3V هم کار میکند) |
| SCL | A5 |
| SDA | A4 |
روی آردوینو Uno، پایههای I2C همیشه A4 (داده) و A5 (ساعت) هستند. روی مگا این دو پایه 20 و 21اند.
کد کامل
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found!");
while (true) {}
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Salam!");
display.setTextSize(1);
display.println("Wokwi.ir + Arduino");
display.drawRect(0, 44, 60, 20, SSD1306_WHITE);
display.fillCircle(100, 54, 9, SSD1306_WHITE);
display.display();
}
void loop() {
unsigned long sec = millis() / 1000;
display.fillRect(0, 28, 128, 10, SSD1306_BLACK); // پاک کردن فقط همین خط
display.setCursor(0, 28);
display.print("Time: ");
display.print(sec);
display.print(" s");
display.display();
delay(200);
}
خطهای مهم
- سه کتابخانه:
Wireبرای ارتباط I2C،Adafruit_GFXبرای متن و شکل (خط، دایره، مستطیل) وAdafruit_SSD1306که با خود چیپ نمایشگر حرف میزند. در Arduino IDE هر دو کتابخانهی Adafruit را از Library Manager نصب کن. Adafruit_SSD1306 display(128, 64, &Wire, -1): عدد-1یعنی ماژول ما پایهی ریست جدا ندارد.display.begin(SSD1306_SWITCHCAPVCC, 0x3C): نمایشگر را روشن میکند.0x3Cآدرس I2C بیشتر ماژولهای ۱۲۸×۶۴ است. اگرbeginشکست بخورد، برنامه پیام میدهد و میایستد.setTextSize(2): اندازهی ۱ یعنی هر حرف ۶×۸ پیکسل؛ اندازهی ۲ دو برابر.drawRectمستطیل توخالی وfillCircleدایرهی توپر میکشد. شمارهگذاری از گوشهی بالا-چپ است: x به راست، y به پایین.display.display(): مهمترین خط! همهی دستورهای قبلی فقط در حافظه نقاشی میکنند و این خط آن نقاشی را به صفحه میفرستد.- در
loopبه جای پاک کردن کل صفحه، فقط نوار شمارنده را با یک مستطیل سیاه پاک میکنیم تا بقیهی تصویر بماند و صفحه چشمک نزند.
اجرا در شبیهساز
در تینکرکد فارسی مثال آمادهی OLED: متن و شکل را باز کن. وقتی این را یاد گرفتی، سراغ نمودار زنده روی OLED برو. درس کاملش هم درس ۷۱: نمایشگر OLED است. OLED جزو ماژولهای حرفهای اشتراک پلاس است؛ مثال برای خواندن رایگان باز میشود و برای اجرا پلاس لازم داری. اگر کتابخانهی دیگری لازم داری، در زبانهی «کتابخانهها» میتوانی فایل zip یا .h/.cpp خودت را برای اجرای واقعی بارگذاری کنی. دربارهی کتابخانهها در صفحهی کتابخانههای شبیهساز بیشتر خواندهای.
اشکالهای رایج
- پیام OLED not found: SDA و SCL را جابهجا وصل کردهای، یا آدرس ماژولت 0x3D است. آدرس را عوض کن و دوباره امتحان کن.
- صفحه کاملاً سیاه است ولی خطایی نیست:
display.display()را فراموش کردهای. - متنها روی هم افتادهاند: قبل از نوشتن دوباره، همان قسمت را پاک کن (
fillRectسیاه یاclearDisplay). - نوشتهی فارسی خراب نشان داده میشود: فونت پیشفرض فقط حروف لاتین دارد. فینگلیش بنویس یا از تصویر بیتمپ استفاده کن.
- خطای fatal error: Adafruit_GFX.h: کتابخانهی GFX نصب نشده؛ SSD1306 بدون آن کار نمیکند.
همین نمایشگر را با میکروپایتون روی پیکو هم راه انداختهایم: OLED و نئوپیکسل روی پیکو. برای پروژههای بیشتر به صفحهی شبیهساز آردوینو سر بزن.
مثال OLED را در شبیهساز باز کن 🖥️