شِفر (کود) آردوینو و ویدئو برای نمایشگر OLED SSD1306 128 x 32 با I2C
در این آموزش، نحوه استفاده از نمایشگر OLED SSD1306 با اندازه 128 x 32 و ارتباط I2C روی آردوینو را بررسی خواهیم کرد. هدف نمایش عناصر مختلفی مانند متن، مستطیلها و مقادیر پویا مانند ولتاژ و دما روی صفحه است. این پیکربندی برای پروژههایی که به یک راهحل نمایش جمعوجور و کارآمد نیاز دارند ایدهآل است.

ما اجزای سختافزاری لازم، دستورالعملهای سیمکشی و شِفر (کود) آردوینو را برای راهاندازی کامل همهچیز بررسی خواهیم کرد. برای راهنمای تصویری، حتماً ویدئوی همراه این آموزش را تماشا کنید (در ویدیو در 00:00).
سختافزار توضیح داده شده
اجزای کلیدی این پروژه شامل نمایشگر OLED مدل SSD1306 است، که یک نمایشگر کممصرف بوده و از ارتباط I2C برای اتصال و رابطسازی آسان استفاده میکند. این نمایشگر دارای رزولوشن 128 × 32 پیکسل است که آن را برای نمایش متن و گرافیک ساده مناسب میسازد.
برای کنترل نمایشگر از برد آردوینو استفاده خواهیم کرد که فرمانها و دادهها را از طریق I2C ارسال میکند. آردوینو منطق نمایش اطلاعات را با استفاده از کتابخانههایی مانندAdafruit_GFXوAdafruit_SSD1306. این کتابخانهها فرآیند ارتباط را ساده میکنند و رسم آسان اشکال و متن را ممکن میسازند.
جزئیات مشخصات فنی
| تولیدکننده | Adafruit |
|---|---|
| شماره قطعه | SSD1306 |
| ولتاژ منطق/ورودی-خروجی | 3.3 تا 5 ولت |
| ولتاژ تغذیه | 3.3 تا 5 V |
| مصرف فعلی | حدود 20 میلیآمپر (معمولی) |
| رزولوشن صفحه نمایش | 128 × 32 پیکسل |
| رابط | I2C |
| ابعاد | 128 × 32 میلیمتر |
| یادداشتها / واریانتها | در اندازهها و رابطهای مختلف موجود است |
- آدرس I2C را بررسی کنید؛ معمولاً برای نمایشگرهای OLED مقدار 0x3C است.
- برای جلوگیری از آسیب، از تأمین مناسب برق اطمینان حاصل کنید.
- در صورت نیاز، از مقاومتهای پول-آپ برای خطوط SDA و SCL استفاده کنید.
- برای کاهش اغتشاش (نویز) در سیگنال I2C، سیمکشی را کوتاه نگه دارید.
- در صورت تغذیه چند ماجیول، به دفع گرما توجه کنید
دستورالعملهای سیمکشی

برای سیمکشی نمایشگر OLED مدل SSD1306، ابتدا پایه VCC نمایشگر را به خروجی 5V روی آردوینو متصل کنید. سپس پایه GND را به یکی از پایههای زمین آردوینو وصل کنید. برای ارتباط I2C، پایه SDA نمایشگر را به پایه SDA آردوینو متصل کنید که برای UNO برابر A4 است. سپس پایه SCL نمایشگر را به پایه SCL آردوینو وصل کنید که برای UNO برابر A5 است. اگر از مدل آردوینوی دیگری استفاده میکنید، به نگاشت پایههای مخصوص SDA و SCL برای آن مدل مراجعه کنید.
برای قطعات اضافی، اگر LEDای دارید که میخواهید کنترل کنید، آن را از طریق یک مقاومت 330 اهمی به پایه 9 متصل کنید. اطمینان حاصل کنید که سر دیگر مقاومت به آند LED وصل شود و کاتد به زمین متصل شود. این تنظیم اجازه میدهد LED وقتی پایه 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- نمایش خروجی
/*
* این یک مثال برای OLED های مونوکروم ما بر اساس درایورهای SSD1306 است.
*
* این مثال برای یک نمایشگر با اندازه 128x32 با استفاده از I2C است.
*
* اگر با ارور مواجه شدید: Adafruit_GFX.h پیدا نشد، کتابخانه Adafruit-GFX را دانلود کنید
* https://github.com/adafruit/Adafruit-GFX-Library
*
* این ماجیول OLED را از اَمه زون خریداری کنید: https://amzn.to/36zFvTb
*
* نوشته شده توسط لیمور فرید/لیدیادا برای آدافروت اینداستریز.
* مجوز BSD، برای اطلاعات بیشتر به license.txt مراجعه کنید.
* همه متنهای بالا و صفحه ورود باید در هر توزیعی لحاظ شود.
*
* ویدئو مربوط به این شِفر (کود) را تماشا کنید تا بهطور کامل یاد بگیرید.
* ویدئو را اینجا تماشا کنید: https://youtu.be/RjyulqVsz2o
* این شِفر (کود) بهصورت "همانطور که هست" بدون هیچ ضمانتی ارائه شده است.
* بهروزرسانی شده توسط احمد شمشیری برای آموزش ویدیویی Robojax.com
* در تاریخ 18 مارس 2018 در ساعت 10:21 در اِجَکس، انتاریو، کانادا.
* لطفاً سایر کدها و ویدیوهای Robojax را در http://robojax.com/learn/arduino مشاهده کنید.
* اگر این شِفر (کود) را به اشتراک میگذارید، باید این یادداشت حق مؤلف را حفظ کنید.
*/
#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;
/*
* اتصال پایه:
* اتصال پایه را ببینید: https://www.arduino.cc/en/Reference/Wire
* برای UNO: SDA به A4، SCL به A5
* برای Mega2560: SDA به 20، SCL به 21
* برای Leonardo: SDA به 2، SCL به 3
* برای Due: SDA به 20، SCL به 21
* VCC به 5V
* GND به GND :-)
*/
// این عرض و ارتفاع نمایش است که ۱۲۸ در ۳۲ میباشد.
#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);
// به صورت پیشفرض، ما ولتاژ بالا را بهطور داخلی از خط ۳.۳ ولت تولید میکنیم! (خوب!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // با آدرس I2C 0x3C (برای 128x32) راهاندازی کنید.
display.display();
delay(2000);
// بافر را پاک کنید.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3); // استفاده از یک شناور و آن
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, سفید);
display.drawRect(1, 1, 126,31, WHITE);
// display.drawCircle(63,31, 31, WHITE);
// display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* روبوکستکس (رشته متن، عدد x، عدد y، عدد اندازه، بولین d)
* متن رشته متنی است که باید چاپ شود
* x موقعیت عددی x متن است
* y موقعیت عددی y متن است
* اندازه اندازه متن است، ۱، ۲، ۳ و غیره
* d یا درست است یا نادرست. اگر درست باشد، نمایش بهروزرسانی میشود.
*/
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);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازون
-
علیاکسپرسخرید SSD1306 OLED 128x32 از علیاکسپرسs.click.aliexpress.com
منابع و مراجع
-
خارجیکتابخانه Adafruit-GFX (از گیتهاب)github.com
-
خارجیکتابخانه SSD1306 (از گیتهاب)github.com
فایلها📁
هیچ فایلی موجود نیست.