Мазмуну:

ESP32 дисплейи Oled менен - Прогресс тилкеси: 6 кадам
ESP32 дисплейи Oled менен - Прогресс тилкеси: 6 кадам
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

Бүгүн биз сүйлөшө турган ESP32, буга чейин Display Oled камтылган. Бул функция биздин жашообузду бир топ жеңилдетет, анткени биз пайда болгон өзгөрмөнүн маанисине таасир эте алабыз. Сиз мүчүлүштүктөрдү оңдоо терезесин кароонун кажети жок. Ошондой эле, сиз башка нерселердин ичинде өкүлчүлүктөрдү чогултуп, аткаруу диаграммаларын тарта аласыз. Бул артыкчылыктардан улам, мен бул моделди фантастикалык продукт деп эсептейм жана биз аны бүгүн Arduino IDE аркылуу программалайбыз.

Ошентип, бул видеодо биз прогресс тилкесин программалайбыз. Эгер ESP32де дисплей жок болсо, аны өзүнчө сатып алса болорун эстен чыгарбоо керек. Ошондой эле, эгер сиз эч качан ESP32 программасын программалабаган болсоңуз, анда мен сизге бул видеону көрүүнү сунуштайм: бул темага кененирээк токтолгон ESP32ге ВИДЕО КИРИШҮҮ.

1 -кадам: Китепкана

Олед дисплейди колдонуу үчүн, биз Arduino IDEдеги китепкананы конфигурациялашыбыз керек. Бул үчүн китепкананы шилтеме аркылуу жүктөп алыңыз.

Файлды ачып, Arduino IDEнин китепканалар папкасына чаптаңыз.

C:/ProgramFiles (x86)/Arduino/китепканалары

2 -кадам: Wemos Lolin ESP32 OLED

Wemos Lolin - бул ESPтин аты. Сүрөттө кара бөлүк дисплей болуп саналат жана аппараттын жанында биз бүт пинту көрсөтөбүз. Көрсөтүлгөндөй, ар кандай элементтерди күйгүзүүгө жана өчүрүүгө мүмкүндүк берген бир нече IO бар. Мындан тышкары, бул моделдин акыркы мууну WiFi жана Bluetooth бар.

3 -кадам: Мисал

Мисал
Мисал

Видеодо сиз биздин даяр проектибизди жана потенциометр менен башкарылган прогресс тилкесин көрсөтүү үчүн oled дисплейди кантип колдонууну көрө аласыз.

4 -кадам: Ассамблея

Ассамблея
Ассамблея

Биздин жыйын үчүн мен 10k потенциометрди колдондум жана курсордун GPIO25ти күйгүздүм. Бизде 3v3 жана GND да бар, муну төмөндөгү сүрөттө көрүп турасыз. Кубат USBден келет.

5 -кадам: Код

Биринчиден, биз "SSD1306.h" китепканасын кошобуз. Муну менен биз oled дисплейине киребиз. Андан кийин, биз SSD1306 түрүндөгү дисплей объектин түзөбүз, ал дисплейде көрсөтүлгөн мазмунду көзөмөлдөө үчүн жооп берет.

#include "SSD1306.h" // "SSD1306Wire.h" үчүн башка ылакап аталыштар // led /* 0x3c дисплейдеги дисплейдин экраны: 5 жана 4 são os de comunicação (SDA, SDC)) */ SSD1306 экраны (0x3c, 5, 4); // pino que ligamos o potenciometro #define PINO_POTENCIOMETRO 25 // ар кандай шарттар бар;

Жайгашуу

Setup () функциясында, биз дисплей объектибизди инициализациялайбыз, ошондо биз эмнени көрсөтүүнү көзөмөлдөй алабыз. Бул объект аркылуу биз көрсөтүлө турган тексттердин жазуу булагын конфигурациялайбыз. Акырында, биз бааны окуу үчүн пинди (тактап айтканда, биз потенциометрди бурган пинди) INPUT деп койдук.

void setup () {Serial.begin (115200); Serial.println (); Serial.println (); // Түшүндүрүүчү экрандын экраны же экраны.init (); // дисплей 180º (deixa de ponta cabeça) // display.flipScreenVertically (); // configure a fonte de escrita "ArialMT_Plain_10" screen.setFont (ArialMT_Plain_10); // конфигурациялоо үчүн керектүү нерселерди жасаңыз. pinMode (PINO_POTENCIOMETRO, INPUT); }

Loop

Цикл () функциясында биз учурдагы потенциометрдин маанисин окуйбуз. Биз "карта" функциясын маанини окугандан көп өтпөй байкай алабыз, анткени окуу мааниси прогресс тилкесине коюу үчүн өтө жогору, андыктан биз 0дөн 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 a a 4095 // a barra de progresso espera um valor entre 0 e 100 contador = map (valor, 0, 4095, 0, 100); // дисплейди көрсөтүү, экранды тазалоо.clear (); // ++ эсептегич; // эсептегич> 100? counter = 0: counter = counter; // прогресс тилкеси drawProgressBar (); // эквивалентти конфигурациялоо. screen.display (); кечигүү (10); }

"DrawProgress ()" функциясында биз прогресс тилкесине орнотуу үчүн "percProgress" өзгөрмөсүндө сакталган потенциометрден окулган маанини колдонобуз. Биз ошондой эле прогресс тилкесинин үстүнө учурдагы пайызды көрсөтүүчү текстти жайгаштырабыз.

// funcão para desenhar a progress bar no displayvoid drawProgressBar () {Serial.print (">>"); Serial.println (contador); // прогресс тилкеси / * * drawProgressBar (x, y, туурасы, бийиктиги, мааниси); parametros (p): p1: x coordenada X no plano cartesiano p2: y coordenada Y no plano cartesiano p3: туурасы курамы да барра де прогресс p4: бийиктиги алтура да барра де прогресси p5: баалуулуктун эрдигин жана ылдамдыгын жогорулатуу */ screen.drawProgressBar (10, 32, 100, 10, contador); // конфигурация же текстти жазуу үчүн // экинчисинин экосистемасын экранга коюу.setTextAlignment (TEXT_ALIGN_CENTER); // escreve o texto de porcentagem / * * drawString (x, y, text); parametros (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) + "%"); // нөлгө барабар болсо, "valor mínimo" сабын чыгарыңыз if (contador == 0) {screen.drawString (64, 45, "Valor mínimo"); } // se 100 contár está em 100, if "contor == 100" {screen.drawString (64, 45, "Valor máximo"); }}

6 -кадам: Кээ бир башка кызыктуу функциялар

Дисплей

// дисплейди тескери карайт

void flipScreenVertically ();

Чийүү

// экрандан бир пикселди тартат

боштук setPixel (int16_t x, int16_t y);

// сызык тартуу

жараксыз drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1);

// тик бурчтук тартуу

жараксыз drawRect (int16_t x, int16_t y, int16_t туурасы, int16_t бийиктиги);

// тегерек тартуу

жараксыз DrawCircle (int16_t x, int16_t y, int16_t радиусу);

// тегеректи толтуруңуз

боштук fillCircle (int16_t x, int16_t y, int16_t радиусу);

// горизонталдык сызык тартуу

void drawHorizontalLine (int16_t x, int16_t y, int16_t узундугу);

// вертикалдуу сызык тартуу

жараксыз DrawVerticalLine (int16_t x, int16_t y, int16_t узундугу);

Текст

// тексттин тегизделишин жазат

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

жараксыз setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Сунушталууда: