Lab works 9.Робота з рідкокристалічним дисплеєм

Робота з рідкокристалічним дисплеєм 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);