Obsah:

ESP32 s oledovým displejom - indikátor priebehu: 6 krokov
ESP32 s oledovým displejom - indikátor priebehu: 6 krokov

Video: ESP32 s oledovým displejom - indikátor priebehu: 6 krokov

Video: ESP32 s oledovým displejom - indikátor priebehu: 6 krokov
Video: PROTOTYP "big LED hodiny" s procesorem ESP32 2024, November
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

ESP32, o ktorom budeme dnes hovoriť, je ten, ktorý je už súčasťou vstavaného displeja Oled. Táto funkcia nám veľmi uľahčuje život, pretože môžeme mať dojem, akú hodnotu má premenná. Nemusíte sa ani pozerať na ladiace okno. Okrem iného môžete tiež zostavovať reprezentácie a kresliť grafy výkonnosti. Vďaka týmto výhodám považujem tento model za fantastický produkt a dnes ho budeme programovať pomocou Arduino IDE.

V tomto videu teda naprogramujeme ukazovateľ priebehu. Je dôležité mať na pamäti, že ak váš ESP32 nemá olovený displej, je možné ho kúpiť samostatne. Tiež, ak ste nikdy neprogramovali ESP32, odporúčam vám pozrieť si toto video: VIDEO ÚVOD DO ESP32, ktorý sa tejto téme venuje podrobnejšie.

Krok 1: Knižnica

Aby sme mohli používať oled displej, musíme nakonfigurovať knižnicu v Arduino IDE. Ak to chcete urobiť, stiahnite si knižnicu prostredníctvom odkazu.

Rozbaľte súbor a vložte ho do priečinka s knižnicami v Arduino IDE.

C:/ProgramFiles (x86)/Arduino/knižnice

Krok 2: Wemos Lolin ESP32 OLED

Wemos Lolin je názov tohto ESP. Na obrázku je čierna časť displeja a vedľa zariadenia zobrazujeme celý vývod. Ako je znázornené, existuje niekoľko IO, ktoré nám umožňujú zapínať a vypínať rôzne prvky. Tento model má navyše najnovšiu generáciu WiFi a Bluetooth.

Krok 3: Príklad

Príklad
Príklad

Vo videu môžete vidieť náš pripravený projekt a spôsob, ako pomocou oledového displeja zobrazovať indikátor priebehu riadený potenciometrom.

Krok 4: Zostavenie

zhromaždenie
zhromaždenie

Na našu montáž som použil potenciometer 10k a zapol som kurzor GPIO25. Máme tiež 3v3 a GND, ako môžete vidieť na obrázku nižšie. Napájanie bude pochádzať zo samotného USB.

Krok 5: Kód

Najprv pridáme knižnicu „SSD1306.h“. Vďaka tomu sa dostaneme k oledovému displeju. Potom vytvoríme zobrazovací objekt typu SSD1306, ktorý bude zodpovedný za riadenie obsahu zobrazeného na oledovom displeji.

#include "SSD1306.h" // alias pre #include "SSD1306Wire.h" // ovládanie ovládača zobrazuje LED /* 0x3c: všetky identifikačné údaje pre väčšinu komunikácií zobrazujú pino 5 a 4 typy komunikácií (SDA, SDC)) */ Obrazovka SSD1306 (0x3c, 5, 4); // pino que ligamos o potenciometro #define PINO_POTENCIOMETRO 25 // využitie paraboly o contador de porcentagem int contador;

Nastaviť

Vo funkcii setup () inicializujeme náš objekt zobrazenia, aby sme mohli ovládať, čo sa bude zobrazovať. Prostredníctvom tohto objektu tiež nakonfigurujeme zdroj písania pre texty, ktoré sa budú zobrazovať. A nakoniec sme nastavili kolík (konkrétne kolík, kde sme otočili potenciometer) na VSTUP, aby sme odčítali hodnotu.

void setup () {Serial.begin (115200); Serial.println (); Serial.println (); // Inicializa o objeto que controlará o que será exibido na tela screen.init (); // gira o display 180º (deixa de ponta cabeça) // display.flipScreenVertically (); // konfigurácia a typ písma "ArialMT_Plain_10" screen.setFont (ArialMT_Plain_10); // konfigurácia o pino para fazer a leitura do potenciômetro. pinMode (PINO_POTENCIOMETRO, INPUT); }

Slučka

Vo funkcii loop () odčítame aktuálnu hodnotu potenciometra. Môžeme si všimnúť, že krátko po prečítaní hodnoty používame funkciu „map“, pretože prečítaná hodnota je príliš vysoká na to, aby sa dala vložiť do indikátora priebehu, takže namapujeme hodnotu tak, aby bola v rozsahu 0 až 100.

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 0 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 (); // ++ počítadlo; // počítadlo> 100? počítadlo = 0: počítadlo = počítadlo; // desenha a progress bar drawProgressBar (); // exibe na tela o que foi configurado até então. obrazovka.displej (); oneskorenie (10); }

Vo funkcii „drawProgress ()“použijeme na načítanie hodnoty v lište priebehu hodnotu načítanú z potenciometra, ktorý je uložený v premennej „percProgress“. Tesne nad ukazovateľ priebehu tiež umiestnime text s uvedením aktuálneho percenta.

// função para desenhar a progress bar no displayvoid drawProgressBar () {Serial.print (">>"); Serial.println (contador); // desenha a indikátor priebehu / * * drawProgressBar (x, y, šírka, výška, hodnota); parametre (p): p1: x coordenada X no plano cartesiano p2: y coordenada Y no plano cartesiano p3: width continimento da barra de progresso p4: výška altura da barra de progresso p5: value valor que a barra de progresso deve předpoklad */ screen.drawProgressBar (10, 32, 100, 10, contador); // konfigurácia alinhamento do texto que será escrito // nesse caso alinharemos o texto ao centro screen.setTextAlignment (TEXT_ALIGN_CENTER); // escreve o texto de porcentagem / * * drawString (x, y, text); parametre (p): p1: x coordenada X no plano cartesiano p2: y coordenada Y no plano cartesiano p3: string texto que será exibido */ screen.drawString (64, 15, String (contador) + "%"); // se o contador está em zero, escreve a string "valor mínimo" if (contador == 0) {screen.drawString (64, 45, "Valor mínimo"); } // se o contador está em 100, escreve a string "valor máximo" else if (contador == 100) {screen.drawString (64, 45, "Valor máximo"); }}

Krok 6: Niektoré ďalšie zaujímavé funkcie

Displej

// stavia displej hore nohami

void flipScreenVertically ();

Kresba

// vykreslí jeden pixel z obrazovky

zrušiť setPixel (int16_t x, int16_t y);

// Nakresli čiaru

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

// nakreslite obdĺžnik

void drawRect (int16_t x, int16_t y, int16_t šírka, int16_t výška);

// nakresli kruh

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

// vyplňte kruh

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

// nakreslite vodorovnú čiaru

neplatné drawHorizontalLine (int16_t x, int16_t y, int16_t dĺžka);

// nakreslite zvislú čiaru

void drawVerticalLine (int16_t x, int16_t y, int16_t dĺžka);

Text

// nastaví zarovnanie textu na zápis

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

neplatné setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Odporúča: