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);