(ویژه بردهای ESP32، ESP8266 و Raspberry Pi Pico – همراه کد، شماتیک و توضیحات عملی)
در پروژههای اینترنت اشیا، نمایش اطلاعات به شکل ساده، کممصرف و قابل فهم برای کاربر یکی از مهمترین نیازهاست. نمایشگرهای OLED با مصرف بسیار پایین، وضوح بالا و ساختار فیزیکی کوچک، انتخابی فوقالعاده برای ساخت پروژههای هوشمند هستند. استفاده از MicroPython در کنار بردهای محبوبی مانند ESP32، ESP8266 یا Raspberry Pi Pico هم راهی ساده و سریع برای کنترل این سختافزارها به شمار میرود.
در این آموزش، قصد داریم مسیر کامل راهاندازی یک نمایشگر OLED با رابط SPI را در MicroPython طی کنیم؛ از معرفی سختافزار گرفته تا سیمکشی، نصب کتابخانه، نوشتن کد و اجرای پروژه عملی.
پروتکل SPI چیست؟ مزایا، معایب و کاربرد آن در نمایشگرها
SPI مخفف Serial Peripheral Interface یک پروتکل ارتباطی سریال و همزمان است که ارتباط بین میکروکنترلر (مثل ESP32) و تجهیزات جانبی (مثل نمایشگر OLED) را ممکن میسازد. در SPI اطلاعات از طریق چهار یا چند پین منتقل میشود. این پروتکل برخلاف I2C ارتباط دو طرفه (Full Duplex) دارد و میتواند دادهها را با سرعت قابل توجهی منتقل کند.
در اتصال OLED، SPI به ما امکان میدهد با تاخیر بسیار کمتر، دادهها را به نمایشگر منتقل کنیم. مهمترین مزیت این پروتکل، سرعت بالای آن نسبت به I2C است، ولی در مقابل، نیاز به سیمبندی بیشتری دارد.
در پروژههایی که فرکانس بهروزرسانی نمایشگر یا حجم دیتا زیاد است، استفاده از SPI به شدت توصیه میشود؛ خصوصاً برای نمایشگرهایی با رزولوشن ۱۲۸ در ۶۴ که اطلاعات زیادی باید در آنها نمایش داده شود.
معرفی نمایشگر OLED و چیپهای کنترلر محبوب
نمایشگر OLED یک صفحهنمایش مبتنی بر دیودهای نورانی آلی است که برخلاف LCDهای سنتی، به نور پسزمینه نیازی ندارد. این موضوع باعث کاهش مصرف انرژی و کنتراست فوقالعاده بالا میشود. این نمایشگرها معمولاً در ابعاد کوچکی مانند 0.96 اینچ تولید میشوند و دارای رزولوشن 128×64 یا 128×32 هستند.
در پروژههای آموزشی و DIY، بیش از هر چیز از OLEDهایی با درایور SSD1306 استفاده میشود. این چیپ، قابلیت پشتیبانی از پروتکلهای I2C و SPI را فراهم کرده و در اکثر کتابخانههای MicroPython کاملاً پشتیبانی میشود. با استفاده از آن میتوانید هم متن نمایش دهید، هم نمودار، آیکون و حتی تصاویر bitmap ساده را رسم کنید.
درایورهای مشابه مانند SH1106 نیز وجود دارند اما برای سادگی کار، ما در این آموزش، تمرکز را بر روی SSD1306 میگذاریم.
بیشتر بدانید: راهنمای واردات قطعات الکترونیکی از چین در سال ۲۰۲۵
انتخاب برد مناسب و توضیح مزایای هرکدام
MicroPython به راحتی روی بردهایی مثل ESP32، ESP8266 و Raspberry Pi Pico اجرا میشود و همگی با نمایشگرهای SSD1306 سازگار هستند. اگر به دنبال اجرای همزمان پردازشهای بیشتر یا استفاده از بلوتوث و وایفای در کنار نمایشگر هستید، ESP32 گزینهی قویتری است. در صورت صرفهجویی در مصرف و هزینه، ESP8266 انتخاب خوبی است. برای آموزش و یادگیری اصول میکروکنترلر با زبان MicroPython، پیکوی رزبری پای با قدرت و قیمت مناسب، قابل توجه است.
طراحی سختافزاری: اتصال نمایشگر به برد
در این بخش به نحوه اتصال فیزیکی بین نمایشگر و برد میپردازیم. ماژول OLED دارای چند پایه است که باید آنها را به GPIOهای مناسب روی برد متصل کنید. نحوه دقیق سیمکشی معمولاً در دیتاشیت ماژول مشخص شده اما برای سهولت، جدول زیر مرجع مناسبی است.
جدول اتصال پینهای نمایشگر به برد ESP32
| پایهی OLED | کارکرد | اتصال پیشنهادی در ESP32 |
| VCC | تغذیه ۳.۳ یا ۵ ولت | 3V3 یا VIN (طبق ماژول) |
| GND | زمین | GND |
| SCK (CLK) | کلاک SPI | GPIO18 |
| MOSI (DIN) | داده خروجی | GPIO23 |
| DC | دیتای فرمان یا داده | GPIO16 |
| CS | انتخاب چیپ | GPIO5 |
| RES | ریست سختافزاری | GPIO17 |
در صورتی که از ESP8266 یا Raspberry Pi Pico استفاده میکنید، همین پینها را باید با معادل GPIOهای آن برد تطبیق دهید.
هنگام اتصال، حتماً از سیمهای استاندارد و اتصال کوتاه با طول مناسب استفاده کنید. همچنین بهتر است از مقاومت پولداون برای برخی از این پینها در پروژههای صنعتی بهره بگیرید.
آمادهسازی محیط MicroPython
برای کدنویسی، شما به یک محیط توسعه ساده مانند Thonny یا uPyCraft نیاز دارید. ابتدا فریمور MicroPython را روی برد فلش میکنید، سپس از طریق رابط USB و ابزارهای توسعه، کدها را روی برد اجرا خواهید کرد.
در Thonny میتوانید بهراحتی فایلهای کتابخانه را آپلود کرده و اسکریپتهای خود را اجرا و تست نمایید. مهمترین کتابخانه مورد نیاز برای این آموزش، فایل ssd1306.py است که باید از منابع رسمی یا گیتهاب انتخاب شده و روی برد بارگذاری شود.
کدنویسی: نحوه اتصال و ارسال داده به نمایشگر OLED
پس از اتصال فیزیکی، نوبت به برنامهنویسی و تست اولیه میرسد. در زیر نمونهای از کد ساده برای نمایش متن روی OLED را مشاهده میکنید:
Python
from machine import Pin, SPI
import ssd1306
spi = SPI(1, baudrate=10000000, polarity=0, phase=0)
dc = Pin(16)
res = Pin(17)
cs = Pin(5)
oled = ssd1306.SSD1306_SPI(128, 64, spi, dc, res, cs)
oled.fill(0)
oled.text(‘سلام دنیا!’, 0, 0)
oled.show()
در کد بالا ابتدا یک ارتباط SPI بین برد و نمایشگر تعریف شده، سپس متن سادهای روی آن نمایش داده میشود.
کار با FrameBuffer و توابع گرافیکی
نمایشگرهای OLED تحت کتابخانه SSD1306 از FrameBuffer برای ذخیره سازی داده گرافیکی استفاده میکنند. این یک حافظه میانیست که تمام پیکسلها قبل از ارسال به نمایشگر در آن بهروزرسانی میشوند. توابعی مانند fill()، pixel()، line()، rect() و show() برای رسم و نمایش محتوا روی صفحه طراحی شدهاند.
تمام تغییرات تا زمانی که دستور show() اجرا نشود، بر روی صفحه ظاهر نمیشوند. این سیستم با کاهش flicker و نویز در نمایشگر، تجربه خواناتر و روانتری ارائه میدهد.
- fill(0) → خالیکردن صفحه
- pixel(x, y, color) → تنظیم پیکسل خاص
- line(x1, y1, x2, y2, color) → رسم خط (با کتابخانههای پیشرفته)
- show() → بروزرسانی صفحه
پروژه عملی: نمایش داده سنسور روی OLED
برای آزمایش عملی، میتوان دماسنجی با سنسور DHT11 یا DHT22 ایجاد کرد که نتایج را روی نمایشگر نشان میدهد. اگر سنسور را به پین GPIO4 (برای ESP32) متصل کنید، با اجرای حلقهای ساده و بهروزرسانی متن روی صفحه OLED، یک سیستم نمایش دما و رطوبت خواهید داشت.
کد شما شامل خواندن دما، رفرش کردن صفحه و نمایش داده جدید خواهد بود.
Python
import dht
from machine import Pin
import ssd1306
sensor = dht.DHT11(Pin(4))
while True:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
oled.fill(0)
oled.text(‘Temp: {}’.format(temp), 0, 0)
oled.text(‘Humi: {}’.format(hum), 0, 10)
oled.show()
time.sleep(2)
اشکالزدایی و خطاهای رایج
بعضی از خطاهایی که ممکن است در حین اجرا با آنها مواجه شوید، شامل روشن نشدن صفحه، عدم شناسایی کتابخانه، نمایش بهمریخته یا تاخیر در بهروزرسانی است. در اغلب مواقع این مسائل به دلیل اتصال اشتباه پینها، کتابخانه ناقص یا عدم هماهنگی جریان تغذیه است.
در صورت مواجهه با خطای “ImportError” مطمئن شوید که فایل ssd1306.py به درستی روی دستگاه بارگذاری شده و ساختار فایل صحیح است.
سوالات متداول (FAQ)
- آیا امکان استفاده همزمان از چند OLED وجود دارد؟
بله، با اختصاص پین CS متفاوت به هر ماژول. - آیا این روش در ESP8266 هم جواب میدهد؟
کاملاً. فقط پینهای SPI سختافزاری متفاوتند. - چطور فونت فارسی یا آیکون روی OLED نمایش دهیم؟
با استفاده از کتابخانه framebuffer و تبدیل تصویر XBM. - تفاوت SSD1306 و SH1106 چیست؟
SH1106 کمی ابعاد بزرگتری دارد و نیاز به درایور جدا دارد. اکثر کتابخانهها فقط از SSD1306 پشتیبانی میکنند.
خرید قطعات مورد نیاز برای این آموزش
برای اجرای این پروژه نیاز به قطعاتی مانند ماژول OLED 0.96 اینچ SPI، برد ESP32، کابل USB، بردبرد و سیم جامپر دارید. اگر قصد توسعه پروژههای مشابه را دارید، تهیهی یک بسته کامل شامل این قطعات بهصرفهتر خواهد بود.
ست آموزشی پیشنهادی میتواند شامل موارد زیر باشد:
- نمایشگر OLED با درایور SSD1306
- برد ESP32 یا NodeMCU
- مجموعهی سیم بردبرد، کابل USB و بردبرد آزمایشی
- فایل آموزشی پروژه و کد آماده
این پکیج برای یادگیری کامل اتصال، برنامهنویسی و کار با گرافیک در نمایشگر، بسیار کاربردی خواهد بود.
نتیجهگیری
با مطالعه این آموزش، با مفاهیم پایه نمایشگر OLED، نحوه برقراری ارتباط SPI در MicroPython، راهاندازی کتابخانه SSD1306 و نمایش اطلاعات متنی و گرافیکی آشنا شدید. این مسیر نهتنها به درک عمیقتر از میکروپایتون کمک میکند، بلکه شما را آمادهی ساخت پروژه کاربردی با نمایش اطلاعات زنده از سنسورها یا پردازشهای داخلی دستگاه میکند.
قدم بعدی میتواند توسعه پروژههایی مانند ساعت دیجیتال، پایش دما و رطوبت، یا مانیتور مصرف انرژی باشد؛ پروژههایی که همزمان هم کاربردی هستند، هم آموزشدهنده.




















