شِفر (کود) آردوینو و ویدئو برای نمایشگر 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- نمایش خروجی
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#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;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 128 x 32
#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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
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, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
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
فایلها📁
هیچ فایلی موجود نیست.