Mundarija:

OSP displeyli ESP32 - Progress Bar: 6 qadam
OSP displeyli ESP32 - Progress Bar: 6 qadam

Video: OSP displeyli ESP32 - Progress Bar: 6 qadam

Video: OSP displeyli ESP32 - Progress Bar: 6 qadam
Video: Плиты ОСП (OSB). Как правильно использовать ОСП плиты. 2024, Noyabr
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

Bugun biz gaplashmoqchi bo'lgan ESP32-bu o'rnatilgan displeyli Oled bilan birga keladi. Bu funksiya bizning hayotimizni ancha osonlashtiradi, chunki biz paydo bo'ladigan o'zgaruvchining qiymati haqida taassurot qoldiramiz. Siz hatto disk raskadrovka oynasiga qarashingiz shart emas. Bundan tashqari, siz tasvirlarni yig'ishingiz va ishlash jadvallarini chizishingiz mumkin. Bu afzalliklar tufayli men ushbu modelni ajoyib mahsulot deb bilaman va biz bugun uni Arduino IDE yordamida dasturlashtiramiz.

Shunday qilib, bu videoda biz rivojlanish paneli dasturini tuzamiz. Shuni esda tutish kerakki, agar sizda ESP32 displeyi yo'q bo'lsa, uni alohida sotib olish mumkin. Bundan tashqari, agar siz hech qachon ESP32 -ni dasturlamagan bo'lsangiz, men sizga ushbu videoni ko'rishni taklif qilaman: VIDEO ESP32 ga KIRISH, bu mavzu bilan batafsilroq shug'ullanadi.

1 -qadam: kutubxona

Oled displeyidan foydalanish uchun biz kutubxonani Arduino IDE -da sozlashimiz kerak. Buning uchun havola orqali kutubxonani yuklab oling.

Faylni oching va Arduino IDE kutubxonalari papkasiga joylashtiring.

C:/ProgramFiles (x86)/Arduino/kutubxonalari

2 -qadam: Wemos Lolin ESP32 OLED

Wemos Lolin - bu ESPning nomi. Rasmda qora qism - bu displey va qurilmaning yonida biz butun pinoutni ko'rsatamiz. Ko'rsatilganidek, turli elementlarni yoqish va o'chirishga imkon beradigan bir nechta IO mavjud. Bundan tashqari, ushbu modelda eng yangi avlod WiFi va Bluetooth mavjud.

3 -qadam: Misol

Misol
Misol

Videoda siz bizning tayyor loyihamizni va potentsiometr tomonidan boshqariladigan harakat panelini ko'rsatish uchun oled displeydan qanday foydalanishni ko'rishingiz mumkin.

4 -qadam: yig'ish

O'rnatish
O'rnatish

O'rnatish uchun men 10k potentsiometrdan foydalandim va GPIO25 kursorini yoqdim. Bizda 3v3 va GND ham bor, buni quyidagi rasmda ko'rib turganingizdek. Quvvat USB -dan keladi.

5 -qadam: kod

Birinchidan, biz "SSD1306.h" kutubxonasini qo'shamiz. Bu bilan biz ekranli ekranga kiramiz. Shundan so'ng, biz SSD1306 turidagi displey ob'ektini yaratamiz, u displeyda ko'rsatilgan tarkibni boshqarish uchun javobgardir.

#"SSD1306.h" ni qo'shing // "SSD1306Wire.h" ni o'z ichiga olgan taxalluslar // LED /* 0x3c displeyini boshqaradi: ular 5 -dan 4 -gacha bo'lgan vaqtni ko'rsatadi (SDA, SDC)) */ SSD1306 ekrani (0x3c, 5, 4); // pino que ligamos yoki potenciometro #define PINO_POTENCIOMETRO 25 // utilizado para fazer o contador de porcentagem int contador;

Sozlash

Setup () funktsiyasida biz ko'rsatiladigan ob'ektni ishga tushiramiz, shunda biz nima ko'rsatilishini nazorat qila olamiz. Bu ob'ekt orqali biz ko'rsatiladigan matnlar uchun yozish manbasini ham sozlaymiz. Va nihoyat, biz qiymatni o'qish uchun pinni (aniqrog'i, potentsiometrni aylantirgan pinni) INPUT ga o'rnatdik.

void setup () {Serial.begin (115200); Serial.println (); Serial.println (); // Informatsiyalarni tekshirish yoki o'chirish, ekranni o'chirish (ekran).init (); // ekran 180º (deixa de ponta cabeça) // display.flipScreenVertically (); // "ArialMT_Plain_10" screen.setFont (ArialMT_Plain_10) shriftini sozlash; // konfiguratsiya yoki sozlash uchun. pinMod (PINO_POTENCIOMETRO, INPUT); }

Loop

Loop () funktsiyasida biz joriy potentsiometr qiymatini o'qiymiz. Biz "xarita" funktsiyasidan foydalanayotganimizni payqashimiz mumkin, chunki o'qish qiymati o'tish satriga qo'yish uchun juda yuqori, shuning uchun biz qiymatni 0 dan 100 gacha oralig'ida joylashtiramiz.

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); // limpa todo o display, apaga o contúdo da tela screen.clear (); // ++ hisoblagich; // hisoblagich> 100? taymer = 0: hisoblagich = hisoblagich; // oldinga siljish chizig'i DrawProgressBar (); // bu erda siz konfiguratsiya qilishingiz mumkin. ekran.display (); kechikish (10); }

"DrawProgress ()" funktsiyasida biz "percProgress" o'zgaruvchisida saqlangan potentsiometrdan o'qilgan qiymatni harakat satriga o'rnatish uchun ishlatamiz. Bundan tashqari, biz joriy foizni ko'rsatgan holda, harakatlanish satrining yuqori qismiga matn joylashtiramiz.

// funcão para desenhar progress bar no displayvoid drawProgressBar () {Serial.print (">>"); Serial.println (kontador); // harakat paneli / * * drawProgressBar (x, y, kenglik, balandlik, qiymat); parametrlar (p): p1: x koordinatalar X yo'q plano kartesiano p2: y koordinatalar Y yo'q plano karteziano p3: kenglik tarkibi ham barra de progresso p4: balandligi altura da barra de progresso p5: qiymat bahosi qanchalik tez bo'lsa ham * screen.drawProgressBar (10, 32, 100, 10, kontador); // konfiguratsiya yoki matnni yozish uchun // matnni ekranga markazlashtirish.setTextAlignment (TEXT_ALIGN_CENTER); // escreve o texto de porcentagem / * * drawString (x, y, matn); parametrlar (p): p1: x koordinatalar X yo'q plano kartesiano p2: y koordinatalar Y yo'q plano kartesiano p3: string texto que será exibido */ screen.drawString (64, 15, String (contador) + "%"); // nolga teng bo'lsa, "valor mínimo" qatorini saqlang, agar (contador == 0) {screen.drawString (64, 45, "Valor mínimo"); } 100 -ni tanlang, agar "contor == 100" {screen.drawString (64, 45, "Valor máximo") qatorini "valor máximo" qatoriga o'tkazing; }}

6 -qadam: Boshqa qiziqarli funktsiyalar

Ko'rsatish

// displeyni teskari qilib qo'yadi

void flipScreenVertically ();

Chizma

// ekrandan bitta piksel chiqaradi

bo'sh setPixel (int16_t x, int16_t y);

// chiziq chizish

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

// to'rtburchak chizish

void drawRect (int16_t x, int16_t y, int16_t kengligi, int16_t balandligi);

// aylana chizish

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

// aylanani to'ldiring

void fillCircle (int16_t x, int16_t y, int16_t radiusi);

// gorizontal chiziq chizish

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

// vertikal chiziq chizish

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

Matn

// matnning hizalanishini yoziladi

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

void setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Tavsiya: