Mündəricat:

Ekran Oled ilə ESP32 - Tərəqqi Çubuğu: 6 Addım
Ekran Oled ilə ESP32 - Tərəqqi Çubuğu: 6 Addım

Video: Ekran Oled ilə ESP32 - Tərəqqi Çubuğu: 6 Addım

Video: Ekran Oled ilə ESP32 - Tərəqqi Çubuğu: 6 Addım
Video: Изучите Arduino за 30 минут: примеры и проекты 2024, Dekabr
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

Bu gün bəhs edəcəyimiz ESP32, artıq Display Oled quraşdırılmış bir cihazdır. Bu funksiya həyatımızı çox asanlaşdırır, çünki ortaya çıxan dəyişənin dəyəri ilə bağlı təəssürat yarada bilərik. Bir ayıklama pəncərəsinə baxmaq lazım deyil. Ayrıca, digər şeylər arasında təqdimatlar toplaya və performans cədvəlləri çəkə bilərsiniz. Bu üstünlüklərə görə bu modeli fantastik bir məhsul hesab edirəm və bu gün Arduino IDE -dən istifadə edərək proqramlaşdıracağıq.

Beləliklə, bu videoda bir irəliləyiş çubuğu proqramlaşdıracağıq. Xatırlamaq vacibdir ki, ESP32 -də ekranınız yoxdursa, onu ayrıca almaq mümkündür. Ayrıca, heç bir ESP32 proqramlamamısınızsa, bu videoya baxmanızı təklif edirəm: mövzu ilə daha ətraflı məşğul olan ESP32 -yə VİDEO GİRİŞ.

Addım 1: Kitabxana

Oled ekrandan istifadə etmək üçün kitabxananı Arduino IDE -də konfiqurasiya etməliyik. Bunu etmək üçün kitabxananı link vasitəsilə yükləyin.

Faylı açın və Arduino IDE kitabxana qovluğuna yapışdırın.

C:/ProgramFiles (x86)/Arduino/kitabxanaları

Addım 2: Wemos Lolin ESP32 OLED

Wemos Lolin bu ESP -nin adıdır. Şəkildə qara hissə ekrandır və cihazın yanında bütün pinoutu göstəririk. Göstərildiyi kimi, müxtəlif elementləri açmağa və söndürməyə imkan verən bir neçə IO var. Bundan əlavə, bu model ən son nəsil WiFi və Bluetooth -a malikdir.

Addım 3: Nümunə

Misal
Misal

Videoda hazır layihəmizi və potensiometr tərəfindən idarə olunan bir irəliləyiş çubuğunu göstərmək üçün oled displeydən necə istifadə edəcəyinizi görə bilərsiniz.

Addım 4: Montaj

Məclis
Məclis

Quraşdırma üçün 10k potensiometrdən istifadə etdim və kursorun GPIO25 -i işə saldım. Aşağıdakı şəkildə gördüyünüz kimi 3v3 və GND də var. Güc USB -nin özündən gələcək.

Addım 5: Kod

Əvvəlcə "SSD1306.h" kitabxanasını əlavə edirik. Bununla, oled ekranına daxil olacağıq. Sonra, ekranda göstərilən məzmuna nəzarət etməkdən məsul olan SSD1306 tipli bir görüntü obyekti yaradırıq.

#include "SSD1306.h" // "SSD1306Wire.h" daxil etmək üçün digər adlar // led /* 0x3c ekranını idarə etmək üçün istifadə edin: 5 və ya 4 saniyəlik tarixlərdə (SDA, SDC)) */ SSD1306 ekranı (0x3c, 5, 4); // pino que ligamos və ya potenciometro #define PINO_POTENCIOMETRO 25 // istifadə üçün lazım olan hər şeyi ayırın;

Qurmaq

Setup () funksiyasında, nümayiş etdiriləcək şeyi idarə edə bilmək üçün görüntü obyektimizi işə salacağıq. Bu obyekt vasitəsi ilə, göstəriləcək mətnlər üçün yazı mənbəyini də konfiqurasiya edəcəyik. Və nəhayət, dəyəri oxumaq üçün pimi (konkret olaraq potensiometrini çevirdiyimiz pin) INPUT olaraq təyin etdik.

void setup () {Serial.begin (115200); Serial.println (); Serial.println (); // Məlumatların yoxlanılması və yoxlanılması üçün ekran.init (); // ekran 180º (deixa de ponta cabeça) // display.flipScreenVertically (); // "ArialMT_Plain_10" screen.setFont (ArialMT_Plain_10) yazı tipini təyin edin; // konfiqurasiya etmək və ya istifadə etmək üçün. pinMode (PINO_POTENCIOMETRO, GİRİŞ); }

Döngə

Loop () funksiyasında cari potensiometr dəyərini oxuyacağıq. Dəyəri oxuduqdan qısa müddət sonra "xəritə" funksiyasından istifadə etdiyimizi görə bilərik, çünki oxumaq dəyəri irəliləyiş çubuğuna qoymaq üçün çox yüksəkdir, buna görə də dəyəri 0 ilə 100 aralığında olacağı üçün xəritəyə salacağıq.

void loop () {// leitura do valor do potenciometro int valor = analogRead (PINO_POTENCIOMETRO); //Serial.println(valor); // mapeando o valor do potenciometro para o valor da barra de progresso // potenciometro faz a leitura do valor no intervalo de a a 4095 // a barra de progresso espera um valor entre 0 e 100 contador = map (valor, 0, 4095), 0, 100); // ekranda göstərə biləcəyiniz şeylər, telun ekranında aydınlıq. təmiz (); // ++ sayğac; // sayğac> 100? sayğac = 0: sayğac = sayğac; // bir irəliləyiş çubuğu çəkməkProgressBar (); // əvvəllər konfiqurasiya edilə bilər. ekran.display (); gecikmə (10); }

"DrawProgress ()" funksiyasında, "percProgress" dəyişənində saxlanılan potensiometrdən oxunan dəyəri tərəqqi çubuğuna təyin etmək üçün istifadə edəcəyik. Tərəqqi çubuğunun üstünə cari faizi göstərən bir mətn də yerləşdirəcəyik.

// inkişaf etdirmə çubuğu yoxdur displayvoid drawProgressBar () {Serial.print (">>"); Serial.println (contador); // bir irəliləyiş çubuğu / * * drawProgressBar (x, y, en, hündürlük, dəyər); parametros (p): p1: x coordenada X plano cartesiano yoxdur p2: y koordinat Y yox plano cartesiano p3: eni ibarətdir, həm də barra de progresso p4: hündürlük altura da barra de progresso p5: dəyər dəyəri bir barra de progresso deve fərziyyə */ screen.drawProgressBar (10, 32, 100, 10, kontador); // mətn yazmaq üçün konfiqurasiya etmək lazımdır // mətn və ya ekranı mərkəzləşdirmək üçün ekran.setTextAlignment (TEXT_ALIGN_CENTER); // mətn yazmaq / * * drawString (x, y, mətn); parametros (p): p1: x koordinat X yox plano kart2 p2: y koordinat Y yox plano kartesiano p3: simli mətn yazmaq üçün */ screen.drawString (64, 15, String (contador) + "%"); // sıfırdan sonra, "cəsarət mínimo" sətrini çıxarın, əgər (contador == 0) {screen.drawString (64, 45, "Qəhrəmanlıq"); } // o zaman 100, başqa bir sətir "valor máximo" edin, əgər (contador == 100) {screen.drawString (64, 45, "Valor máximo"); }}

Addım 6: Bəzi digər maraqlı funksiyalar

Ekran

// ekranı alt -üst edir

void flipScreenVertically ();

Rəsm

// ekrandan tək bir piksel çəkir

boşluq setPixel (int16_t x, int16_t y);

// xətt çəkmək

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

// düzbucaqlı çəkin

void drawRect (int16_t x, int16_t y, int16_t eni, int16_t hündürlük);

// bir dairə çəkmək

void drawCircle (int16_t x, int16_t y, int16_t radius);

// bir dairə doldurun

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

// üfüqi bir xətt çəkin

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

// şaquli bir xətt çəkin

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

Mətn

// yazılacaq mətn hizalanmasını təyin edir

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

void setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Tövsiyə: