راه اندازی نمایشگر OLED با ESP32: آموزش کامل SSD1306 و I2C

امروزه راه اندازی نمایشگر OLED با ESP32 یکی از مهمترین گامها برای ارتقای پروژههای اینترنت اشیا (IoT) و سیستمهای نهفته است. نمایشگرهای OLED به دلیل مصرف انرژی بسیار پایین، زاویه دید گسترده و کنتراست بالای تصویر، گزینهای بینظیر برای نمایش دادههای سنسورها، وضعیت اتصال به شبکه Wi-Fi و هشدارهای سیستم محسوب میشوند.
در این مقاله قصد داریم بهصورت کاملاً کاربردی و گامبهگام نحوه اتصال، سیمکشی I2C و کدنویسی نمایشگرهای معروف SSD1306 (سایز ۰.۹۶ اینچ ۶۴×۱۲۸ پیکسل) را به برد پرقدرت ESP32 آموزش دهیم.
۱. آشنایی با نمایشگر OLED مدل SSD1306
نمایشگرهای OLED برخلاف LCDها نیازی به نور پسزمینه (Backlight) ندارند؛ زیرا هر پیکسل بهصورت جداگانه نور تولید میکند. این ویژگی باعث ارائه رنگ مشکی بسیار عمیق و کاهش چشمگیر مصرف جریان میشود. چیپ درایور SSD1306 متداولترین تراشه برای کنترل این صفحات است.
- رزولوشن استاندارد: ۱۲۸ در ۶۴ پیکسل (یا ۱۲۸ در ۳۲ پیکسل)
- پروتکل ارتباطی: I2C (تنها به ۲ پایه دیتای SCL و SDA نیاز دارد)
- ولتاژکاری: ۳.۳ ولت (کاملاً سازگار با سطح منطقی برد ESP32)
- آدرس I2C پیشفرض: معمولاً
0x3Cیا0x3D
۲. اتصالات و سیمکشی I2C در راه اندازی نمایشگر OLED با ESP32
برای اتصال فیزیکی ماژول به ESP32 از پایههای سختافزاری I2C استفاده میکنیم. در اکثر بردهای ESP32، پایه GPIO 21 نقش SDA و پایه GPIO 22 نقش SCL را ایفا میکند.

⚡ تهیه بردهای ESP32 و نمایشگرهای OLED اورجینال
انواع قطعات الکترونیکی و ماژولهای اینترنت اشیا را با ضمانت کیفیت از فروشگاه ما تهیه کنید.
📚 مطالب آموزشی مرتبط را از دست ندهید!
اگر میخواهید دانش فنی خود را در زمینه الکترونیک افزایش دهید، مجموعه مقالات تخصصی پژوهشگران شامل آموزشها، مقایسه قطعات و راهنمای انتخاب تجهیزات را مطالعه کنید.
۳. نصب کتابخانههای لازم در آردوینو IDE
جهت برنامهنویسی آسان در نرمافزار Arduino IDE، باید دو کتابخانه رسمی آدافروت را نصب کنید:
- وارد مسیر Sketch > Include Library > Manage Libraries شوید.
- عبارت Adafruit SSD1306 را جستجو و نصب کنید.
- عبارت Adafruit GFX Library را نیز جستجو کرده و آخرین نسخه آن را نصب کنید.
کد نمونه آردوینو: راه اندازی نمایشگر OLED با ESP32 و چاپ متن
کد زیر بهصورت خلاصه نحوه پیکربندی، پاکسازی صفحه و چاپ یک متن اختصاصی را روی نمایشگر OLED نشان میدهد:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // عرض نمایشگر بر حسب پیکسل
#define SCREEN_HEIGHT 64 // ارتفاع نمایشگر بر حسب پیکسل
// ایجاد شیء نمایشگر I2C بدون پایه Reset
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
// راه اندازی نمایشگر با آدرس I2C پیشفرض 0x3C
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("خطا: نمایشگر SSD1306 یافت نشد!"));
for(;;);
}
delay(2000);
display.clearDisplay(); // پاکسازی صفحه
display.setTextSize(1); // اندازه فونت
display.setTextColor(SSD1306_WHITE); // رنگ متن
display.setCursor(0, 10); // موقعیت نشانگر (X, Y)
display.println(F("Mecamadar IoT Project"));
display.println(F("ESP32 + OLED SSD1306"));
display.display(); // اعمال تغییرات روی صفحه نمایش
}
void loop() {
// کدهای مربوط به بروزرسانی مقادیر سنسور در این بخش قرار میگیرند
}
💡 نکته عیبیابی:
اگر پس از پروگرم کردن برد صفحه نمایش روشن نشد، ابتدا از طریق کد I2C Scanner آدرس دقیق ماژول خود را بررسی کنید. برخی ماژولها بهجای آدرس0x3Cاز آدرس0x3Dاستفاده میکنند.
❓ سوالات متداول درباره راه اندازی OLED با ESP32
چگونه میتوان آدرس I2C نمایشگر OLED را تغییر داد؟
پشت اغلب ماژولهای SSD1306 یک مقاومت SMD کوچک قرار دارد که با لحیمکاری مجدد آن روی پد مجاور، آدرس از 0x3C به 0x3D تغییر میکند.
آیا میتوان از پایههای دیگری غیر از GPIO 21 و 22 برای I2C استفاده کرد؟
بله، با استفاده از دستور Wire.begin(SDA_PIN, SCL_PIN) در تابع setup میتوانید پایههای دلخواه خود را به عنوان I2C نرمافزاری/تعریفشده معرفی کنید.
سوال یا مشکلی در راه اندازی نمایشگر OLED دارید؟
اگر هنگام اجرای کد یا سیمکشی نمایشگر با خطایی مواجه شدهاید، سوال خود را در بخش نظرات ارسال کنید تا پاسختان را دریافت کنید.





