- OLED Ekran
- Gerekli Bileşenler
- NodeMCU ve OLED Ekran arasındaki SPI Pin Bağlantıları
- OLED arabirimi için NodeMCU programlama
- Görüntüyü Bitmap Değerlerine Dönüştür
Bu eğitimde OLED Ekranı NodeMCU ESP8266 ile arayüzleyeceğiz. NodeMCU, Espressif Systems'ın düşük maliyetli Wi-Fi özellikli ESP8266 Wi-Fi SoC'sinde çalışan bellenimi içeren açık kaynaklı bir IoT platformudur. Diğer çevre birimleri bağlamak için GPIO pinlerine sahiptir ve SPI, I2C ve UART pinlerini kullanarak seri iletişimi destekler. Ayrıca ADC ve PWM için pimleri vardır. Daha önce OLED'i, ESP ailesinin (ESP32) denetleyicisi de dahil olmak üzere diğer mikro denetleyicilerle arayüzledik:
- Raspberry Pi ile SSD1306 OLED Ekranı Arayüz
- Arduino ile SSD1306 OLED Ekranı Arayüz
- Arduino kullanarak OLED Ekranı Android Telefonla Arayüzle Akıllı Saat Oluşturun
- ESP32 ve OLED Ekran kullanan İnternet Saati
Bu eğitimde, NodeMCU ile Tek Renkli 7-pin SSD1306 0.96 OLED Ekranı arayüzlemek için SPI protokolünü kullanacağız ve NodeMCU ESP8266 ile OLED ekranda görüntüyü göstermeyi öğreneceğiz.
OLED Ekran
Organik Işık Yayan Diyot (OLED), organik bileşikten yapılmış ışık yayan bir katmanın elektrik akımı verildiğinde ışık yaydığı bir tür Işık Yayan Diyottur. Bu katman iki elektrot arasına yerleştirilir. Bu teknoloji bilgisayarlar, televizyonlar, akıllı telefonlar vb. Ekranlarda kullanılır. OLED ekranların kendi ışığı vardır ve LCD'deki gibi herhangi bir arka ışığa ihtiyaç duymazlar, bu nedenle güç tasarrufu sağlarlar ve birçok mikrodenetleyici ile kullanılırlar. OLED ekranları LCD üzerinden kullanmanın bir başka avantajı, OLED'lerde büyük ve daha kaliteli grafikler görüntülemektir. OLED Ekran teknolojisi hakkında daha fazla bilgiyi burada bulabilirsiniz.
Piyasada bulunan çeşitli OLED Ekranlar bulunmaktadır. Bu ekranlar renk, pin sayısı, kontrolör IC'si ve ekran boyutuna göre karakterize edilir. Renk temelinde, OLED'ler tek renkli mavi, tek renkli beyaz ve sarı / mavi renkte mevcuttur. Ve iletişim temelinde, esas olarak iki tür OLED mevcuttur - 3pin ve 7pin. I2C iletişim modunda 3 pinli OLED kullanılabilir ve SPI modunda veya I2C modunda 7 pin OLED kullanılabilir.
Bu eğitimde 128 piksel genişliğinde ve 64 piksel uzunluğunda olan " Tek Renkli 7-pin SSD1306 0.96 " OLED ekranı kullanacağız. Bu ekran hem SPI hem de I2C iletişim protokollerinde çalışabilir. Bu eğitimde SPI protokolünü kullanacağız. Ekrandaki piksellerin görüntülenmesine yardımcı olan bu OLED'de SSD1306 IC mevcuttur.
Gerekli Bileşenler
- Tek renkli 7 pimli SSD1306 0,96 ”OLED ekran
- NodeMCU ESP8266
- Mikro USB kablosu
- Breadboard
- Erkek-Erkek Jumper kabloları
NodeMCU ve OLED Ekran arasındaki SPI Pin Bağlantıları
Aşağıda, SPI seri iletişim protokolünü kullanarak iletişim kurmak için 7 pinli OLED Ekranın NodeMCU ile bağlanması için Devre Şeması bulunmaktadır.
Aşağıdaki tablo OLED Ekran ve NodeMCU ESP8266 arasındaki bağlantıları göstermektedir. GND pini NodeMCU GND'ye gider, VDD pini 3,3V veya 5V'ye bağlanabilir, SCK, SPI saati için NodeMCU'nun D5'ine bağlı OLED Ekran üzerindeki saat pinidir. SPI arayüzünün OLED'i üzerindeki MOSI pini olan SDA pini NodeMCU'nun D7'sine gider. RESET pini D3'e gider. DC, veri komut pini NodeMCU'nun D2'sine bağlıdır. Son pin, NodeMCU'nun çip seçimi olan D8'e gider.
Hayır. |
Oled Ekran |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) veya SDA (I2C) |
D7 |
5 |
SIFIRLA |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Burada OLED ile NodeMCU arasında arayüz oluşturmak için " Adafruit _SSD1306.h" ve " Adafruit_GFX.h " kitaplığını kullanacağız. Arduino IDE'yi açın ve en son sürümü Arduino IDE'den yükleyin ( Çizim> Kitaplığı Dahil Et> Kitaplıkları Yönet veya Ctrl + Shift_I ).
Yana bizim OLED ekran id 128x64 piksel boyutunda, bu nedenle Adafruit_SSD1306 başlık dosyasına bir değişiklik yapmak zorundayız. Arduino kitaplıklarını açın, Adafruit_SSD1306'ya gidin ve başlık dosyasını açın ( Adafruit _SSD1306.h ). " #Define SSD1306_128_32 " satırını yorumlayın ve aşağıdaki görüntüde gösterildiği gibi "#define SSD1306_128_64 " satırının açıklamasını kaldırın ve ardından dosyayı kaydedin. Varsayılan olarak bu kitaplık "# define SSD1306_128_32 " ile birlikte gelir.
Son olarak " ssd1306_128x64_spi " Adafruit SSD1306 örneğindeki pin numaralarını aşağıda gösterilen tabloya göre değiştirin. Şimdi, OLED Ekranı NodeMCU ile doğru şekilde bağladıktan sonra çizimi çalıştırdığınızda, Adafruit logosunu, varsayılan olarak kütüphaneye kaydedilen OLED ekranda göreceksiniz. Adafruit logosundan sonra, çizgiler, dikdörtgenler, üçgenler, daireler, dizeler, sayılar, animasyonlar ve bitmap gibi birçok başka grafiği görüntüler. İşte Bu eğitimde , NodeMCU ESP8266 ile OLED'de herhangi bir görüntünün nasıl görüntüleneceğini öğreneceğiz.
OLED arabirimi için NodeMCU programlama
Her zaman olduğu gibi kodun sonunda eksiksiz bir şekilde sağlanır, burada kodu ayrıntılı olarak açıkladık.
Gerekli kitaplıkları içe aktararak kodu başlatın. SPI protokolünü kullandığımız için, "SPI.h" kitaplığını içe aktaracağız ve ayrıca OLED Ekran için "Adafruit_GFX.h" ve "Adafruit_SSD1306.h" dosyalarını içe aktaracağız.
#Dahil etmek
OLED boyutumuz 128x64 olduğundan ekran genişliğini ve yüksekliğini sırasıyla 128 ve 64 olarak ayarlıyoruz. Bu nedenle, SPI iletişimi için NodeMCU'ya bağlı OLED pinlerinin değişkenlerini tanımlayın.
#define SCREEN_WIDTH 128 // OLED ekran genişliği, piksel cinsinden #define SCREEN_HEIGHT 64 // OLED ekran yüksekliği, piksel olarak // Yazılım SPI kullanılarak bağlanan SSD1306 ekran için açıklama (varsayılan durum): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 ekran (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Ekranı başlatmak için dahili olarak 3,3V üretmek üzere SSD1306_SWITCHCAPVCC kullanarak OLED ekranı başlatın.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306 tahsisi başarısız oldu")); için(;;); // Devam etmeyin, sonsuza kadar döngü yapın }
OLED ekranının görüntüsü herhangi bir şey görüntülenmeden önce display.clearDisplay () işlevini çağırarak temizlenir. Biz 2'ye yazı tipi boyutunu ayarlamak işlevi çağırarak setTextSize (font-size), ve metin rengini ve imleç konumunu ayarlamak kullanarak SetTextColor ve setCursor fonksiyonunu . Display.display () komutu, verileri SSD1306 denetleyicisinin dahili belleğine aktarmak için kullanılır. Aktarımdan sonra ekranda piksel belirir. Artık display.startscrollright (x-pos, y-pos) ve display.startscrollleft (x-pos, y-pos) çağrılarını çağırarak metni çeşitli şekillerde kaydırmaya başlayabiliriz. gecikme fonksiyonunda verilen süre için. Metnin kaydırılması, display.stopscroll () işlevi kullanılarak durdurulabilir.
void testscrolltext (void) {display.clearDisplay (); // OLED display.setTextSize (2) görüntü ekranını temizle; // 2X ölçekli metin çiz display.setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // İlk metin gecikmesini göster (100); // Aralarında duraklayarak çeşitli yönlerde ilerleyin: display.startscrollright (0x00, 0x0F); gecikme (2000); display.stopscroll (); gecikme (1000); display.startscrollleft (0x00, 0x0F); gecikme (2000); display.stopscroll (); gecikme (1000); display.startscrolldiagright (0x00, 0x07); gecikme (2000); display.startscrolldiagleft (0x00, 0x07); gecikme (2000); display.stopscroll (); gecikme (1000); }
Görüntüyü OLED üzerine çizmek için 6 parametre (x-koordinatı, y-koordinatı, bitmap dizisi, genişlik, yükseklik ve renk) alan display.drawBitmap () fonksiyonunu çağırıyoruz . Ekran boyutumuz 128x64 olduğundan, genişlik ve yüksekliği sırasıyla 128 ve 64 olarak belirledik. Burada bitmap dizisi, görüntüyü oluşturmak için ekranda pikseli çizmek için piksel bilgilerini içerir. Bu bitmap dizisi, aşağıda açıklanan çevrimiçi olarak oluşturulabilir veya görüntüyü bitmap dizisine dönüştürmek için birçok yazılım mevcuttur.
const unsigned char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1e, 0x03, 0x3f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3c, 0x03, 0x7f, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x7e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x3f, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf9, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xf9, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xe0, 0x06, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xbc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x01, 0xfe, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0xe0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x7f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x67, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x66, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, SİYAH, BEYAZ); display.display ();
Görüntüyü Bitmap Değerlerine Dönüştür
Çevrimiçi Bitmap http://javl.github.io/image2cpp/ adresinden oluşturulabilir. OLED'de görüntülemek istediğiniz görüntü dosyasını yükleyin ve boyutu 128x64 olarak ayarlayın. Bir önizleme görüntüsü gösterilecek ve ardından bitmap dizisi oluşturulacaktır.
Aşağıdaki ekran görüntüleri, herhangi bir görüntünün bitmap değerini oluşturma işlemini gösterir.
Son olarak kodun tamamını NodeMCU ESP8266'ya yükleyin ve OLED Ekranında görüntülenen görüntüyü göreceksiniz. Burada CircuitDigest logosunu OLED ekranda görüntülüyoruz.