Проекты с OLED дисплеями на Arduino

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Введение

OLED дисплеи становятся все более популярными в проектах на Arduino благодаря их высокой контрастности, низкому энергопотреблению и широким углам обзора. Эти дисплеи идеально подходят для отображения текстовой информации, графики и даже анимации. В этой статье мы рассмотрим, как использовать OLED дисплеи с Arduino, какие компоненты необходимы для начала работы, как подключить дисплей к плате и приведем несколько примеров проектов, которые можно реализовать.

OLED дисплеи отличаются от традиционных ЖК-дисплеев тем, что каждый пиксель излучает свет самостоятельно, что позволяет достичь высокой контрастности и насыщенности цветов. Это делает их идеальными для использования в условиях низкой освещенности или для создания дисплеев с высоким разрешением. Кроме того, OLED дисплеи потребляют меньше энергии, что особенно важно для портативных и автономных устройств.

Кинга Идем в IT: пошаговый план для смены профессии

Необходимые компоненты

Для работы с OLED дисплеями на Arduino вам понадобятся следующие компоненты:

  • Arduino (например, Arduino Uno, Nano или Mega)
  • OLED дисплей (обычно используются дисплеи с разрешением 128x64 или 128x32)
  • Соединительные провода
  • Резисторы (в некоторых случаях)
  • Бредборд (макетная плата)

Также может понадобиться программное обеспечение, такое как Arduino IDE, и библиотеки для работы с OLED дисплеями, например, Adafruit SSD1306 и Adafruit GFX.

Arduino IDE — это интегрированная среда разработки, которая позволяет писать, компилировать и загружать код на плату Arduino. Библиотеки Adafruit SSD1306 и Adafruit GFX предоставляют удобные функции для работы с графикой и текстом на OLED дисплеях, что значительно упрощает процесс разработки.

Подключение OLED дисплея к Arduino

Подключение OLED дисплея к Arduino может варьироваться в зависимости от модели дисплея. Наиболее распространенные варианты подключения включают использование интерфейсов I2C и SPI.

Подключение через I2C

Интерфейс I2C (Inter-Integrated Circuit) позволяет подключать несколько устройств к одной шине с использованием всего двух проводов: SDA (данные) и SCL (тактовый сигнал).

  1. Подключите выводы VCC и GND дисплея к соответствующим выводам на Arduino.
  2. Подключите вывод SDA дисплея к выводу A4 на Arduino (для Arduino Uno) или к другому соответствующему выводу на других моделях.
  3. Подключите вывод SCL дисплея к выводу A5 на Arduino (для Arduino Uno) или к другому соответствующему выводу на других моделях.

Подключение через SPI

Интерфейс SPI (Serial Peripheral Interface) обеспечивает более высокую скорость передачи данных по сравнению с I2C, но требует больше проводов для подключения.

  1. Подключите выводы VCC и GND дисплея к соответствующим выводам на Arduino.
  2. Подключите вывод D0 (SCK) дисплея к выводу 13 на Arduino.
  3. Подключите вывод D1 (MOSI) дисплея к выводу 11 на Arduino.
  4. Подключите вывод CS дисплея к выводу 10 на Arduino.
  5. Подключите вывод DC дисплея к выводу 9 на Arduino.
  6. Подключите вывод RES дисплея к выводу 8 на Arduino.

После подключения дисплея, необходимо установить библиотеки Adafruit SSD1306 и Adafruit GFX через Arduino IDE. Для этого откройте Arduino IDE, перейдите в меню "Скетч" -> "Подключить библиотеку" -> "Управление библиотеками" и найдите нужные библиотеки.

Примеры проектов

Простой текстовый дисплей

Этот проект демонстрирует, как вывести простой текст на OLED дисплей. Вы можете использовать этот пример в качестве основы для создания более сложных текстовых интерфейсов.

cpp
Скопировать код
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    for(;;);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.println(F("Hello, world!"));
  display.display();
}

void loop() {
}

Графический дисплей

В этом проекте мы создадим простой графический дисплей, который отображает различные фигуры. Это может быть полезно для создания визуальных индикаторов или простых игр.

cpp
Скопировать код
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    for(;;);
  }
  display.clearDisplay();
  display.drawRect(10, 10, 50, 30, SSD1306_WHITE);
  display.drawCircle(80, 30, 20, SSD1306_WHITE);
  display.display();
}

void loop() {
}

Часы на OLED дисплее

Этот проект показывает, как создать простые часы на OLED дисплее с использованием библиотеки RTClib для работы с реальным временем. Часы могут быть полезны в различных проектах, таких как будильники или системы мониторинга.

cpp
Скопировать код
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

RTC_DS3231 rtc;

void setup() {
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    for(;;);
  }
  if (!rtc.begin()) {
    for(;;);
  }
  display.clearDisplay();
}

void loop() {
  DateTime now = rtc.now();
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.print(now.hour(), DEC);
  display.print(':');
  display.print(now.minute(), DEC);
  display.display();
  delay(1000);
}

Температурный монитор

Этот проект демонстрирует, как использовать OLED дисплей для отображения температуры, измеренной с помощью датчика температуры, такого как DHT11 или DHT22.

cpp
Скопировать код
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    for(;;);
  }
  dht.begin();
  display.clearDisplay();
}

void loop() {
  float temperature = dht.readTemperature();
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.print("Temp: ");
  display.print(temperature);
  display.print(" C");
  display.display();
  delay(2000);
}

Анимация на OLED дисплее

Этот проект показывает, как создать простую анимацию на OLED дисплее, что может быть полезно для создания визуальных эффектов или игр.

cpp
Скопировать код
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    for(;;);
  }
  display.clearDisplay();
}

void loop() {
  for(int i = 0; i < SCREEN_WIDTH; i++) {
    display.clearDisplay();
    display.drawCircle(i, SCREEN_HEIGHT/2, 10, SSD1306_WHITE);
    display.display();
    delay(50);
  }
}

Заключение

Использование OLED дисплеев в проектах на Arduino открывает множество возможностей для создания интерактивных и информативных устройств. В этой статье мы рассмотрели основные шаги по подключению и использованию OLED дисплеев, а также привели несколько примеров проектов, которые помогут вам начать работу. Экспериментируйте и создавайте свои уникальные проекты с использованием этих замечательных дисплеев!

OLED дисплеи предоставляют гибкость и функциональность, которые могут значительно улучшить ваши проекты. Независимо от того, создаете ли вы простой текстовый дисплей или сложную анимацию, эти дисплеи помогут вам достичь ваших целей. Не бойтесь экспериментировать и пробовать новые идеи — возможности ограничены только вашим воображением!

Читайте также