Kod Ara

Arduino Kodu ve SSD1306 OLED 128 x 32 I2C Ekranı için Video

Arduino Kodu ve SSD1306 OLED 128 x 32 I2C Ekranı için Video

Bu eğitimde, Arduino üzerinde I2C iletişimi kullanarak SSD1306 OLED 128 x 32 ekranını nasıl kullanacağımızı keşfedeceğiz. Amaç, ekranda metin, dikdörtgenler ve voltaj ile sıcaklık gibi dinamik değerler gibi çeşitli öğeleri görüntülemektir. Bu kurulum, kompakt ve verimli bir ekran çözümü gerektiren projeler için idealdir.

SSD1306 OLED 128x32

Her şeyi çalışır hale getirmek için gerekli donanım bileşenlerini, bağlantı talimatlarını ve Arduino kodunu adım adım inceleyeceğiz. Görsel bir rehber için bu eğitime eşlik eden videoyu mutlaka izleyin (videoda 00:00).

Donanım Açıklaması

Bu projenin temel bileşenleri, kolay arayüz için I2C iletişimi kullanan düşük güçlü bir ekran olan SSD1306 OLED ekranını içerir. Ekran, 128 x 32 piksel çözünürlüğe sahiptir ve metin ile basit grafiklerin görüntülenmesi için uygundur.

Ekranı kontrol etmek için, I2C üzerinden komut ve veri gönderecek olan Arduino kartını kullanacağız. Arduino, Adafruit_GFX ve Adafruit_SSD1306 gibi kütüphaneleri kullanarak bilgileri görüntüleme mantığını yönetir. Bu kütüphaneler iletişim sürecini basitleştirir ve şekiller ile metinlerin kolayca çizilmesine olanak tanır.

Veri Sayfası Detayları

ÜreticiAdafruit
Parça numarasıSSD1306
Mantık/G/Ç voltajı3.3 - 5 V
Besleme voltajı3.3 - 5 V
Akım tüketimi~20 mA (tipik)
Ekran çözünürlüğü128 x 32 piksel
ArayüzI2C
Boyutlar128 x 32 mm
Notlar / varyantlarÇeşitli boyutlarda ve arayüzlerde mevcuttur
  • I2C adresini kontrol edin, OLED'ler için genellikle 0x3C'dir.
  • Hasardan kaçınmak için doğru güç kaynağını sağlayın.
  • Gerekirse SDA ve SCL hatları için pull-up dirençleri kullanın.
  • I2C sinyalindeki gürültüyü azaltmak için kablolamayı kısa tutun.
  • Birden fazla modülü besliyorsanız ısı dağılımını göz önünde bulundurun.

Bağlantı Talimatları

Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32

SSD1306 OLED ekranını bağlamak için önce ekranın VCC pinini Arduino'daki 5V çıkışına bağlayın. Ardından, GND pinini Arduino'nun toprak pinlerinden birine bağlayın. I2C iletişimi için, ekranın SDA pinini Arduino'daki SDA pinine bağlayın; bu, UNO için A4'tür. Ardından, ekranın SCL pinini Arduino'daki SCL pinine bağlayın; bu, UNO için A5'tir. Farklı bir Arduino modeli kullanıyorsanız, SDA ve SCL için belirli pin eşlemesine bakın.

Ek bileşenler için, kontrol etmek istediğiniz bir LED'iniz varsa, onu 330 ohm'luk bir direnç üzerinden pin 9'a bağlayın. Direncin diğer ucunu LED'in anoduna bağladığınızdan emin olun; katot ise toprağa gitmelidir. Bu kurulum, pin 9 etkinleştirildiğinde LED'in yanmasını sağlayacaktır.

Kod Örnekleri ve Açıklama

Arduino kodunda, OLED ekranı için gerekli kütüphaneleri dahil ederek başlıyoruz. Önemli bir tanımlayıcı, Adafruit_SSD1306 sınıfının bir örneği olan display'dir. Ekran, setup() fonksiyonunda başlatılır; burada ayrıca çizime hazırlanmak için ekranı temizleriz.

SSD1306 OLED 128x32
void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay(); 
}

loop() fonksiyonunda, dinamik olarak güncellenen voltaj değerini tutmak için vString adında bir string değişkeni tanımlıyoruz. robojaxText() fonksiyonu, metni belirtilen koordinatlarda ekranda görüntülemek için kullanılır.

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() fonksiyonu, metni konumlandırmak ve görüntülemek için çok önemlidir. Metin dizesi, x ve y koordinatları, metin boyutu ve ekranın hemen güncellenip güncellenmeyeceğini belirleyen bir boolean parametresi alır.

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();
  }
}

Bu fonksiyon, metni yazdırmadan önce metin boyutunu, rengini ve imleç konumunu ayarlar. Kodun tam açıklaması için videoyu izlemeyi unutmayın (videoda 10:00).

Gösterim / Beklentiler

Kod Arduino'ya yüklendiğinde, OLED ekran voltaj, sıcaklık ve kapasite değerlerini her iki saniyede bir dinamik olarak güncelleyerek göstermelidir. Ayrıca metin öğelerinin etrafına çizilmiş bir dikdörtgen görmelisiniz. Ekranda hiçbir şey görünmüyorsa, bağlantıların doğru olduğundan ve I2C adresinin kodda belirtilenle eşleştiğinden emin olun.

Video Zaman Damgaları

  • 00:00 - Projeye giriş
  • 02:00 - Bağlantı talimatları
  • 05:00 - Kod açıklaması
  • 10:00 - Çıktının gösterimi

Görseller

SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
83-Arduino code and video for SSD1306 OLED 128 x 32 display with I2C
Dil: C++
/*********************************************************************
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);
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Veri Sayfası (pdf)

  • SSD1306 display datasheet
    SSD1306 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.pdf 1.79 MB

Fritzing Dosyası

  • SSD1306 128x32 OLED Wiring
    Fritzing 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 Wiring
    Fritzing 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