эти две микросхемы оно и есть видимо, попробовать вместо 5 подать тоже 3.3
это некий SM245TS
скорее всего разновидность 74SN245 - может использоваться как конвертер уровней
как конвертер уровней и работает
а что за ESP32? и какую выбираешь в IDE
esp32devkitv1, в arduino ide выбрано esp32 dev module
накинул и туда и туда 3 вольта, изменений нет
@CuberHamster я такими пользуюсь, заказывал 3 типа, на всех всё работает, но такие дисплеи еще не применял
если есть дисплей с SPI может подкинешь на ESP, проверить что она у тебя живая
вот я вроде брал CH9102X
такую не брал, есть 32D, 32U и 38 пиновых некоторое количество, всё трудится не покладая рук
тут парень подключает ili9486 к esp32, и у него все работает, причем с помощью tft espi. Я пробовал сделать все точно также, но у меня не работало. Правда он делал на platformIO, а я в arduino ide
подключил к ней старый добрый зеленый lcd, правда по i2c, все работает
I2C, I2S это звук, значит модуль живой…обязан работать…
Когда метод научного тыка не сработал, работаем по методу системного подхода - в экселе составляем табличку распиновка модуля TFT - распиновка на UNO - распиновка на ESP32
Высокая доля вероятности, что сигнал RST на TFT от пина RESET UNO
Посмотрел внимательно, LCD - не от хард резета инициализируется, видимо всё остальное от него (тач и СД), тач у тебя недоиницализирован, закрыт порт SPI, оставь в скетче только LCD…но дисплей всё таки не для ESP (точнее не для этих библиотек) тач требует прерывания, а у тебя в дисплее этот сигнал не выведен…
Я так глубоко библиотеку не копал, можно ли использовать без прерывания не знаю
Табличка ниже, проверяй подключение
UNO | ESP32 | UNO | ESP32 | |||
---|---|---|---|---|---|---|
D0 | - | A5 | F_CS | 5 | ||
D1 | - | A4 | LCD_RST | 32 | ||
D2 | LCD_D2 | 26 | A3 | LCD_CS | 33 | |
D3 | LCD_D3 | 25 | A2 | LCD_RS | 15 | |
D4 | LCD_D4 | 17 | A1 | LCD_RW | 4 | |
D5 | LCD_D5 | 16 | A0 | LCD_RD | 2 | |
D6 | LCD_D6 | 27 | ||||
D7 | LCD_D7 | 14 | VIN | - | ||
GND | GND | |||||
D8 | LCD_D0 | 12 | GND | GND | ||
D9 | LCD_D1 | 13 | 5V | 5V | ||
D10 | SD_SS (CS) | ? | 3.3V | 3.3V | ||
D11 | SD_DI (MOSI) | 23 | RES | RESET | ||
D12 | SD_DO (MISO) | 19 | 5V | |||
D13 | SD_SCK (SCLK) | 18 | - | |||
GND | ||||||
AREF | ||||||
SDA | ||||||
SCL |
Поправил твой скетч под свой дисплей (SPI) и мою распиновку, код рабочий, сначала запускается калибровка тача, после калибровки рисует квадрат в котором при нажатии на тач отрисовывается пятно…калибровка тача не запоминается…при резете всё повторяется…
// v1.0.0 (Это специальная мера в период перехода от v0. Если вы этого не напишете, это будет работать со старой серией v0.)
#define LGFX_USE_V1
#include <LovyanGFX.hpp>
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
class LGFX : public lgfx::LGFX_Device{
lgfx::Panel_ILI9341 _panel_instance;
lgfx::Bus_SPI _bus_instance;
lgfx::Light_PWM _light_instance;
lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------
// pin 25 - DAC1, 26 - DAC2
public:LGFX(void){{ // Настройте параметры управления шиной.
auto cfg = _bus_instance.config();// Получите структуру для настроек шины.
// Настройки шины SPI
cfg.spi_host = SPI2_HOST; // Выберите SPI для использования (VSPI_HOST or HSPI_HOST)
cfg.spi_mode = 0; // SPI Установить режим связи (0 ~ 3)
cfg.freq_write = 40000000; // Тактовая частота SPI во время передачи (максимум 80 МГц, 80 МГц округляется до целого числа)
cfg.freq_read = 16000000; // Частота SPI при приеме
cfg.spi_3wire = false; // Установите значение true, если прием осуществляется на контакт MOSI.
cfg.use_lock = true; // Установите true, чтобы использовать блокировку транзакции
cfg.dma_channel= 1; // Использовать настройку канала DMA (1 или 2, 0=отключить) (0=не использовать DMA)
cfg.pin_sclk = 14; // Установить номер вывода SPI SCLK SCK
cfg.pin_mosi = 13; // Установите номер контакта SPI MOSI SDI
cfg.pin_miso = 12; // Установить номер контакта SPI MISO (-1 = отключить) SDO
cfg.pin_dc = 17; //2; // Установить номер контакта SPI D/C (-1 = отключить) RS
// При использовании той же шины SPI, что и SD-карта, обязательно установите MISO, не пропуская его.
_bus_instance.config(cfg); // Применяет заданное значение к шине.
_panel_instance.setBus(&_bus_instance);// Установите шину на панели.
}
{ // Установите управление панелью дисплея.
auto cfg = _panel_instance.config();// Получает структуру для настроек панели отображения.
cfg.pin_cs = 15; // CS номер контакта, к которому подключен (-1 = отключить)
cfg.pin_rst = 16; //-1; // RST номер контакта, к которому подключен (-1 = отключить)
cfg.pin_busy = -1; // BUSY номер контакта, к которому подключен (-1 = отключить)
cfg.memory_width = 240; //320; // Максимальная ширина, поддерживаемая микросхемой драйвера
cfg.memory_height = 320; //480; // Максимальная высота, поддерживаемая микросхемой драйвера
cfg.panel_width = 239; //320; // фактическая отображаемая ширина
cfg.panel_height = 319; //480; // реальная видимая высота
cfg.offset_x = 0; // Величина смещения панели в направлении X
cfg.offset_y = 0; // Величина смещения панели в направлении Y
cfg.offset_rotation = 0; // Смещение значения направления вращения 0~7 (4~7 перевернуто)
cfg.dummy_read_pixel= 8; // Количество битов для фиктивного чтения перед считыванием пикселей
cfg.dummy_read_bits = 1; // Количество битов для фиктивного чтения перед чтением данных вне пикселей
cfg.readable = false; // Установите значение true, если данные можно прочитать
cfg.invert = false; // Установите значение true, если яркость панели инвертирована.
cfg.rgb_order = false; // установите значение true, если красная и синяя панели поменялись местами.
cfg.dlen_16bit = false; // Панель для отправки в единицах 16-битной длины данных Установите значение true
cfg.bus_shared = false; // Совместное использование шины с SD-картой Установите значение true
_panel_instance.config(cfg);
}
{ // Установите управление подсветкой. (удалить, если не нужно)
auto cfg = _light_instance.config();// Получает структуру для настроек подсветки.
cfg.pin_bl = 27; // Номер контакта BL куда подключается подсветка
cfg.invert = false; // true, чтобы инвертировать яркость подсветки
cfg.freq = 44100; // Частота ШИМ подсветки
cfg.pwm_channel = 7; // Номер канала PWM для использования
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);//Установите подсветку на панели.
}
{ // Настройте параметры управления сенсорным экраном. (удалить, если не нужно)
auto cfg = _touch_instance.config();
cfg.x_min = 300; // Минимальное значение X (необработанное значение), полученное с сенсорного экрана
cfg.x_max = 3900; // Максимальное значение X (необработанное значение), полученное с сенсорного экрана
cfg.y_min = 3700; // Минимальное значение Y (необработанное значение), полученное с сенсорного экрана
cfg.y_max = 20; // Максимальное значение Y (необработанное значение), полученное с сенсорного экрана
cfg.pin_int = 32;//36;// Номер контакта, к которому подключен INT, TP IRQ 36
cfg.bus_shared = true; // Установите значение true при использовании общей шины с экраном.
cfg.offset_rotation = 2; // Регулировка, когда дисплей и направление касания не совпадают Установите значение от 0 до 7
// Для SPI-подключения
cfg.spi_host = SPI2_HOST;// Выберите SPI для использования (HSPI_HOST or VSPI_HOST)
cfg.freq = 1000000; // SPIустановить частоту, Max 2.5MHz, 8bit(7bit) mode
cfg.pin_sclk = 14; // SCLK номер вывода, к которому подключен, TP CLK
cfg.pin_mosi = 13; // MOSI номер вывода, к которому подключен, TP DIN
cfg.pin_miso = 12; // MISO номер вывода, к которому подключен, TP DOUT
cfg.pin_cs = 33; // CS номер вывода, к которому подключен, TP CS
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance); // Установите сенсорный экран на панели.
}
setPanel(&_panel_instance);// Устанавливает панель для использования.
}
};
LGFX tft; // Создайте экземпляр подготовленного класса.
void setup(void)
{
tft.init(); //
//tft.setRotation(1); // USB Right
tft.setRotation(3); // USB Left
tft.setBrightness(200); //
tft.setSwapBytes(true); //
tft.fillScreen (0x0000); // BLACK
tft.setTextSize((std::max(tft.width(), tft.height()) + 255) >> 8);
// タッチが使用可能な場合のキャリブレーションを行います。(省略可)
if (tft.touch())
{
if (tft.width() < tft.height()) tft.setRotation(tft.getRotation() ^ 1);
// 画面に案内文章を描画します。
tft.setTextDatum(textdatum_t::middle_center);
tft.drawString("touch the arrow marker.", tft.width()>>1, tft.height() >> 1);
tft.setTextDatum(textdatum_t::top_left);
// タッチを使用する場合、キャリブレーションを行います。画面の四隅に表示される矢印の先端を順にタッチしてください。
std::uint16_t fg = TFT_WHITE;
std::uint16_t bg = TFT_BLACK;
if (tft.isEPD()) std::swap(fg, bg);
tft.calibrateTouch(nullptr, fg, bg, std::max(tft.width(), tft.height()) >> 3);
}
tft.fillScreen(TFT_BLACK);
}
uint32_t count = ~0;
void loop(void)
{
tft.startWrite();
tft.setRotation(++count & 7);
tft.setColorDepth((count & 8) ? 16 : 24);
tft.setTextColor(TFT_WHITE);
tft.drawNumber(tft.getRotation(), 16, 0);
tft.setTextColor(0xFF0000U);
tft.drawString("R", 30, 16);
tft.setTextColor(0x00FF00U);
tft.drawString("G", 40, 16);
tft.setTextColor(0x0000FFU);
tft.drawString("B", 50, 16);
tft.drawRect(30,30,tft.width()-60,tft.height()-60,count*7);
tft.drawFastHLine(0, 0, 10);
tft.endWrite();
int32_t x, y;
if (tft.getTouch(&x, &y)) {
tft.fillRect(x-2, y-2, 5, 5, count*7);
}
}
ссылка не рабочая
Отлично, со школы приду буду тестить
С тебя пятёрка по любому предмету
Оплата пятеркой по физике за четверть
Лови, вот его распиновка, D4 и D5 на других пинах
#define ILI9486_DRIVER
#define TFT_PARALLEL_8_BIT
// The ESP32 and TFT the pins used for testing are:
#define TFT_DC 18 // Data Command control pin - must use a pin in the range 0-31
#define TFT_CS 33 // Chip select control pin
#define TFT_RST 32 // Reset pin
#define TFT_RD 2
#define TFT_WR 4 // Write strobe control pin - must use a pin in the range 0-31
#define TFT_D0 12 // Must use pins in the range 0-31 for the data bus
#define TFT_D1 13 // so a single register write sets/clears all bits
#define TFT_D2 26
#define TFT_D3 25
#define TFT_D4 21
#define TFT_D5 5
#define TFT_D6 27
#define TFT_D7 14
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT
#define SPI_FREQUENCY 27000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
еще непонятно - #define TFT_DC 18 это у тебя видимо LCD_RS
Спасибо) скоро отпишусь о результатах