Экран для самодельной метеостанции я в своё время выбрал по привычке: LCD1602 с переходником I2C, как в первом уроке про LCD. На столе всё выглядело прилично, но дача поправила меня за одну зиму: при минус пятнадцати верхняя строка вяла, цифры проступали по секундам, а подсветка, горевшая круглосуточно, съедала добрую половину бюджета батарейки. Позже я перевёл тот же прибор на OLED и понял: спор о том, какой дисплей лучше, — это спор не о качестве вообще, а о цене света в конкретном проекте.
В этом уроке разберём, чем пиксельный SSD1306 устроен иначе, чем знакомый HD44780: почему у него нет подсветки, куда девается контраст и сколько миллиампер стоит белый кадр. Дальше — таблица-приговор по восьми свойствам, история про выгорание, которую я заработал термостатом в котельной, и дежурный режим в симуляторе, который бережёт и шину, и глаза, и заряд.
Договоримся о базе: подключение по четырём проводам и первый текст на этом дисплее мы уже прошли в уроке про первый SSD1306, поэтому здесь железо останется фоном, а героями будут свойства экрана. И оговорка честности: почти каждое преимущество OLED ниже имеет границу применимости — я буду эти границы называть прямо.
Чёрный пиксель выключен: как OLED устроен внутри
Внутри OLED-матрицы под каждым пикселем сидит крошечный органический диод: подал ток — он засветился, убрал ток — погас. Никакой подсветки-лампы позади матрицы нет, экран сам себе лампа. Отсюда свойство, которое продаёт OLED лучше любого рекламного текста: чёрный пиксель — это диод без тока, он не светится вовсе. Производители ЖК гордятся статическим контрастом в сотни единиц; у OLED та же метрика уходит на порядки выше. Но вам она нужна не на бумаге, а на приборе: фон вокруг цифры виден именно чёрным, а не серым прямоугольником, в котором угадываются тёмные знаки.
Второе следствие той же физики — углы обзора. В ЖК кристаллы зажаты между поляризаторами, и картинка честна фронтально: смотришь сбоку — контраст уплывает, цвета выцветают. У OLED каждый диод излучает сам, и прибор читается почти из любого положения: я вешал дисплей под углом сорок пять градусов на стойке погодной станции — данные читаются с прохода, не подходя. Ручка контраста LCD, которую мы крутили в уроке про V0, от бокового взгляда не спасает: она правит уровни напряжения, а не физику стекла.
И третья мелочь из той же оперы — толщина. Без лампы и рассеивателя модуль 0.96 дюйма — плоская плитка высотой со спичечный коробок. Кажется, косметика, но когда экран уезжает в узкий корпус щитка, именно эти миллиметры решают, закроется ли крышка вообще. Заодно экран становится легче, и на подвижных частях — стрелках, поворотных кронштейнах — его держит один винт.
Типоразмеров на витрине три: 0.96 и 1.3 дюйма в формате 128×64 и вытянутый 0.91 дюйма на 128×32. Встречаются и двухцветные модули: верхняя треть горит жёлтым, остальные строки — голубым; для шапки прибора это красиво, но помните, что это не два независимых слоя, а матрица с жёстко размеченной по высоте зоной. Мелким шрифтом 6×8 на 128×64 помещается 21 символ в строке и восемь строк — то есть уже не индикатор, а экран прибора: таблица из шести значений, журнал событий, крупная цифра с подписью.
Миллиамперы: где OLED выигрывает, а где платит
Теперь деньги. LCD1602 с переходником тратит на подсветку двадцать-тридцать миллиампер всегда, и выключить её из скетча нельзя — только перерезать дорожку или ограничить резистором; логика добавляет ещё пару миллиампер. У OLED счёт идёт иначе: потребление пропорционально числу горящих пикселей. Тёмный экран стоит единицы миллиампер, обычный дашборд с шапкой и парой цифр — порядка пяти-десяти, а кадр, залитый белым целиком, — уже пятнадцать-двадцать пять. Вилку я даю намеренно: точное значение зависит от выставленной яркости и от партии матрицы.
Из этого следует правило, которое я вывел на солнечном датчике температуры: OLED выгоден там, где экран тёмный большую часть времени. Строка данных раз в минуту батарейке почти ничего не стоит. И наоборот: прибор с постоянно светящимся полноэкранным интерфейсом теряет преимущество, а местами уходит в минус — лампа честнее пачки горящих пикселей. Считайте не дисплей как абстракцию, а вашу конкретную картинку: сколько пикселей в ней горит и как долго.
На батарейном питании работает и дежурный цикл: показываем данные три секунды, гасим экран на десять, будим кнопкой. Доля светящегося времени падает вчетверо, и вместе с ней падает средний ток. Схему такого цикла мы соберём в симуляторе ниже, а тайминг без delay возьмём из урока про millis — там разложено, почему паузы в loop стоят две строки, а не блокируют всё подряд.
Прикинем на батарейке. Питание от 18650 через стабилизатор — около двух ампер-часов. Прибор с постоянно горящей подсветкой LCD1602 съедает его за трое суток: тридцать миллиампер, умноженные на двадцать четыре часа. Тот же прибор на OLED с дежурным циклом из симулятора ниже держит средний ток в пределах пяти-семи миллиампер — это уже десять-двенадцать суток на том же аккумуляторе, без единой аппаратной хитрости. Я специально считаю в сутках, а не в часах: батарейный прибор оценивается долями суток, и разница между «показывать всё время» и «показывать десятую часть» — это разница между подзарядкой по выходным и раз в месяц.
| Свойство | OLED SSD1306 128x64 | LCD1602 с I2C |
|---|---|---|
| Свет | Каждый пиксель светится сам, подсветки нет | Подсветка-лампа горит всегда |
| Контраст | Чёрный — выключенный пиксель; статический контраст выше ЖК на порядки | Контраст задаётся напряжением V0 и зависит от угла взгляда |
| Потребление | Тёмный экран — единицы мА, весь кадр белым — 15–25 мА | Логика 1–2 мА плюс подсветка 20–30 мА постоянно |
| Скорость | Пиксель переключается за микросекунды — анимации без смазывания | Кристаллы инертны: на быстрых сменах кадра тянется след |
| Холод | Паспорт у модулей встречается до -40 °C | Кристаллы густеют; у моего HD44780 паспорт 0…+50 °C |
| Солнце | Собственное свечение меркнет — картинку заливает засветкой | С яркой подсветкой читается лучше |
| Память платы | Буфер 1024 байта — половина SRAM Uno | Буфера в ОЗУ нет, знакоместа держит сам контроллер |
| Слабое место | Выгорает при статичной картинке месяцами | Тускнеет подсветка за годы |
Скорость, холод и солнце: границы применимости
Скорость. Органический диод включается и гаснет за микросекунды; жидкие кристаллы перекладываются за десятки миллисекунд — они вязкие, это не лампочка, а плёнка между стёклами. На статичных цифрах разницы вы не увидите, но как только на экране появится движение — бегущая строка, график, анимация из урока про графику, — LCD потянет за кадром серый след, а OLED отработает чётко. По этой причине часы с плавной секундной стрелкой я делаю только на пиксельных экранах.
Холод и солнце — по минусу на каждую сторону. Кристаллы LCD густеют на морозе: при минус пятнадцати мой уличный экран цифры не терял, но они проступали лениво, как сквозь сироп; у типовых HD44780 паспорт начинается с нуля. У OLED паспорт встречается до минус сорока, и поведение на холоде не меняется. Зато на прямом солнце OLED тонет: собственное свечение меркнет рядом с дневным светом, и картинку заливает засветкой. Щиток на воротах соседа смотрит фронтально на юг — там OLED оказался моей ошибкой, пришлось переезжать на LCD с яркой подсветкой.
Итоговое правило выбора у меня такое: прибор в помещении, батарейка, много зон и анимация — берём OLED; улица с прямым солнцем и розетка в шаге — LCD. Когда сомневаюсь, беру OLED 128x64: 21 символ на 8 строк мелким шрифтом против 32 знакомест у LCD1602 — по объёму информации он обходит шестнадцатисимвольный дисплей в два с лишним раза, а показания с DHT11 из урока про DHT11 этому объёму только радуются.
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h> Adafruit_SSD1306 display(128, 64, &Wire, -1); unsigned long posledneeKasanie = 0; // кнопка на D2, вторым контактом на GND void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); pinMode(2, INPUT_PULLUP); posledneeKasanie = millis();} void loop() { if (digitalRead(2) == LOW) { posledneeKasanie = millis(); display.ssd1306_command(SSD1306_DISPLAYON); display.dim(false); } if (millis() - posledneeKasanie > 60000UL) { display.dim(true); // через минуту — приглушить } if (millis() - posledneeKasanie > 300000UL) { display.ssd1306_command(SSD1306_DISPLAYOFF); // через пять минут — погасить }}- OLED-пиксель светится сам: чёрный — выключенный диод, подсветки нет, контраст выше любого ЖК
- Потребление пропорционально картинке: тёмный экран — единицы мА, полный белый кадр — 15–25 мА; LCD1602 ест 20–30 мА подсветкой всегда
- Пиксель переключается за микросекунды — анимации без смазывания; ЖК тянется за кадром
- OLED читается под любым углом, но тонет на прямом солнце; LCD наоборот: солнце держит, мороз не любит
- Статичная картинка месяцами выжигает пиксели — таймер бездействия с dim и DISPLAYOFF обязателен
- Считайте конкретную картину: сколько пикселей горит и как долго — от этого, а не от названия технологии, зависит ток
- 1. Сколько примерно ест SSD1306 128x64 при полностью белом кадре?
- 2. Почему у OLED контраст «бесконечный» по меркам ЖК?
- 3. Что сделает LCD1602 в гараже при минус пятнадцати?
- 4. Какой уход нужен OLED, который месяцами показывает одну и ту же цифру?
Что с этим делать на практике. Откройте таблицу выше и честно пройдитесь по вашему проекту: сколько пикселей горит одновременно, стоит ли прибор под солнцем, живёт ли он на батарейке месяцами. Три ответа из трёх в пользу OLED — берите не думая; хотя бы один в пользу LCD — экономьте себе зиму переделок, как сделал это я на воротах соседа.
Дальше по разделу — схема подключения с распиновкой и подтяжками, затем адреса и сканер I2C: путь от сравнения технологий до работающего на макетке экрана. А скетч дежурного цикла заберите в свою библиотеку: он один и тот же для метеостанции, часов и показометра на гаражной двери — меняются только пороги минут.
Проверить сравнение на живом приборе проще, чем кажется: подключите один и тот же датчик к двум макеткам — с LCD из раздела про LCD и с OLED из этого раздела — и погоните обе версии день на кухне. Вы увидите глазами то, что таблица показывает строчками: угол взгляда, реакцию на солнце из окна, привычность крупного шрифта. Пятнадцать минут сборки — и спор о том, что лучше, закрывается в вашем проекте не мнением из интернета, а вашим измерением.
Частые вопросы по теме урока
- Сколько примерно ест SSD1306 128x64 при полностью белом кадре?
- Ток растёт с числом горящих пикселей: тёмный экран — единицы мА, залитый белый — пятнадцать-двадцать пять; вилка зависит от яркости и партии матрицы. 15–25 мА
- Почему у OLED контраст «бесконечный» по меркам ЖК?
- Подсветки нет: каждый диод светится сам, чёрное — отсутствие тока. У ЖК лампа горит всегда, кристаллы лишь перекрывают её, и чёрный остаётся серым. Чёрный пиксель физически выключен и не светится
- Что сделает LCD1602 в гараже при минус пятнадцати?
- Жидкие кристаллы вязнут на морозе; у типовых модулей паспорт от 0 °C. OLED паспортно живёт до -40 °C и на холоде не меняет поведение. Цифры станут вялыми и проступают медленно: кристаллы густеют
- Какой уход нужен OLED, который месяцами показывает одну и ту же цифру?
- Пиксели стареют неравномерно, и статичная картинка проступает призраком. Лечится гашением по таймеру бездействия и пробуждением по событию. Таймер бездействия — гашение или dim, когда данные не меняются