OLED 0.96″ с четырьмя кнопками

Восьмиконтактная плата OLED 128×64 с кнопками K1–K4; референс aitendo M096P4W1315K4A

Показания и меню с четырьмя кнопками ввода

Автор: SLDV LAB

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

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

О МОДУЛЕ

Что делает Восьмиконтактная плата OLED 128×64 с кнопками K1–K4; референс aitendo M096P4W1315K4A

Небольшой OLED объединён с четырьмя отдельными кнопками. Такой модуль удобен для вывода показаний, выбора пунктов меню и ручной настройки устройства. Кнопки отмечены стрелками вверх и вниз, символами # и *; их функции задаёт программа.

У платы восемь контактов: четыре обслуживают питание и I²C экрана, остальные выведены как K4, K3, K2 и K1. Четыре кнопки не образуют клавиатуру 4×4 и не передают нажатия через адрес OLED. Для их чтения нужны отдельные цифровые входы микроконтроллера.

Показанный белый вариант визуально совпадает с опубликованным фотореференсом aitendo M096P4W1315K4A и HobbyElectronica HE1317. Для этих референсов заявлены SSD1315, 128×64 и питание 3,3 В. SiTai&SH — торговое имя в присланной карточке; одинаковая плата под другой маркой относится к этому же исполнению. Контроллер или напряжение нельзя переносить на изменённую ревизию только по похожему внешнему виду.

OLED имеет собственное свечение и не требует подсветки. В минимальном примере используются питание и сигналы 3,3 В от ESP32-DevKitC V4. Экран выводит тестовое изображение, а состояния K1–K4 выводятся в Serial Monitor. Пример показывает сырые уровни и не назначает кнопкам действия. Для меню добавьте подавление дребезга и обработку нажатий.

API сверены с U8g2 2.37.1 и Arduino-ESP32 3.3.12. Пример не компилировался и не испытывался на физической плате в этой задаче. Размер активной области именно этой сборки не установлен; размер PCB взят у именованного референса aitendo.

Фотография: aitendo M096P4W1315K4A. Совпадающий исходный вид платы сохранён вместе с изображением экрана, кнопками, всеми восемью контактами и маркировками. Изменён только внешний фон и просветы крепёжных отверстий; на изображение подключения добавлены указатели контактов. Для этих сторонних исходных фотографий разрешение на коммерческое повторное использование не подтверждено. Смена фона не изменяет права на изображение.

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

Размерная группа
Мини (до 1.6″ включительно)
Диагональ
0.96 дюйма
Разрешение референса
128 × 64 пикселя
Контроллер референса
SSD1315
Интерфейс экрана
I²C
Отдельные кнопки
4
Контакты разъёма
8
Размер PCB референса aitendo
44.6 × 27.5 мм
Питание и логика примера
3.3 В
Питание модуля
3,3 В для выбранного референса M096P4W1315K4A и всех сигналов в примере. Питание 5 В для неизвестной ревизии не подтверждено.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
GNDGNDESP32-DevKitC V4 с ESP32-WROOM-32E. Общая земля; первый слева при виде на экран с разъёмом сверху.
VCC3V3ESP32-DevKitC V4 с ESP32-WROOM-32E. Питание 3,3 В; второй контакт.
SCLGPIO22ESP32-DevKitC V4 с ESP32-WROOM-32E. Тактирование OLED I²C.
SDAGPIO21ESP32-DevKitC V4 с ESP32-WROOM-32E. Данные OLED I²C.
K4GPIO25ESP32-DevKitC V4 с ESP32-WROOM-32E. Отдельный цифровой вход K4.
K3GPIO26ESP32-DevKitC V4 с ESP32-WROOM-32E. Отдельный цифровой вход K3.
K2GPIO27ESP32-DevKitC V4 с ESP32-WROOM-32E. Отдельный цифровой вход K2.
K1GPIO32ESP32-DevKitC V4 с ESP32-WROOM-32E. Отдельный цифровой вход K1.

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

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

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

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

Помоги подключить OLED 0.96″ 128×64 с четырьмя отдельными кнопками K1–K4. Референс: aitendo M096P4W1315K4A / HobbyElectronica HE1317, SSD1315, восемь контактов GND–VCC–SCL–SDA–K4–K3–K2–K1. Сначала уточни мою плату и проверь, совпадает ли ревизия с референсом. Для ESP32-DevKitC V4 используй питание и сигналы 3,3 В, SDA21/SCL22, K4=25, K3=26, K2=27, K1=32. Подготовь зависимости, минимальный вывод текста, чтение кнопок, подавление дребезга и шаги проверки. Не считай это матрицей 4×4 или I²C-клавиатурой. Не определяй контроллер сканером и не переноси GPIO на другую ESP32.

Библиотеки

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

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

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

Wire входит в Arduino-ESP32 3.3.12.

Контроллер референса
U8G2_SSD1315_128X64_NONAME_F_HW_I2C

Использовать только для подтверждённого SSD1315.

I²C
SDA21 / SCL22 / 100 kHz

Только выбранная ESP32-DevKitC V4; шина 3,3 В.

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

В примере требуется ровно один ответ; ACK не определяет драйвер.

Кнопки
K4=25; K3=26; K2=27; K1=32

Четыре цифровых входа; пример выводит сырые уровни и не предполагает готовое подавление дребезга.

ESP32 · SSD1315 и четыре отдельных входа

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

// ESP32-DevKitC V4 / ESP32-WROOM-32E only; all signals and supply 3.3 V.
constexpr uint8_t SDA_PIN = 21, SCL_PIN = 22;
constexpr uint8_t K4 = 25, K3 = 26, K2 = 27, K1 = 32;
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 keys[] = {K1, K2, K3, K4};
  for (uint8_t pin : keys) 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, 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");
  display.setI2CAddress(address << 1); // U8g2: 7-bit address multiplied by 2.
  display.setBusClock(100000);
  display.begin();
  display.clearBuffer();
  display.setFont(u8g2_font_6x10_tf);
  display.drawStr(0, 12, "SLDV LAB");
  display.drawStr(0, 28, "SSD1315 / 4 keys");
  display.drawFrame(0, 34, 128, 30);
  display.sendBuffer();
  Serial.println("K1 K2 K3 K4: raw input states");
}

void loop() {
  static uint8_t previous = 0xFF;
  uint8_t state = (digitalRead(K1) << 3) | (digitalRead(K2) << 2) |
                  (digitalRead(K3) << 1) | digitalRead(K4);
  if (state != previous) {
    Serial.printf("%d %d %d %d\n", (state >> 3) & 1,
                  (state >> 2) & 1, (state >> 1) & 1, state & 1);
    previous = state;
  }
  delay(1);
}

Полный диагностический скетч для именованного референса, ESP32-DevKitC V4, U8g2 2.37.1 и Arduino-ESP32 3.3.12. API проверен по исходникам; компиляция и аппаратная проверка не проводились. Перед включением сверить питание и подписи своей ревизии.

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

Все проекты

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

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