İçindekiler:

Ekran Oled ile ESP32 - İlerleme Çubuğu: 6 Adım
Ekran Oled ile ESP32 - İlerleme Çubuğu: 6 Adım

Video: Ekran Oled ile ESP32 - İlerleme Çubuğu: 6 Adım

Video: Ekran Oled ile ESP32 - İlerleme Çubuğu: 6 Adım
Video: Using Heltec ESP32 OLED Wifi Kit 2024, Kasım
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

Bugün bahsedeceğimiz ESP32, halihazırda Display Oled yerleşik olarak gelen bir ESP32'dir. Bu fonksiyon hayatımızı çok kolaylaştırıyor çünkü görünen değişkenin değeri hakkında bir izlenime sahip olabiliyoruz. Hata ayıklama penceresine bakmanıza bile gerek yok. Ayrıca, diğer şeylerin yanı sıra temsilleri bir araya getirebilir ve performans çizelgeleri çizebilirsiniz. Bu faydaları nedeniyle bu modeli harika bir ürün olarak görüyorum ve bugün Arduino IDE kullanarak programlayacağız.

Bu videoda bir ilerleme çubuğu programlayacağız. ESP32'nizin ekranı oled değilse, ayrıca satın almanın da mümkün olduğunu unutmamak önemlidir. Ayrıca daha önce hiç ESP32 programlamadıysanız şu videoyu izlemenizi öneririm: Konuyu daha detaylı anlatan ESP32'YE GİRİŞ VİDEOSU.

1. Adım: Kitaplık

Oled ekranı kullanmak için Arduino IDE'deki kütüphaneyi yapılandırmamız gerekiyor. Bunu yapmak için kütüphaneyi bağlantıdan indirin.

Dosyayı açın ve Arduino IDE'nin kitaplıklar klasörüne yapıştırın.

C: /ProgramFiles(x86)/Arduino/kütüphaneler

2. Adım: Wemos Lolin ESP32 OLED

Wemos Lolin, bu ESP'nin adıdır. Resimde siyah kısım ekrandır ve cihazın yanında tüm pinout'u gösteriyoruz. Gösterildiği gibi, çeşitli öğeleri açmamıza ve kapatmamıza izin veren birkaç GÇ vardır. Ayrıca bu model, son nesil WiFi ve Bluetooth'a sahiptir.

Adım 3: Örnek

Örnek
Örnek

Videoda hazır projemizi ve bir potansiyometre ile kontrol edilen bir ilerleme çubuğunu görüntülemek için oled ekranın nasıl kullanılacağını görebilirsiniz.

Adım 4: Montaj

toplantı
toplantı

Montajımız için 10k potansiyometre kullandım ve imlecin GPIO25'ini açtım. Ayrıca aşağıdaki şekilde de görebileceğiniz gibi 3v3 ve GND var. Güç USB'nin kendisinden gelecek.

Adım 5: Kod

İlk olarak "SSD1306.h" kütüphanesini ekliyoruz. Bununla oled ekrana erişeceğiz. Ardından, oled ekranda gösterilen içeriği kontrol etmekten sorumlu olacak SSD1306 tipinde bir görüntüleme nesnesi oluşturuyoruz.

#include "SSD1306.h" // #include "SSD1306Wire.h" için takma ad // led ekranını kontrol etmek için /* 0x3c: pino 5 ve 4 iletişim bilgilerini görüntülemek için kullanılabilir (SDA, SDC)) */ SSD1306 ekran (0x3c, 5, 4); //pino que ligamos o potenciometro #define PINO_POTENCIOMETRO 25 //utilizado para fazer o contador de porcentagem int contador;

Kurmak

setup() fonksiyonunda, neyin görüntüleneceğini kontrol edebilmemiz için görüntüleme nesnemizi başlatacağız. Bu nesne aracılığıyla, görüntülenecek metinler için yazma kaynağını da yapılandıracağız. Ve son olarak, değeri okumak için pimi (özellikle potansiyometreyi çevirdiğimiz pim) GİRİŞ'e ayarladık.

geçersiz kurulum() { Serial.begin(115200); Seri.println(); Seri.println(); // Screen.init(); // 180º gösterim (deixa de ponta cabeça) // display.flipScreenVertical(); // bir yazı tipi yapılandırma "ArialMT_Plain_10" screen.setFont(ArialMT_Plain_10); //potenciômetro'yu yapılandırın. pinMode(PINO_POTENCIOMETRO, INPUT); }

Döngü

Loop() fonksiyonunda mevcut potansiyometre değerini okuyacağız. Değeri okuduktan hemen sonra "harita" işlevini kullandığımızı fark edebiliriz, çünkü okuma değeri bir ilerleme çubuğuna koymak için çok yüksek, bu nedenle değeri 0 ila 100 aralığında olacak şekilde eşleyeceğiz.

void loop() { //leitura do valor do potenciometro int valor = analogRead(PINO_POTENCIOMETRO); //Serial.println(değer); //potenciometro para o valor da barra de progresso //potenciometro faz a leitura do valor no intervalo 0 a 4095 //a barra de Progresso espera um valor giriş 0 e 100 kontador = map(valor, 0, 4095, 0, 100); //yapılacak işi görüntüle, ekrandan devam et.clear(); // ++sayaç; // sayaç > 100 ? sayaç = 0: sayaç = sayaç; //desenha bir ilerleme çubuğu drawProgressBar(); // en uygun şekilde yapılandırın. ekran görüntüsü(); gecikme(10); }

"drawProgress ()" fonksiyonunda, ilerleme çubuğunda ayarlamak için "percProgress" değişkenine kaydedilen potansiyometreden okunan değeri kullanacağız. Ayrıca, ilerleme çubuğunun hemen üstüne, mevcut yüzdeyi gösteren bir metin yerleştireceğiz.

// bir ilerleme çubuğuna göre işlev göstermez displayvoid drawProgressBar() { Serial.print(">> "); Serial.println(contador); // ilerleme çubuğu desenha /* * drawProgressBar(x, y, genişlik, yükseklik, değer); parametreler (p): p1: x koordineli X plano kartezyen yok p2: y koordineli Y plano karteziano yok p3: genişlik karşılaştırmalı ve ilerlemeli p4: yükseklik altura ve ilerlemeli p5: değer valor que a barra de progresso deve assumir */ screen.drawProgressBar(10, 32, 100, 10, contador); // texto que escrito yapmak için yapılandırma/alinhamento //nesse kaso alinharemos o texto ao centro screen.setTextAlignment(TEXT_ALIGN_CENTER); //escreve o texto de porcentagem /* * drawString(x, y, text); parametreler (p): p1: x koordinatları X plano kartezyen yok p2: y plano kartezyen yok p3: string metin sorgusu será exibido */ screen.drawString(64, 15, String(contador) + "%"); //se o contador está em zero, bir string "valor mínimo" if(contador == 0){ screen.drawString(64, 45, "Valor mínimo"); } // 100'ü değiştir, bir dizge "valor máximo" escreve başka if(contador == 100){ screen.drawString(64, 45, "Valor máximo"); } }

Adım 6: Diğer Bazı İlginç İşlevler

Görüntülemek

// ekranı ters çevirir

void flipScreenVertically ();

Resim çizme

// ekrandan tek bir piksel çizer

geçersiz setPixel (int16_t x, int16_t y);

// bir çizgi çiz

void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1);

// bir dikdörtgen çiz

void drawRect (int16_t x, int16_t y, int16_t genişlik, int16_t yükseklik);

// bir daire çiz

void drawCircle (int16_t x, int16_t y, int16_t yarıçapı);

// bir daireyi doldur

void fillCircle (int16_t x, int16_t y, int16_t yarıçapı);

// yatay bir çizgi çiz

void drawHorizontalLine (int16_t x, int16_t y, int16_t uzunluk);

// dikey bir çizgi çiz

void drawVerticalLine (int16_t x, int16_t y, int16_t uzunluk);

Metin

// yazılacak metin hizalamasını ayarlar

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

geçersiz setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Önerilen: