نمایشگر OLED ESP32؛ آموزش اتصال، راه اندازی و کدنویسی

نمایشگر OLED ESP32 یکی از محبوبترین انتخابها برای نمایش اطلاعات
در پروژههای الکترونیکی و سیستمهای مبتنی بر ESP32 است. اندازه کوچک، کیفیت تصویر
مناسب، کنتراست بالا و امکان استفاده از ارتباط I2C باعث شده نمایشگرهای OLED،
مخصوصاً مدلهای مبتنی بر SSD1306، در پروژههای آموزشی و حرفهای کاربرد زیادی داشته باشند.
اگر قصد دارید دما، رطوبت، ولتاژ، وضعیت سنسورها، منو، پیام، عدد یا حتی یک تصویر
ساده را روی ESP32 نمایش دهید، یک OLED میتواند راهکار بسیار مناسبی باشد.
در این مقاله نحوه اتصال OLED SSD1306 به ESP32، پایههای نمایشگر،
ارتباط I2C، نصب کتابخانه، کدنویسی، نمایش متن و شکل و همچنین مشکلات رایج هنگام
راهاندازی را بررسی میکنیم.
📌 نمایشگر OLED ESP32 در یک نگاه
OLED
SSD1306
128×64
0.96 اینچ
I2C
GPIO21
GPIO22
Adafruit SSD1306
نمایشگر OLED ESP32 چیست؟
OLED مخفف Organic Light-Emitting Diode است و برخلاف LCD
برای ایجاد تصویر به نور پسزمینه جداگانه نیاز ندارد. هر پیکسل در OLED میتواند
نور خودش را تولید کند؛ به همین دلیل این نمایشگرها معمولاً کنتراست بالا،
مشکی عمیق و ضخامت کمی دارند.
نمایشگرهای OLED در اندازهها و رزولوشنهای مختلف تولید میشوند. نمونههای
128×64 و 128×32 بسیار رایج هستند و بعضی مدلها از I2C و بعضی دیگر از SPI
استفاده میکنند. در این آموزش تمرکز اصلی روی مدل رایج 0.96 اینچ
128×64 با درایور SSD1306 و رابط I2C است.
💡 چرا OLED برای ESP32 محبوب است؟
اندازه کوچک، کنتراست مناسب، مصرف قابلتوجه کمتر در بعضی کاربردها نسبت
به نمایشگرهای دارای نور پسزمینه و رابطهای ارتباطی ساده مثل I2C،
OLED را برای پروژههای ESP32 بسیار کاربردی کرده است.
OLED SSD1306 چیست؟
SSD1306 یک کنترلر رایج برای نمایشگرهای OLED تکرنگ است. این تراشه مدیریت
اطلاعات تصویری و ارتباط با میکروکنترلر را بر عهده دارد. کتابخانه
Adafruit SSD1306 نیز برای سادهتر کردن کار با این کنترلر
در پروژههای Arduino استفاده میشود.
در مدلهای مبتنی بر SSD1306، برنامه معمولاً دادههای گرافیکی را در یک Buffer
آماده میکند و با اجرای display.display() آن اطلاعات به نمایشگر
ارسال میشود. این ساختار برای نمایش متن، شکل، خط، دایره و Bitmap بسیار کاربردی است.
رزولوشن OLED 128×64 و 128×32 چه تفاوتی دارد؟
یکی از اولین مواردی که هنگام خرید نمایشگر OLED باید بررسی کنید، رزولوشن آن است.
دو مدل 128×64 و 128×32 هر دو 128 پیکسل عرض دارند، اما مدل 128×64 دو برابر
ارتفاع بیشتری برای نمایش اطلاعات در اختیار شما قرار میدهد.
| ویژگی | 128×64 | 128×32 |
|---|---|---|
| عرض | 128 پیکسل | 128 پیکسل |
| ارتفاع | 64 پیکسل | 32 پیکسل |
| فضای نمایش | بیشتر | کمتر |
| مناسب برای | متن و گرافیک بیشتر | اطلاعات ساده |
پایه های نمایشگر OLED I2C
بیشتر ماژولهای OLED I2C چهار پایه اصلی دارند:
GND، VCC، SCL و SDA.
| پایه OLED | وظیفه |
|---|---|
| GND | زمین مدار |
| VCC | تغذیه |
| SCL | کلاک I2C |
| SDA | داده I2C |
⚠️ قبل از اتصال VCC مشخصات ماژول را بررسی کنید
ولتاژ قابلقبول برای OLED به مدل و برد ماژول بستگی دارد. بعضی ماژولها
برای 3.3V و 5V طراحی شدهاند، اما نباید این موضوع را برای همه نمایشگرهای
OLED یکسان فرض کرد. مشخصات همان ماژولی را که خریداری کردهاید بررسی کنید.
اتصال نمایشگر OLED ESP32 با I2C
در Generic ESP32، پینهای پیشفرض I2C در Arduino-ESP32 معمولاً
GPIO21 برای SDA و GPIO22 برای SCL هستند.
پینها در صورت نیاز قابل تغییر نیز هستند.
| OLED | ESP32 | وظیفه |
|---|---|---|
| VCC | 3.3V* | تغذیه |
| GND | GND | زمین |
| SCL | GPIO22 | کلاک I2C |
| SDA | GPIO21 | داده I2C |
* اتصال VCC به 3.3V برای نمونه این آموزش در نظر گرفته شده است. ولتاژ مجاز
ماژول خود را حتماً از مشخصات سازنده بررسی کنید.
🔌 اتصال سریع OLED به ESP32
OLED VCC → ESP32 3.3V
OLED GND → ESP32 GND
OLED SDA → ESP32 GPIO21
OLED SCL → ESP32 GPIO22
آدرس I2C نمایشگر OLED چیست؟
ارتباط I2C برای شناسایی دستگاهها از آدرس استفاده میکند. در بسیاری از
ماژولهای SSD1306 آدرس رایج 0x3C است، اما نباید تصور کرد
تمام ماژولهای OLED دقیقاً همین آدرس را دارند.
اگر کتابخانه نتواند نمایشگر را پیدا کند، یکی از اولین مواردی که باید بررسی
کنید آدرس I2C است. یک اسکنر ساده I2C میتواند دستگاههای روی باس را پیدا کند.
کد اسکن I2C برای پیدا کردن OLED
#include <Wire.h>
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
Serial.println("I2C Scanner");
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) {
Serial.print("I2C device found at 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
}
}
}
void loop() {
}
✅ اگر 0x3C پیدا شد
میتوانید همین آدرس را در برنامه OLED خود قرار دهید. اگر مقدار دیگری نمایش داده شد،
همان مقدار را مطابق کتابخانه مورد استفاده تنظیم کنید.
نصب کتابخانه OLED برای ESP32
برای کنترل ساده نمایشگرهای SSD1306 میتوانید از کتابخانههای
Adafruit SSD1306 و Adafruit GFX استفاده کنید.
Adafruit SSD1306 ارتباط سطح پایین با نمایشگر را مدیریت میکند و Adafruit GFX
قابلیتهای گرافیکی مانند متن، خط، دایره و شکلها را فراهم میکند. همچنین
نصب کتابخانههای موردنیاز از طریق Library Manager در Arduino IDE امکانپذیر است.
مراحل نصب کتابخانه
-
- Arduino IDE را باز کنید.
- Library Manager را باز کنید.
- عبارت Adafruit SSD1306 را جستوجو کنید.
- کتابخانه را نصب کنید.
- در صورت درخواست، وابستگیهای Adafruit GFX و Adafruit BusIO را نیز نصب کنید.
📦 کتابخانههای موردنیاز
Adafruit SSD1306 → کنترل نمایشگر
Adafruit GFX → امکانات گرافیکی
Adafruit BusIO → وابستگی کتابخانه
اولین برنامه برای نمایشگر OLED ESP32
بعد از اتصال سختافزار و نصب کتابخانهها، میتوانیم یک تست ساده انجام دهیم
تا مطمئن شویم OLED به درستی با ESP32 ارتباط برقرار میکند.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(
SCREEN_WIDTH,
SCREEN_HEIGHT,
&Wire,
OLED_RESET
);
void setup() {
Serial.begin(115200);
Wire.begin(21, 22);
if (!display.begin(
SSD1306_SWITCHCAPVCC,
SCREEN_ADDRESS)) {
Serial.println("OLED initialization failed");
while (true) {
delay(100);
}
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("RNGO");
display.setCursor(0, 18);
display.println("ESP32 + OLED");
display.setCursor(0, 36);
display.println("Hello World!");
display.display();
}
void loop() {
}
توضیح کد OLED ESP32
در ابتدای برنامه کتابخانههای Wire، Adafruit_GFX
و Adafruit_SSD1306 را اضافه کردیم. سپس اندازه نمایشگر را
128×64 تعریف کردیم.
مقدار SCREEN_ADDRESS در این مثال برابر 0x3C قرار داده شده است،
اما اگر اسکنر I2C آدرس دیگری را نشان داد، باید همان آدرس در برنامه استفاده شود.
تابع display.begin() برای راهاندازی نمایشگر استفاده شده است.
بعد از آن با clearDisplay() Buffer پاک شده، متن با توابع مربوط به
GFX آماده میشود و در نهایت display.display() اطلاعات Buffer را
روی OLED نشان میدهد.
چگونه متن را روی OLED نمایش دهیم؟
برای نمایش متن میتوان از توابع setTextSize()،
setTextColor()، setCursor() و
println() استفاده کرد.
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(10, 20);
display.println("RNGO");
display.display();
🎯 نکته مهم درباره مختصات
مختصات نمایشگر از گوشه بالا و سمت چپ شروع میشود. نقطه 0,0 گوشه بالای
سمت چپ است و با افزایش X به سمت راست و با افزایش Y به سمت پایین حرکت میکنیم.
نمایش عدد و داده سنسورها روی OLED
یکی از کاربردهای اصلی نمایشگر OLED ESP32 نمایش اطلاعات
دریافتشده از سنسورهاست. برای مثال میتوان مقدار دما یا رطوبت را روی نمایشگر
نشان داد.
float temperature = 25.6;
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Temperature:");
display.setTextSize(2);
display.setCursor(0, 20);
display.print(temperature);
display.println(" C");
display.display();
رسم شکل روی OLED؛ خط، مستطیل و دایره
کتابخانه Adafruit GFX علاوه بر نمایش متن، امکاناتی برای رسم عناصر گرافیکی
نیز در اختیار قرار میدهد؛ از جمله خط، مستطیل، مستطیل گوشهگرد، دایره
و مثلث.
display.clearDisplay();
display.drawRect(5, 5, 50, 30, SSD1306_WHITE);
display.drawCircle(90, 30, 15, SSD1306_WHITE);
display.drawLine(0, 63, 127, 0, SSD1306_WHITE);
display.display();
نمایش تصویر و Bitmap روی OLED
یکی از قابلیتهای جذاب OLEDهای گرافیکی، نمایش تصاویر ساده بهصورت Bitmap است.
برای این کار معمولاً تصویر به یک آرایه بایتی تبدیل میشود و سپس با تابع
drawBitmap() روی نمایشگر قرار میگیرد.
display.clearDisplay();
display.drawBitmap(
0,
0,
imageBitmap,
128,
64,
SSD1306_WHITE
);
display.display();
برای تولید آرایه Bitmap میتوان از ابزارهای تبدیل تصویر استفاده کرد.
تصویر باید متناسب با رزولوشن نمایشگر و روش رمزگذاری مورد استفاده آماده شود.
چرا OLED ESP32 تصویر نشان نمی دهد؟
یکی از رایجترین مشکلات هنگام راهاندازی نمایشگر این است که کد بدون خطا
کامپایل میشود اما صفحه چیزی نشان نمیدهد. در این شرایط بهتر است عیبیابی
را مرحلهبهمرحله انجام دهید.
1. آدرس I2C را بررسی کنید
اولین موردی که باید بررسی شود آدرس I2C است. 0x3C رایج است، اما ممکن است
نمایشگر شما آدرس دیگری داشته باشد.
2. SDA و SCL را جابهجا نکرده باشید
SDA برای داده و SCL برای کلاک است. در Generic ESP32، تنظیم پیشفرض
Arduino-ESP32 برابر GPIO21 برای SDA و GPIO22 برای SCL است.
3. تغذیه را بررسی کنید
VCC و GND را بررسی کنید و مطمئن شوید ولتاژ موردنیاز ماژول رعایت شده است.
4. رزولوشن برنامه را بررسی کنید
اگر OLED شما 128×32 است، نباید تنظیمات برنامه را بدون بررسی بهصورت
128×64 قرار دهید.
5. درایور نمایشگر را بررسی کنید
همه OLEDها از SSD1306 استفاده نمیکنند. قبل از نصب کتابخانه، کنترلر
واقعی نمایشگر را بررسی کنید.
🚨 مشکل «OLED روشن است ولی چیزی نمایش نمی دهد»
روشن شدن خود OLED به معنی برقراری ارتباط صحیح I2C نیست. اگر صفحه روشن
ولی خالی است، آدرس I2C، سیمهای SDA/SCL، کنترلر نمایشگر، رزولوشن و کد
initialization را بررسی کنید.
I2C در OLED ESP32 چگونه کار می کند؟
I2C یک رابط سریال دو سیمه است که از خطوط SDA و SCL استفاده میکند و امکان
اتصال چند دستگاه به یک باس را فراهم میکند؛ هر دستگاه باید آدرس مخصوص خود
را داشته باشد. مستندات رسمی Arduino-ESP32 نیز OLED را یکی از کاربردهای رایج
I2C معرفی کرده و تأکید میکند که خطوط SDA و SCL به Pull-up مناسب نیاز دارند.
همین ویژگی باعث میشود بتوانید در یک پروژه علاوه بر OLED، تجهیزات I2C دیگری
مانند سنسور، RTC یا EEPROM نیز به همان باس متصل کنید؛ البته باید آدرسها
و محدودیتهای الکتریکی باس را در نظر بگیرید.
تفاوت OLED I2C و OLED SPI چیست؟
| ویژگی | OLED I2C | OLED SPI |
|---|---|---|
| تعداد خطوط اصلی | 2 | بیشتر |
| سیمکشی | سادهتر | پیچیدهتر |
| اشتراک باس | بله | با مدیریت Chip Select |
| مناسب برای | پروژههای ساده و چنددستگاهی | کاربردهای سریعتر |
نمایشگر OLED برای چه پروژه های ESP32 مناسب است؟
OLED میتواند در پروژههایی استفاده شود که نیاز به نمایش اطلاعات در یک
صفحه کوچک دارند.
- نمایش دما و رطوبت
- نمایش ولتاژ و جریان
- نمایش وضعیت سنسورها
- منوی دستگاه
- نمایش IP Address
- پروژههای IoT
- دیتالاگرها
- پروژههای رباتیک
- کنترلرهای DIY
- نمایش وضعیت ارتباط Wi-Fi
🎯 یک کاربرد واقعی
مثلاً در یک پروژه سنجش دما، ESP32 میتواند دمای لحظهای را از سنسور دریافت
کند و بهجای نمایش آن در Serial Monitor، مقدار را مستقیماً روی OLED نشان دهد.
همین روش برای نمایش وضعیت Wi-Fi، IP، باتری و پارامترهای سیستم نیز کاربرد دارد.
برای پروژه نمایشگر OLED ESP32 چه قطعاتی لازم است؟
برای یک پروژه ساده معمولاً به برد ESP32، نمایشگر OLED، سیم اتصال و منبع تغذیه
مناسب نیاز دارید. بسته به پروژه ممکن است سنسور، مقاومت، بردبورد، کانکتور،
ماژولهای ارتباطی و سایر قطعات الکترونیکی نیز لازم باشد.
🛒 قطعات پروژه را از پژوهشگران تهیه کنید
برای ساخت پروژههای ESP32 میتوانید OLED، ESP32، سنسورها، ماژولها،
مقاومت، خازن، کانکتور و سایر قطعات الکترونیکی موردنیاز خود را از
فروشگاه پژوهشگران بررسی کنید.
مقالات بیشتر درباره ESP32 و نمایشگرها
مقالات بیشتر پژوهشگران
اگر به دنبال آموزشهای بیشتر درباره ESP32، آردوینو، نمایشگرها،
سنسورها، ماژولها و پروژههای الکترونیکی هستید، مجموعه مقالات
پژوهشگران را ببینید.
برای انتخاب نمایشگر یا طراحی پروژه مشاوره فنی می خواهید؟
برای انتخاب قطعه و طراحی پروژه نیاز به مشاوره دارید؟
اگر در انتخاب ESP32، OLED، سنسور، ماژول یا سایر قطعات پروژه خود
سوال دارید، قبل از خرید و طراحی مدار میتوانید برای
مشاوره فنی با مجموعه پژوهشگران در ارتباط باشید.
انتخاب درست نمایشگر و کنترلر در ابتدای پروژه میتواند از تغییرات
سختافزاری و هزینههای اضافی جلوگیری کند.
جمع بندی نمایشگر OLED ESP32
نمایشگر OLED ESP32 یک راهکار جمعوجور و کاربردی برای نمایش
اطلاعات در پروژههای مبتنی بر ESP32 است. مدلهای رایج SSD1306 با رابط I2C
تنها به خطوط SDA و SCL بههمراه تغذیه و زمین نیاز دارند و میتوانند متن،
اعداد، شکلها و تصاویر ساده را نمایش دهند.
برای راهاندازی، ابتدا باید نوع کنترلر، رزولوشن و رابط ارتباطی نمایشگر را
مشخص کنید. سپس اتصال I2C، آدرس نمایشگر و کتابخانه مناسب را بررسی کنید.
در Generic ESP32، GPIO21 و GPIO22 پینهای پیشفرض SDA و SCL هستند، اما
در Arduino-ESP32 امکان تغییر پینها نیز وجود دارد.
⚡ چک لیست راه اندازی OLED
✔ نوع کنترلر را بررسی کنید.
✔ رزولوشن نمایشگر را مشخص کنید.
✔ SDA و SCL را درست وصل کنید.
✔ آدرس I2C را پیدا کنید.
✔ کتابخانه مناسب را نصب کنید.
✔ قبل از اجرای پروژه اصلی، یک کد تست ساده اجرا کنید.
تجربه شما از کار با OLED چیست؟
اگر قبلاً با OLED، SSD1306 یا ESP32 کار کردهاید،
تجربه خود را با ما و سایر علاقهمندان به الکترونیک به اشتراک بگذارید.
اگر با مشکل پیدا نشدن I2C، آدرس 0x3C، نمایش ندادن تصویر،
انتخاب کتابخانه یا اتصال SDA و SCL مواجه شدهاید،
در بخش نظرات همین پایین برای ما بنویسید.
سوالات متداول درباره نمایشگر OLED ESP32
نمایشگر OLED را به کدام پایه های ESP32 وصل کنیم؟
در Generic ESP32، پین پیشفرض SDA برابر GPIO21 و پین SCL برابر GPIO22 است.
البته امکان تعیین پینهای دیگر با تنظیمات I2C نیز وجود دارد.
چرا OLED ESP32 چیزی نمایش نمی دهد؟
آدرس I2C، اتصال SDA و SCL، تغذیه، رزولوشن، کنترلر و کتابخانه را بررسی کنید.
روشن شدن OLED بهتنهایی به معنی برقرار بودن ارتباط صحیح با ESP32 نیست.
آدرس رایج OLED SSD1306 چیست؟
آدرس 0x3C در بسیاری از ماژولها رایج است، اما برای اطمینان بهتر است
آدرس واقعی نمایشگر را با I2C Scanner پیدا کنید.



