OLED 0.96″ / 1.3″ с энкодером EC11

Девятиконтактная панель OLED + EC11, плата 64.90 × 35 мм; варианты 0.96″ и 1.3″

Меню и настройка устройства энкодером

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает Девятиконтактная панель OLED + EC11, плата 64.90 × 35 мм; варианты 0.96″ и 1.3″

Компактная панель объединяет OLED, поворотный энкодер EC11 с нажатием и две отдельные кнопки BACK и CONFIRM. Она подходит для меню и ручной настройки параметров. Для работы нужен внешний микроконтроллер: контроллер OLED управляет изображением, а EC11 формирует сигналы поворота.

Экран подключается по I²C. Фазы энкодера, его нажатие и две кнопки имеют отдельные сигнальные контакты. Считывать их через адрес OLED нельзя. На схеме энкодера есть подтяжки и RC-цепи; обработка направления и дребезга остаётся задачей программы.

Карточка объединяет два исполнения одной девятиконтактной панели. В актуальном материале TZT для 0.96″ указан SSD1315, для 1.3″ — SSD1306. Эти сведения относятся к показанному референсу. В продаже встречаются внешне похожие ревизии с другими драйверами; размер экрана сам по себе не выбирает библиотеку. Сохраняйте раздельную настройку драйвера для каждой версии.

Идентичную плату под другим торговым именем следует считать вариантом этой панели. Фотореференс и схема: TZT, товар 8256. Плата с четырьмя отдельными кнопками, узкий вертикальный OLED GME64128-02 и TFT-панели с EC11 имеют другое подключение.

OLED светится сам и не требует подсветки. Для первой проверки используйте питание и сигналы 3,3 В, короткие провода и один дисплей на шине. Ответ I²C подтверждает связь по адресу, но не определяет контроллер. При пустом экране проверьте исполнение, адрес, питание, reset-цепь и выбранный драйвер.

Ниже приведены два отдельных полных диагностических скетча. Они показывают текст и выводят сырые состояния органов управления в Serial Monitor. Это проверка подключения, а не готовое меню или счётчик поворотов. API сверены с U8g2 2.37.1 и Arduino-ESP32 3.3.12; компиляция и проверка на физической плате в этой задаче не проводились.

Фотографии: TZT, панель OLED + EC11, товар 8256. Обе версии показаны реальными отдельными фотографиями: 0.96″ и 1.3″. Содержимое экранов, органы управления, контакты, маркировки и водяные знаки источника сохранены. Изменён внешний фон и просветы крепёжных отверстий; подключения подписаны отдельно для каждой версии. Для этих сторонних исходных фотографий разрешение на коммерческое повторное использование не подтверждено. Смена фона не изменяет права на изображение.

Для общей карточки 0.96″ / 1.3″ единая диагональ в числовом фильтре не задана; оба варианта показаны отдельно и относятся к группе «Мини».

Характеристики

Размерная группа
Мини (до 1.6″ включительно)
Варианты диагонали
0.96″ / 1.3″
Контроллер версии 0.96″ в референсе TZT
SSD1315
Контроллер версии 1.3″ в референсе TZT
SSD1306
Интерфейс экрана
I²C; органы управления подключаются отдельными линиями
Контакты разъёма
9
Ширина платы референса
64.9 мм
Высота платы референса
35 мм
Высота сборки с ручкой
23 мм
Энкодер
EC11 с нажатием; 20 импульсов и 20 фиксаций по данным референса
Отдельные кнопки
BACK и CONFIRM; дополнительно нажатие EC11
Питание и логика примера
3.3 В
Питание модуля
В примере питание VCC и все сигналы 3,3 В. На некоторых платах рядом с VCC напечатано 3V3–5V, но схема выбранного референса использует шины и подтяжки 3,3 В. Эта надпись не подтверждает переносимость 5 В на GPIO ESP32.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
VCC3V3ESP32-DevKitC V4 с ESP32-WROOM-32E. Питание 3,3 В; контакт 1 по схеме J1, сверить маркировку своей ревизии.
GNDGNDESP32-DevKitC V4 с ESP32-WROOM-32E. Общая земля.
BAK / BACK / KEY0GPIO32ESP32-DevKitC V4 с ESP32-WROOM-32E. Кнопка BACK; отдельный цифровой вход.
TRB / ENCODER_BGPIO26ESP32-DevKitC V4 с ESP32-WROOM-32E. Фаза B энкодера, не линия I²C.
TRA / ENCODER_AGPIO25ESP32-DevKitC V4 с ESP32-WROOM-32E. Фаза A энкодера, не линия I²C.
PSH / ENCODER_PSHGPIO27ESP32-DevKitC V4 с ESP32-WROOM-32E. Нажатие оси EC11; отдельный вход.
SCL / OLED_SCLGPIO22ESP32-DevKitC V4 с ESP32-WROOM-32E. Тактовая линия OLED; шина 3,3 В.
SDA / OLED_SDAGPIO21ESP32-DevKitC V4 с ESP32-WROOM-32E. Данные OLED; шина 3,3 В.
CON / CONFIRM / KEY1GPIO33ESP32-DevKitC V4 с ESP32-WROOM-32E. Кнопка CONFIRM; отдельный вход.

Подходит для ESP32, Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги подключить девятиконтактную панель OLED 0.96″/1.3″ с EC11, BACK и CONFIRM. Сначала установи вариант экрана и контроллер конкретной ревизии; для актуального референса TZT 8256 это SSD1315 на 0.96″ и SSD1306 на 1.3″. Уточни мою плату и среду. Не объединяй её с TFT EC11, вертикальным GME64128-02 или платой с четырьмя кнопками. Раздели I²C дисплея, две фазы энкодера, его нажатие и кнопки BACK/CONFIRM. Для ESP32-DevKitC V4 используй питание и сигналы 3,3 В, SDA21/SCL22, A25/B26, PSH27, BACK32 и CONFIRM33. Дай зависимости, полный минимальный пример для выбранного драйвера, проверку адреса и обработки дребезга. Не считай эти GPIO универсальными для ESP32-C3/S3/C6. Различай 7-битный адрес Wire и удвоенный адрес в U8g2.setI2CAddress(). Укажи, какие проверки выполнены по исходникам, а какие требуют реальной платы.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро примера
ESP32-DevKitC V4 / ESP32-WROOM-32E; Arduino-ESP32 3.3.12

В Arduino IDE выбрать совместимую классическую ESP32; эти GPIO не переносятся на C3/S3/C6 автоматически.

Библиотека
U8g2 2.37.1

Установить U8g2 через Library Manager; Wire входит в ядро.

Вариант 0.96″
U8G2_SSD1315_128X64_NONAME_F_HW_I2C

Только подтверждённый SSD1315, как в актуальном референсе TZT.

Вариант 1.3″
U8G2_SSD1306_128X64_NONAME_F_HW_I2C

Только подтверждённый SSD1306; похожая версия SH1106 требует своего конструктора.

Адрес
Wire: 0x3C или 0x3D; U8g2: адрес << 1

Скетч требует ровно один ответ в этих двух адресах. ACK не определяет контроллер.

Логика примера
3.3 V

Все подтяжки и входы ESP32 должны оставаться в домене 3,3 В.

ESP32 · вариант 0.96″ · SSD1315

cpp
#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>

// Only ESP32-DevKitC V4 / ESP32-WROOM-32E, supply and signals 3.3 V.
constexpr uint8_t SDA_PIN = 21;
constexpr uint8_t SCL_PIN = 22;
constexpr uint8_t A_PIN = 25;
constexpr uint8_t B_PIN = 26;
constexpr uint8_t PUSH_PIN = 27;
constexpr uint8_t BACK_PIN = 32;
constexpr uint8_t CONFIRM_PIN = 33;
U8G2_SSD1315_128X64_NONAME_F_HW_I2C display(U8G2_R0, U8X8_PIN_NONE, SCL_PIN, SDA_PIN);

void stopWith(const char *message) {
  Serial.println(message);
  while (true) delay(1000);
}

void setup() {
  Serial.begin(115200);
  const uint8_t inputs[] = {A_PIN, B_PIN, PUSH_PIN, BACK_PIN, CONFIRM_PIN};
  for (uint8_t pin : inputs) pinMode(pin, INPUT_PULLUP);
  if (!Wire.begin(SDA_PIN, SCL_PIN, 100000)) stopWith("I2C start failed");
  Wire.setTimeOut(50);
  delay(500);
  uint8_t address = 0;
  uint8_t count = 0;
  for (uint8_t a = 0x3C; a <= 0x3D; ++a) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) { address = a; ++count; }
  }
  if (count != 1) stopWith("Connect one OLED; check power, pins and address");
  // U8g2 uses address * 2 here; Wire above uses the 7-bit address.
  display.setI2CAddress(address << 1);
  display.setBusClock(100000);
  display.begin();
  display.clearBuffer();
  display.setFont(u8g2_font_6x10_tf);
  display.drawStr(0, 12, "SLDV LAB");
  display.drawStr(0, 28, "0.96 SSD1315");
  display.drawFrame(0, 34, 128, 30);
  display.sendBuffer();
  Serial.println("A B PUSH BACK CONFIRM: raw input states");
}

void loop() {
  static uint8_t previous = 0xFF;
  uint8_t state = (digitalRead(A_PIN) << 4) |
                  (digitalRead(B_PIN) << 3) |
                  (digitalRead(PUSH_PIN) << 2) |
                  (digitalRead(BACK_PIN) << 1) |
                  digitalRead(CONFIRM_PIN);
  if (state != previous) {
    Serial.printf("%d %d %d %d %d\n", (state >> 4) & 1,
                  (state >> 3) & 1, (state >> 2) & 1,
                  (state >> 1) & 1, state & 1);
    previous = state;
  }
  delay(1);
}

Полный диагностический скетч только для указанного варианта референса TZT, ESP32-DevKitC V4 и питания 3,3 В. U8g2 2.37.1, Arduino-ESP32 3.3.12; API проверен по исходникам, но компилятором и аппаратно здесь не испытан. RAW A/B не являются счётчиком импульсов; для интерфейса нужны обработка квадратуры и программное подавление дребезга. Контроллер определяется документацией ревизии, не сканером.

ESP32 · вариант 1.3″ · SSD1306

cpp
#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>

// Only ESP32-DevKitC V4 / ESP32-WROOM-32E, supply and signals 3.3 V.
constexpr uint8_t SDA_PIN = 21;
constexpr uint8_t SCL_PIN = 22;
constexpr uint8_t A_PIN = 25;
constexpr uint8_t B_PIN = 26;
constexpr uint8_t PUSH_PIN = 27;
constexpr uint8_t BACK_PIN = 32;
constexpr uint8_t CONFIRM_PIN = 33;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0, U8X8_PIN_NONE, SCL_PIN, SDA_PIN);

void stopWith(const char *message) {
  Serial.println(message);
  while (true) delay(1000);
}

void setup() {
  Serial.begin(115200);
  const uint8_t inputs[] = {A_PIN, B_PIN, PUSH_PIN, BACK_PIN, CONFIRM_PIN};
  for (uint8_t pin : inputs) pinMode(pin, INPUT_PULLUP);
  if (!Wire.begin(SDA_PIN, SCL_PIN, 100000)) stopWith("I2C start failed");
  Wire.setTimeOut(50);
  delay(500);
  uint8_t address = 0;
  uint8_t count = 0;
  for (uint8_t a = 0x3C; a <= 0x3D; ++a) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) { address = a; ++count; }
  }
  if (count != 1) stopWith("Connect one OLED; check power, pins and address");
  // U8g2 uses address * 2 here; Wire above uses the 7-bit address.
  display.setI2CAddress(address << 1);
  display.setBusClock(100000);
  display.begin();
  display.clearBuffer();
  display.setFont(u8g2_font_6x10_tf);
  display.drawStr(0, 12, "SLDV LAB");
  display.drawStr(0, 28, "1.3 SSD1306");
  display.drawFrame(0, 34, 128, 30);
  display.sendBuffer();
  Serial.println("A B PUSH BACK CONFIRM: raw input states");
}

void loop() {
  static uint8_t previous = 0xFF;
  uint8_t state = (digitalRead(A_PIN) << 4) |
                  (digitalRead(B_PIN) << 3) |
                  (digitalRead(PUSH_PIN) << 2) |
                  (digitalRead(BACK_PIN) << 1) |
                  digitalRead(CONFIRM_PIN);
  if (state != previous) {
    Serial.printf("%d %d %d %d %d\n", (state >> 4) & 1,
                  (state >> 3) & 1, (state >> 2) & 1,
                  (state >> 1) & 1, state & 1);
    previous = state;
  }
  delay(1);
}

Полный диагностический скетч только для указанного варианта референса TZT, ESP32-DevKitC V4 и питания 3,3 В. U8g2 2.37.1, Arduino-ESP32 3.3.12; API проверен по исходникам, но компилятором и аппаратно здесь не испытан. RAW A/B не являются счётчиком импульсов; для интерфейса нужны обработка квадратуры и программное подавление дребезга. Контроллер определяется документацией ревизии, не сканером.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты