Ардуино код и видео за SSD1306 OLED 128 x 32 дисплеј со I2C
Во ова упатство, ќе истражиме како да го користиме SSD1306 OLED 128 x 32 дисплејот со I2C комуникација на Arduino. Целта е да прикажеме различни елементи како текст, правоаголници и динамички вредности како напон и температура на екранот. Оваа поставка е идеална за проекти кои бараат компактно и ефикасно решение за приказ.

Ќе поминеме низ потребните хардверски компоненти, инструкциите за поврзување и Arduino кодот за да ставиме сè во функција. За визуелен водич, задолжително погледнете го видеото придружено со ова упатство (во видеото на 00:00).
Објаснување на хардверот
Клучните компоненти за овој проект го вклучуваат SSD1306 OLED дисплејот, кој е дисплеј со ниска потрошувачка што користи I2C комуникација за лесно поврзување. Дисплејот има резолуција од 128 x 32 пиксели, што го прави погоден за прикажување текст и едноставна графика.
За контрола на дисплејот, ќе ја користиме Arduino плочката, која ќе испраќа команди и податоци преку I2C. Arduino управува со логиката на прикажување на информациите користејќи библиотеки како Adafruit_GFX и Adafruit_SSD1306. Овие библиотеки го поедноставуваат процесот на комуникација и овозможуваат лесно цртање на форми и текст.
Детали од техничката документација
| Производител | Adafruit |
|---|---|
| Број на дел | SSD1306 |
| Логички/IO напон | 3.3 - 5 V |
| Напон на напојување | 3.3 - 5 V |
| Потрошувачка на струја | ~20 mA (тип.) |
| Резолуција на дисплејот | 128 x 32 пиксели |
| Интерфејс | I2C |
| Димензии | 128 x 32 mm |
| Белешки / варијанти | Достапни во различни големини и интерфејси |
- Проверете ја I2C адресата, обично 0x3C за OLED дисплеи.
- Осигурете соодветно напојување за да избегнете оштетување.
- Користете pull-up отпорници за SDA и SCL линиите ако е потребно.
- Држете ги жиците кратки за да го намалите шумот во I2C сигналот.
- Размислете за одведување на топлина ако напојувате повеќе модули.
Инструкции за поврзување

За да го поврзете SSD1306 OLED дисплејот, прво поврзете го VCC пинот на дисплејот со 5V излезот на Arduino. Потоа, поврзете го GND пинот со еден од ground пиновите на Arduino. За I2C комуникација, поврзете го SDA пинот на дисплејот со SDA пинот на Arduino, кој е A4 за UNO. Потоа, поврзете го SCL пинот на дисплејот со SCL пинот на Arduino, кој е A5 за UNO. Ако користите различен модел на Arduino, погледнете го специфичното мапирање на пиновите за SDA и SCL.
За дополнителни компоненти, ако имате LED што сакате да ја контролирате, поврзете ја на пин 9 преку отпорник од 330 оми. Осигурете се дека другиот крај на отпорникот е поврзан со анодата на LED, додека катодата треба да оди на ground. Оваа поставка ќе овозможи LED да свети кога пинот 9 е активиран.
Примери на код и објаснување
Во Arduino кодот, започнуваме со вклучување на потребните библиотеки за OLED дисплејот. Клучен идентификатор е display, кој е инстанца на класата Adafruit_SSD1306. Дисплејот се иницијализира во функцијата setup(), каде исто така го чистиме дисплејот за да се подготвиме за цртање.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}
Во функцијата loop(), дефинираме променлива од типот string 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).
Демонстрација / Што да очекувате
Кога кодот ќе се постави на Arduino, 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);
}
Работи што можеби ќе ви требаат
-
AmazonPurchase OLED 128x32 from Amazonamzn.to
-
AliExpressPurchase SSD1306 OLED 128x32 from AliExpresss.click.aliexpress.com
Ресурси и референци
-
НадворешноAdafruit-GFX library (from GitHub)github.com
-
НадворешноSSD1306 library (from GitHub)github.com
Датотеки📁
Технички лист (pdf)
-
SSD1306 display datasheetSSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
SSD1306_display_datasheet.pdf1.79 MB
Fritzing датотека
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz
Wiring diagram
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz