ESP32-C6 LCD 0.96 Mini с microSD

Не указан; GNPE — маркировка продавца · ESP32-C6-LCD-0.96 (Mini, USB-C, microSD)

Компактная плата ESP32-C6 с цветным экраном 160×80, USB-C и слотом microSD для небольших интерфейсов и индикаторов.

Автор: SLDV LAB

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

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

О МОДУЛЕ

Что делает ESP32-C6-LCD-0.96 (Mini, USB-C, microSD)

ESP32-C6 LCD 0.96 Mini объединяет микроконтроллер, маленький цветной экран и слот microSD. Внешний дисплей и отдельный адаптер карты для первых опытов не нужны. Плата подходит для компактных индикаторов состояния, сетевых мини-панелей и простых графических интерфейсов; детализация интерфейса ограничена небольшой площадью экрана.

В названии объявления продавца указан ST7789, однако схема ESP32-C6-LCD-0.96 обозначает экран как ST7735, а исходный код содержит инициализацию ST7735/ST7735S. Схема и код проверены непосредственно в архиве по ссылке из объявления продавца; они совпадают с приведённой копией исходников. Имя файла Display_ST7789.h само по себе не доказывает модель контроллера. Настройки этой карточки относятся именно к схеме и исходникам в документации. Перед использованием на внешне похожей плате нужно сверить исполнение.

Выбранное исполнение No-SD Card означает комплект без карты памяти: сам слот присутствует. Надпись C3 на керамической антенне не обозначает модель процессора; по пояснению продавца это маркировка партии антенны. GNPE показана как марка продавца, а изготовитель платы отдельно не установлен. Номер аппаратной ревизии в доступных источниках не подтверждён; документальная версия карточки привязана к пакету продавца и исходникам commit 971a504.

LCD и microSD делят одну SPI-шину и используют разные CS. Их линии заняты встроенными устройствами; внешнюю периферию подключают к действительно выведенным площадкам. Уровни GPIO — 3.3 В. Входы ESP32-C6 не рассчитаны на прямой сигнал 5 В. Часть выводов влияет на начальную загрузку, поэтому внешняя схема не должна принудительно менять их состояние при включении.

На схеме нет зарядного устройства для аккумулятора, аккумуляторного разъёма, датчика движения, аудиотракта или внешней PSRAM. USB используется для питания, прошивки и последовательной связи через USB Serial/JTAG. Это не универсальный USB-OTG-контроллер. Беспроводные возможности принадлежат ESP32-C6; для Matter/Thread/Zigbee нужна подходящая прошивка и инфраструктура.

Первый пример проверяет заливку экрана и при наличии карты безопасно проверяет её подключение. Он не записывает файлы и не запрашивает форматирование. Полноценный интерфейс LVGL требует настройки аппаратного порта дисплея; одной установки LVGL недостаточно. Пример проверен по API и синтаксису, но не испытан на физической плате.

Документация:

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

Микроконтроллер
ESP32-C6FH4 (по схеме платы)
Процессор
Основное ядро RISC-V до 160 МГц; дополнительное малопотребляющее ядро LP до 20 МГц
Flash
4 МБ
Внутренняя SRAM
512 КБ HP SRAM + 16 КБ LP SRAM; это не PSRAM
PSRAM
Не предусмотрена в схеме
Экран
Цветной LCD, 0.96 дюйма, 160×80 пикселей; без сенсорного слоя
Контроллер LCD
ST7735 в схеме; ST7735/ST7735S в инициализации. Название продавца ST7789 с этим не совпадает.
Карта памяти
Слот microSD, SPI; в выбранном комплекте карта отсутствует
Встроенная SPI-шина
LCD и microSD: SCLK GPIO7, MOSI GPIO6; MISO карты GPIO5, отдельные CS
Выведенные GPIO
9 по схеме: 0, 1, 2, 8, 16, 17, 18, 19, 20. GPIO8 — загрузочный strap; 16/17 также UART0.
USB
USB-C; встроенный USB Serial/JTAG на GPIO12/13, без отдельного USB–UART-моста в схеме
Радиосвязь
Wi-Fi 6 2.4 ГГц, Bluetooth LE, IEEE 802.15.4; без Bluetooth Classic
Уровни логики
3.3 В
Аккумулятор
Зарядка и аккумуляторный разъём в схеме не предусмотрены
Интерфейс
SPI, UART, I²C, Wi-Fi, Bluetooth
Питание модуля
Питание 5 В от USB-C; логические уровни GPIO 3.3 В. Не подавать 5 В на GPIO/3V3. Альтернативное питание через площадки требует проверки схемы; не подключать несколько источников одновременно.

ПРАКТИКА

Подключение

Схема подключения
Контакт модуляКонтакт платыНазначение
LCD SCLKGPIO7Встроенное соединение; общая линия тактирования с microSD.
LCD MOSI / SDAGPIO6Встроенная SPI-линия данных; общая с MOSI microSD. Надпись SDA здесь не означает I²C.
LCD CSGPIO14Отдельный выбор дисплея; активный LOW.
LCD DCGPIO15Выбор команды/данных. GPIO15 участвует в strapping; не менять аппаратную обвязку.
LCD RESETGPIO21Сброс дисплея, не кнопка сброса ESP32-C6.
LCD BLGPIO3Управление подсветкой через транзистор; HIGH включает подсветку в примере.
microSD CLKGPIO7Общая SPI-шина с LCD.
microSD MOSIGPIO6Общая SPI-шина с LCD.
microSD MISOGPIO5Чтение карты; GPIO5 также strapping pin ESP32-C6.
microSD CSGPIO4Отдельный CS карты. Держать HIGH, пока карта не выбрана; GPIO4 также strapping pin.
BOOTGPIO9Кнопка на землю, активный LOW. Для режима загрузки при отпускании RST нужны GPIO9=LOW и GPIO8=HIGH; внешняя схема не должна тянуть GPIO8 вниз.
USB D− / D+GPIO12 / GPIO13Заняты встроенным USB Serial/JTAG; не использовать как свободные линии во время USB-связи.
UART0 TX / RXGPIO16 / GPIO17Выведены по схеме; TX имеет последовательный резистор 499 Ом.
3V3 / USB VCC / GNDПлощадки питания платы3.3 В / VBUS USB / общая земля. Не путать VBUS с 3V3; физическую ориентацию сверить по распиновке.

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

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

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

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

Помоги интегрировать ESP32-C6 LCD 0.96 Mini с microSD в мой проект. Сначала уточни задачу, среду, точное исполнение и фотографию платы. Сверь её с документацией продавца ESP32-C6-LCD-0.96: название объявления ST7789 конфликтует с обозначением ST7735 в схеме и ST7735/ST7735S в инициализации. Не подменяй её Waveshare ESP32-C6-LCD-1.47 или общей платой ESP32.

Для документированного исполнения: LCD SCLK=7, MOSI=6, CS=14, DC=15, RST=21, BL=3; microSD SCLK=7, MOSI=6, MISO=5, CS=4. SPI общая. Показанный режим LCD: 160×80, MADCTL 0xA8, смещения 1/26, RGB565, инверсия включена. BOOT=9; встроенный USB занимает 12/13. Питание от USB-C 5 В, GPIO 3.3 В. Не используй неизвестные выводы и не обещай зарядку аккумулятора.

Подготовь подключение выбранной внешней периферии, зависимости и полный минимальный пример. Для первых шагов отдели проверку экрана от чтения SD. Удерживай невыбранный CS в HIGH, учитывай загрузочные выводы, проверяй ошибки SPI/SD, не форматируй карту автоматически и не записывай пользовательские файлы без необходимости. Объясни проверку цветов, ориентации, отсутствия карты и режима прошивки. Явно отметь, что проверено по исходникам, что компилировалось и что испытано на реальном устройстве.

Библиотеки

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

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

Среда / пакет
Arduino IDE 2.x / esp32 by Espressif Systems 3.3.2

API приведённого примера сверено с тегом Arduino-ESP32 3.3.2. Установите пакет через менеджер плат.

Плата
ESP32C6 Dev Module

Выбор Tools → Board. Это универсальная цель ESP32-C6; встроенный LCD не настраивается ею автоматически.

USB CDC On Boot
Enabled

Serial в примере нужен через встроенный USB Serial/JTAG. Используйте кабель USB-C с передачей данных.

Flash Size
4MB (32Mb)

Соответствует ESP32-C6FH4 и схеме этого исполнения. PSRAM на плате нет; у ESP32C6 Dev Module в пакете 3.3.2 отдельного пункта PSRAM нет.

Serial Monitor
115200

В мониторе отображаются обнаруженный чип, flash и результат проверки SD.

SPI / LCD / SD
SCLK=7, MOSI=6, MISO=5; LCD_CS=14; SD_CS=4

Общая шина, отдельные CS. Порядок аргументов SPI.begin: SCLK, MISO, MOSI.

LCD control
DC=15, RST=21, BL=3

Подсветка включается HIGH. В приведённом примере используется простое управление без PWM.

Режим LCD
ST7735; 160×80; MADCTL=0xA8; offsets=1,26; RGB565

Инициализация по схеме и исходнику исполнения 0.96. Не выбирать ST7789 только из названия объявления.

Частоты первого теста
LCD 10 MHz; SD 4 MHz; SPI mode 0

Консервативные значения примера, а не максимальные частоты платы.

Безопасный mount SD
SD.begin(4, SPI, 4000000, "/sd", 5, false)

Последний false запрещает автоматическое форматирование. Карта необязательна; при ошибке тест LCD продолжается.

Arduino: полный тест LCD и безопасная проверка microSD

cpp
// ESP32-C6-LCD-0.96: 160x80 landscape, ST7735 initialization.
// Arduino-ESP32 3.3.2 API; ESP32C6 Dev Module; USB CDC On Boot: Enabled.
// Source pin/initialization reference: spotpear37/ESP32-C6-0.96,
// commit 971a5048d047d471e38127cd2d2933460ca5d30e.
// No third-party libraries. No SD writes or formatting. Not tested on hardware.
#include <Arduino.h>
#include <SPI.h>
#include <SD.h>
#include <initializer_list>

constexpr int LCD_CS = 14, LCD_DC = 15, LCD_RST = 21, LCD_BL = 3;
constexpr int SD_CS = 4, SPI_MISO = 5, SPI_MOSI = 6, SPI_SCLK = 7;
constexpr uint16_t WIDTH = 160, HEIGHT = 80, X_OFFSET = 1, Y_OFFSET = 26;
constexpr uint32_t LCD_HZ = 10000000, SD_HZ = 4000000;

void command(uint8_t cmd, std::initializer_list<uint8_t> bytes) {
  SPI.beginTransaction(SPISettings(LCD_HZ, MSBFIRST, SPI_MODE0));
  digitalWrite(LCD_CS, LOW);
  digitalWrite(LCD_DC, LOW);
  SPI.transfer(cmd);
  digitalWrite(LCD_DC, HIGH);
  for (uint8_t b : bytes) SPI.transfer(b);
  digitalWrite(LCD_CS, HIGH);
  SPI.endTransaction();
}

void initDisplay() {
  digitalWrite(LCD_RST, HIGH); delay(50);
  digitalWrite(LCD_RST, LOW);  delay(50);
  digitalWrite(LCD_RST, HIGH); delay(50);
  command(0x11, {}); delay(120);             // Sleep out.
  command(0x36, {0xA8});                // 160x80 landscape/BGR order.
  command(0xB1, {0x01, 0x2C, 0x2D});
  command(0xB2, {0x01, 0x2C, 0x2D});
  command(0xB3, {0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D});
  command(0xB4, {0x07});
  command(0x21, {});                       // Inversion on for this panel.
  command(0xC0, {0xA2, 0x02, 0x84});
  command(0xC1, {0xC5});
  command(0xC2, {0x0A, 0x00});
  command(0xC3, {0x8A, 0x2A});
  command(0xC4, {0x8A, 0xEE});
  command(0xC5, {0x0E});
  command(0xE0, {0x0F, 0x1A, 0x0F, 0x18, 0x2F, 0x28, 0x20, 0x22,
                 0x1F, 0x1B, 0x23, 0x37, 0x00, 0x07, 0x02, 0x10});
  command(0xE1, {0x0F, 0x1B, 0x0F, 0x17, 0x33, 0x2C, 0x29, 0x2E,
                 0x30, 0x30, 0x39, 0x3F, 0x00, 0x07, 0x03, 0x10});
  command(0xF0, {0x01});
  command(0xF6, {0x00});
  command(0x3A, {0x05});               // RGB565.
  command(0x29, {}); delay(20);            // Display on.
}

void fillScreen(uint16_t rgb565) {
  const uint16_t x0 = X_OFFSET, x1 = X_OFFSET + WIDTH - 1;
  const uint16_t y0 = Y_OFFSET, y1 = Y_OFFSET + HEIGHT - 1;
  command(0x2A, {uint8_t(x0 >> 8), uint8_t(x0), uint8_t(x1 >> 8), uint8_t(x1)});
  command(0x2B, {uint8_t(y0 >> 8), uint8_t(y0), uint8_t(y1 >> 8), uint8_t(y1)});
  command(0x2C, {});
  SPI.beginTransaction(SPISettings(LCD_HZ, MSBFIRST, SPI_MODE0));
  digitalWrite(LCD_CS, LOW);
  digitalWrite(LCD_DC, HIGH);
  for (uint32_t i = 0; i < uint32_t(WIDTH) * HEIGHT; ++i) {
    SPI.transfer(uint8_t(rgb565 >> 8));
    SPI.transfer(uint8_t(rgb565));
  }
  digitalWrite(LCD_CS, HIGH);
  SPI.endTransaction();
}

bool displayReady = false;
void setup() {
  Serial.begin(115200);
  const uint32_t started = millis();
  while (!Serial && millis() - started < 2000) delay(10);
  for (int pin : {LCD_CS, LCD_DC, LCD_RST, LCD_BL, SD_CS}) pinMode(pin, OUTPUT);
  digitalWrite(SD_CS, HIGH);           // Both SPI devices start deselected.
  digitalWrite(LCD_CS, HIGH);
  digitalWrite(LCD_BL, LOW);
  if (!SPI.begin(SPI_SCLK, SPI_MISO, SPI_MOSI)) {
    Serial.println("SPI initialization failed");
    return;
  }
  initDisplay();
  fillScreen(0x0000);
  digitalWrite(LCD_BL, HIGH);
  displayReady = true;
  Serial.printf("Chip: %s, flash: %lu bytes\n", ESP.getChipModel(),
                static_cast<unsigned long>(ESP.getFlashChipSize()));
  if (!SD.begin(SD_CS, SPI, SD_HZ, "/sd", 5, false)) {
    Serial.println("SD absent or mount failed; display test continues. No format requested.");
  } else if (SD.cardType() == CARD_NONE) {
    Serial.println("No SD card detected");
    SD.end();
  } else {
    Serial.printf("SD capacity: %llu MiB\n",
                  static_cast<unsigned long long>(SD.cardSize() / (1024ULL * 1024ULL)));
  }
}

void loop() {
  if (!displayReady) { delay(1000); return; }
  static uint8_t index = 0;
  const uint16_t colors[] = {0xF800, 0x07E0, 0x001F, 0xFFFF, 0x0000};
  fillScreen(colors[index]);
  index = (index + 1) % 5;
  delay(1000);
}

Один полный .ino для документированного исполнения ESP32-C6-LCD-0.96 и Arduino-ESP32 3.3.2; только встроенные SPI и SD. После загрузки экран последовательно заполняется красным, зелёным, синим, белым и чёрным, а Serial сообщает результат SD. Если карты нет, цветовой тест продолжает работу. Проверен синтаксис C++17 и соответствие API и распиновки архиву продавца; сборка под ESP32 и тест на физической плате не выполнялись. При пустом экране сначала проверьте точное исполнение и USB-питание; при сдвиге/неверных цветах — инициализацию именно этой панели. Не подбирайте случайные GPIO. Для принудительной загрузки нужны GPIO9=LOW и GPIO8=HIGH при отпускании сброса: удерживайте BOOT, проверьте, что внешняя схема не тянет GPIO8 вниз, нажмите и отпустите RST, затем отпустите BOOT и повторно выберите появившийся USB-порт.

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

Все проекты

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

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