Arduino:Примеры/Гайд по использованию 0,96-дюймового OLED-дисплея с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Гайд по использованию 0,96-дюймового OLED-дисплея с Arduino[1]

В этой статье объясняется, как использовать маленький 0,96-дюймовый OLED-дисплей вместе с платой Arduino.

Описание

На то, как выглядит OLED-дисплей, можно посмотреть на фото ниже:

Это очень маленький дисплей, его размеры составляют 25 на 14 мм, а разрешение – 128 на 64 пикселя. Подсветка не требуется. Данная модель – монохромная (т.е. только с черным и белым цветами), но есть и такие, что поддерживают несколько цветов.

Кроме того, этот дисплей использует коммуникацию типа I2C. Это значит, что для коммуникации с Arduino ему нужно всего два контакта.

Подключение контактов

В подключении OLED-дисплея к Arduino нет ничего сложного:

  • Контакт Vin на дисплее – к контакту 5V на Arduino
  • Контакт GND – к контакту GND
  • Контакт SCL – к контакту A5
  • Контакт SDA – к контакту A4

Если вы используете не Uno, а другую модель Arduino, то у нее контакты интерфейса I2C могут быть другими:

Библиотеки

Чтобы управлять OLED-дисплеем, вам понадобятся библиотеки «adafruit_GFX.h» и «adafruit_SSD1306.h».

Установка библиотеки «adafruit_GFX.h»

  • Кликните здесь, чтобы скачать ZIP-архив с библиотекой.
  • Распакуйте этот архив. В итоге у вас должна получиться папка под названием «Adafruit-GFX-Library-master».
  • Переименуйте ее на «Adafruit_GFX_Library». Не забудьте поменять знаки тире на нижние подчеркивания.
  • Переместите папку «Adafruit_GFX_Library» в папку «libraries» IDE Arduino.
  • Перезапустите IDE Arduino.

Установка библиотеки «adafruit_SSD1306»

  • Кликните здесь, чтобы скачать ZIP-архив с библиотекой.
  • Распакуйте этот архив. В итоге у вас должна получиться папка под названием «Adafruit_SSD1306-master».
  • Переименуйте ее на «Adafruit_SSD1306».
  • Переместите папку «Adafruit_SSD1306» в папку «libraries» IDE Arduino.
  • Перезапустите IDE Arduino.

Функции для рисования и печати текста на дисплее

Ниже – несколько функций, которые можно использовать в своих скетчах для написания текста и рисования примитивной графики:

  • display.clearDisplay() – стирает все пиксели
  • display.drawPixel(x,y, color) – помещает пиксель в координаты X и Y
  • display.setTextSize(n) – задает размер шрифта (поддерживаются размеры от «1» до «8»)
  • display.setCursor(x,y) – задает координаты, с которых начнется печать текста
  • display.print(“сообщение”) – печатает символы

Скетч: Отображение на OLED-дисплее данных о температуре и влажности

Цель этого проекта – ознакомить вас с тем, как работает OLED-дисплей. Температура и влажность будут измеряться при помощи датчика DHT11. Если вы слышите о нем впервые, имеет смысл сначала почитать эту статью.

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

  • Один 0,96-дюймовый OLED-дисплей (см. на eBay)
  • Одна плата Arduino (см. на eBay)
  • Один датчик температуры и влажности DHT11 (см. на eBay)
  • Одна макетная плата
  • Один резистор на 10 кОм
  • Провода-перемычки

Схема

Подключите эти компоненты друг к другу, как показано на схеме ниже:

Код

Убедитесь, что установили обе библиотеки для управления OLED-дисплеем – «adafruit_GFX.h» и «adafruit_SSD1306.h». Кроме того, вам понадобится библиотека «DHT».

Установка библиотеки «DHT»

  • Кликните здесь, чтобы скачать ZIP-архив с библиотекой.
  • Распакуйте этот архив. В итоге у вас должна получиться папка под названием «DHT-sensor-library-master».
  • Переименуйте ее на «DHT_sensor_library».
  • Переместите папку «DHT_sensor_library» в папку «libraries» IDE Arduino.
  • Перезапустите IDE Arduino

Затем загрузите на Arduino код, показанный ниже:

/*
 * Автор – Руи Сантос (Rui Santos)
 * Более подробно о проекте на: http://randomnerdtutorials.com
 */
 
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define DHTPIN 2     // контакт, к которому подключаемся 
#define DHTTYPE DHT11   // для датчика DHT11
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

// создаем экземпляр класса для датчика DHT11: 
DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Wire.begin();
  dht.begin(); // инициализируем объект «dht»
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  // инициализируем объект «display» с I2C-адресом «0x3C», для 128x32
  Serial.begin(9600);
}
void displayTempHumid(){
  delay(2000);
  // считывание данных о температуре и влажности 
  // занимает около 250 мс; кроме того, это считывание
  // может запаздывать примерно на 2 секунды 
  // (это очень медленный датчик):
  float h = dht.readHumidity();
  // считываем температуру в градусах Цельсия:
  float t = dht.readTemperature();
  // считываем температуру в градусах Фаренгейта:
  float f = dht.readTemperature(true);

  // проверяем, корректны ли данные, и если нет,
  // то выходим и пробуем снова:
  if (isnan(h) || isnan(t) || isnan(f)) {
    display.clearDisplay();  //  очищаем дисплей
    display.setTextColor(WHITE);  //  задаем цвет 
    display.setTextSize(1);  //  задаем шрифт
    display.setCursor(5,0);  //  задаем координаты курсора
    display.print("Failed to read from DHT sensor!");
    //  "Не удалось прочесть данные с датчика DHT!"
    return;
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Humidity: ");  //  "Влажность: "
  display.print(h);
  display.print(" %\t");
  display.setCursor(0,10);
  display.print("Temperature: ");  //  "Температура: "
  display.print(t);
  display.print(" C"); 
  display.setCursor(0,20);
  display.print("Temperature: ");  //  "Температура: " 
  display.print(f);
  display.print(" F"); 
}
void loop()
{
  displayTempHumid();
  display.display();
}

Демонстрация

После загрузки кода OLED-дисплей начнет работать следующим образом:

См.также

Внешние ссылки