Съдържание:

ESP32 с дисплей Oled - лента за напредъка: 6 стъпки
ESP32 с дисплей Oled - лента за напредъка: 6 стъпки

Видео: ESP32 с дисплей Oled - лента за напредъка: 6 стъпки

Видео: ESP32 с дисплей Oled - лента за напредъка: 6 стъпки
Видео: Изучите Arduino за 30 минут: примеры и проекты 2024, Ноември
Anonim
Image
Image
Wemos Lolin ESP32 OLED
Wemos Lolin ESP32 OLED

ESP32, за който ще говорим днес, е този, който вече се предлага с вграден Display Oled. Тази функция прави живота ни много по -лесен, защото можем да имаме впечатление относно стойността на променливата, която се появява. Дори не е нужно да гледате прозорец за отстраняване на грешки. Освен това можете да сглобявате представителства и да рисувате диаграми на производителността, наред с други неща. Поради тези предимства считам този модел за фантастичен продукт и днес ще го програмираме с помощта на Arduino IDE.

Така че в това видео ще програмираме лента за напредък. Важно е да запомните, че ако вашият ESP32 няма дисплей, е възможно да го закупите отделно. Също така, ако никога не сте програмирали ESP32, ви предлагам да гледате това видео: ВИДЕО ВЪВЕДЕНИЕ В ESP32, което разглежда по -подробно темата.

Стъпка 1: Библиотека

За да използваме oled дисплея, трябва да конфигурираме библиотеката в Arduino IDE. За да направите това, изтеглете библиотеката чрез връзката.

Разархивирайте файла и го поставете в папката библиотеки на Arduino IDE.

C:/ProgramFiles (x86)/Arduino/библиотеки

Стъпка 2: Wemos Lolin ESP32 OLED

Wemos Lolin е името на този ESP. На изображението черната част е дисплеят и до устройството показваме целия извод. Както е показано, има няколко IO, които ни позволяват да включваме и изключваме различни елементи. В допълнение, този модел има последно поколение WiFi и Bluetooth.

Стъпка 3: Пример

Пример
Пример

Във видеото можете да видите готовия ни проект и как да използвате олеирания дисплей за показване на лента за напредък, контролирана от потенциометър.

Стъпка 4: Монтаж

Монтаж
Монтаж

За нашия монтаж използвах потенциометър от 10k и включих GPIO25 на курсора. Също така имаме 3v3 и GND, както можете да видите на фигурата по -долу. Захранването ще идва от самия USB.

Стъпка 5: Код

Първо добавяме библиотеката "SSD1306.h". С това ще получим достъп до олеирания дисплей. След това създаваме дисплей обект от типа SSD1306, който ще отговаря за контрола на съдържанието, показвано на олеирания дисплей.

#include "SSD1306.h" // псевдоним за #include "SSD1306Wire.h" // обективен контролер за показване на светодиоди /* 0x3c: é um identificador único para comunicação do display pino 5 e 4 são os de comunicação (SDA, SDC) */ SSD1306 екран (0x3c, 5, 4); // pino que ligamos o potenciometro #define PINO_POTENCIOMETRO 25 // използваме para fazer за contador de porcentagem int contador;

Настройвам

Във функцията setup () ще инициализираме нашия дисплей обект, за да можем да контролираме какво ще се показва. Чрез този обект ние също ще конфигурираме източника на писане за текстовете, които ще се показват. И накрая, зададохме щифта (по -специално щифта, където завъртяхме потенциометъра) на INPUT, за да прочете стойността.

void setup () {Serial.begin (115200); Serial.println (); Serial.println (); // Inicializa o objeto que controlará o que será exibido na tela screen.init (); // показване на 180º (deixa de ponta cabeça) // display.flipScreenVertical (); // конфигуриране на екран за "ArialMT_Plain_10" screen.setFont (ArialMT_Plain_10); // конфигурация за pino para fazer a leitura do potenciômetro. pinMode (PINO_POTENCIOMETRO, INPUT); }

Цикъл

Във функцията loop () ще прочетем текущата стойност на потенциометъра. Можем да забележим, че използваме функцията "map" скоро след четене на стойността, тъй като стойността за четене е твърде висока, за да се постави в лента за напредък, така че ще картографираме стойността в диапазона от 0 до 100.

void loop () {// да се направи доблест до потенциометър 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 (доблест, 0, 4095, 0, 100); // limpa todo o display, apaga o contúdo da tela screen.clear (); // ++ брояч; // брояч> 100? брояч = 0: брояч = брояч; // десенха прогресивна лента drawProgressBar (); // exibe na tela o que foi configurado até então. screen.display (); забавяне (10); }

Във функцията "drawProgress ()" ще използваме стойността, прочетена от потенциометъра, която е записана в променливата "percProgress", за да зададете в лентата за напредъка. Също така ще поставим текст точно над лентата за напредък, указващ текущия процент.

// função para desenhar лента за напредък без 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: comprimento width da barra de progresso p4: height altura da barra de progresso p5: value valor que a barra de progresso deve assumir */ screen.drawProgressBar (10, 32, 100, 10, contador); // конфигурация за 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); 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“); } // се изпраща към contador está em 100, извиква низ "valor máximo" else if (contador == 100) {screen.drawString (64, 45, "Valor máximo"); }}

Стъпка 6: Някои други интересни функции

Дисплей

// поставя дисплея с главата надолу

void flipScreenVertical ();

Рисуване

// изтегля един пиксел от екрана

void setPixel (int16_t x, int16_t y);

// чертая линия

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

// нарисуваме правоъгълник

void drawRect (int16_t x, int16_t y, int16_t ширина, int16_t височина);

// начертайте кръг

void drawCircle (int16_t x, int16_t y, int16_t радиус);

// попълване на кръг

void fillCircle (int16_t x, int16_t y, int16_t радиус);

// начертайте хоризонтална линия

void drawHorizontalLine (int16_t x, int16_t y, int16_t дължина);

// начертайте вертикална линия

void drawVerticalLine (int16_t x, int16_t y, int16_t дължина);

Текст

// задава изравняване на текста за запис

// TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT, TEXT_ALIGN_CENTER_BOTH

void setTextAlignment (OLEDDISPLAY_TEXT_ALIGNMENT textAlignment);

Препоръчано: