Работа с жидкокристаллическим дисплеем OLED 128x64 I2C (0.96 дюйма)

Цель работы

Научиться использовать жидкокристаллический дисплей OLED 0.96 дюйма с платами типа Arduino

Задачи работы

  1. Установить библиотеку для работы с дисплеем OLED 128x64 I2C (контроллер SSD1306)
  2. Собрать установку и разработать скетч для Arduino для вывода на ЖК дисплей показаний датчиков давления BMP180 и влажности DHT

Инструменты для выполения работы

  1. Компьютер с подключением к сети Internet
  2. Плата NodeMCU ESP-12e V3 с USB интерфейсом

Теоретическая часть

В OLED (Organic Light-Emitting Diode) дисплеях используется технология в которой светодиоды сами излучают свет без дополнительного подсвечивания как например в LCD дисплеях. Дисплей OLED состоит из тонкой многослойной органической пленки, помещенной между анодом и катодом. OLED обладает высоким потенциалом применения практически для всех типов дисплеев и рассматривается в качестве конечной технологии для следующего поколения плоских дисплеев.

Особенности OLED I2C дисплея
Не требуется подсветка дисплея
Высокое разрешение: 128x64 пикселей.
Угол обзора: больше 160 градусов.
Полностью совместим с Arduino, контроллерами 51 серии,  MSP430 серии, STM32 / 2, КСО IC и т.д.
Ультра-низкое энергопотребление: при полном свечении экрана 0.08W
Рабочее напряжение: 3V ~ 5 В постоянного тока.
Рабочая температура: -30 C ~ 70 C.
I2C / IIC интерфейс, нужно только 2 провода.
Драйвер IC: SSD1306.
Размер платы: 2.7см х 2.8см.
Размер дисплея: 2.7см х 1,95см  (0,96″ дюйма)

Подключение OLED I2C дисплея
VCC —– +5v  (+5 вольт)
GND —–  GND (земля)
SDA —– pin SDA  (pin A4 для Arduino nano V3; pin D2 для NodeMCU V3)
SCL —–  pin SCL (pin A5 для Arduino nano V3; pin D1 для NodeMCU  V3)

Библиотеки для OLED I2C дисплея
Для работы с дисплеем OLED I2C существуют библиотеки от разных авторов, вот несколько:
1. от Adafruit (требуется установка обеих библиотек) - Adafruit GFX и Adafruit SSD1306
2. от Oscar Liang - OzOLED
3. "Seeed OLED Display 128*64 library" от Seeed-Studio.
Мы будем использовать последнюю (п.3).

Выполнение работы

Установка библиотек для работы с датчиками и дисплеем

Создаем новый скетч и сохраняем его с названием OledAndSensors. Проверяем, правильно ли выбрана плата и порт.
Скачиваем архив с библиотекой для работы с дисплеем по ссылке: https://github.com/Seeed-Studio/OLED_Display_128X64/archive/master.zip
Устанавливаем библиотеку через менеджер библиотек: выбираем пункт меню "Скетч -> Управление библиотеками -> Добавить .ZIP библиотеку" и находим скачанный архив OLED_Display_128X64-master.zip.
Загружаем библиотеки для работы с датчиками BMP180 ("Adafruit BMP085 Unified"), DHT ("DHT sensor library") через менеджер библиотек. Подключаем библиотеку для работы с дисплеем "Grove - OLED Display 0.96".

Сборка установки и разработка скетча для Arduino

Подключаем датчики DHT и BMP180 как это делалось в предыдущих работах.
Подключаем OLED дисплей к I2C пинам платы NodeMCU. Так как датчик BMP180 так же подключается по шине I2C - выполняем их параллельное подключение, т.е. к тем же контактам.

В функции setup() инициальзируем дисплей, очищаем его и выводим текст приветствия.

  // Init OLED Display
  SeeedOled.sendCommand(0xA8);  // Multiplex ratio
  SeeedOled.sendCommand(0x3F);  // ^ от 16 до 64
  SeeedOled.sendCommand(0xD3);  // Смещение изображения на дисплее (Offset)
  SeeedOled.sendCommand(0x00);  // ^ Offset
  SeeedOled.sendCommand(0x40);  // Установка начальной строки в RAM
  SeeedOled.sendCommand(0xA1);  // Развертка: А0 - справа/налево; А1 - слева/направо.
  SeeedOled.sendCommand(0xC8);  // 0хC8 – данные выводятся построчно сверху вниз, 0хС0 – снизу вверх
  SeeedOled.sendCommand(0xDA);  // Конфигурация COM
  SeeedOled.sendCommand(0x12);  // ^
  SeeedOled.sendCommand(0x81);  // Set Brightness
  SeeedOled.sendCommand(0x7F);  // ^ Brightness
  SeeedOled.sendCommand(0xA4);  // output ram to display
  SeeedOled.sendCommand(0xA6);  // none inverted normal display mode
  SeeedOled.sendCommand(0xD5);  // Частота обновления экрана
  SeeedOled.sendCommand(0x80);  // ^ Частота
  SeeedOled.sendCommand(0x8D);  // Управление внутренним преобразователем
  SeeedOled.sendCommand(0x14);  // ^ 0х10 - отклычить (Vcc внешнее); 0х14 - включить (внутренний DC/DC)
  SeeedOled.sendCommand(0xAF);  // Включить дисплей
  
  SeeedOled.init();  //initialze SEEED OLED display

  SeeedOled.clearDisplay();          //clear the screen and set start position to top left corner
  SeeedOled.setNormalDisplay();      //Set display to normal mode (i.e non-inverse mode)
  SeeedOled.setPageMode();           //Set addressing mode to Page Mode
  SeeedOled.setTextXY(0,0);           //Set the cursor to Xth Page, Yth Column  
  SeeedOled.putString("Sensors data");      // здесь можете написать ваш текст

Далее в функции loop() считываем значение давления и температуры с датчика BMP180, выводим их используя функции позиционирования начала вывода и собственно вывода строки на дисплей, пример (значения с датчиков необходимо получить ранее):

SeeedOled.setTextXY(2,0);
SeeedOled.putString("[BMP180]");
SeeedOled.setTextXY(3,0);
SeeedOled.putString( ("Pressure:" + String(event.pressure)).c_str() );
SeeedOled.setTextXY(4,0);
SeeedOled.putString( ("Temp, *C: " + String(temperature)).c_str() );

Считываем значение влажности и температуры с датчика DHT, выводим их аналогично данным с датчика BMP180, только ниже.

Добавляем задержку

delay(1000);
 
ФОТО СХЕМЫ






 
 
КОД СКЕТЧА