Skip to content

Commit 8ec17f8

Browse files
authored
Merge pull request #10691 from intGus/waveshare-esp32_s3_lcd_2.8
Add Waveshare ESP32S3 Touch LCD 2.8inch display board
2 parents 706c4b2 + 5028d2c commit 8ec17f8

File tree

5 files changed

+196
-0
lines changed

5 files changed

+196
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "supervisor/board.h"
8+
#include "mpconfigboard.h"
9+
#include "shared-bindings/busio/SPI.h"
10+
#include "shared-bindings/fourwire/FourWire.h"
11+
#include "shared-bindings/microcontroller/Pin.h"
12+
#include "shared-module/displayio/__init__.h"
13+
#include "shared-module/displayio/mipi_constants.h"
14+
#include "shared-bindings/board/__init__.h"
15+
16+
#define DELAY 0x80
17+
18+
// display init sequence according to LilyGO example app
19+
uint8_t display_init_sequence[] = {
20+
0x01, DELAY, 0x96, // _SWRESET and Delay 150ms
21+
0x11, DELAY, 0xFF, // _SLPOUT and Delay 500ms
22+
0x3A, DELAY | 1, 0x55, 0x0A, // _COLMOD and Delay 10ms
23+
0x21, DELAY, 0x0A, // _INVON Hack and Delay 10ms
24+
0x13, DELAY, 0x0A, // _NORON and Delay 10ms
25+
0x36, 0x01, 0x60, // _MADCTL
26+
0x29, DELAY, 0xFF, // _DISPON and Delay 500ms
27+
};
28+
29+
void board_init(void) {
30+
busio_spi_obj_t *spi = common_hal_board_create_spi(0);
31+
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
32+
bus->base.type = &fourwire_fourwire_type;
33+
34+
common_hal_fourwire_fourwire_construct(
35+
bus,
36+
spi,
37+
&pin_GPIO41, // DC
38+
&pin_GPIO42, // CS
39+
&pin_GPIO39, // RST
40+
40000000, // baudrate
41+
0, // polarity
42+
0 // phase
43+
);
44+
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
45+
display->base.type = &busdisplay_busdisplay_type;
46+
47+
common_hal_busdisplay_busdisplay_construct(
48+
display,
49+
bus,
50+
320, // width (after rotation)
51+
240, // height (after rotation)
52+
0, // column start
53+
0, // row start
54+
0, // rotation
55+
16, // color depth
56+
false, // grayscale
57+
false, // pixels in a byte share a row. Only valid for depths < 8
58+
1, // bytes per cell. Only valid for depths < 8
59+
false, // reverse_pixels_in_byte. Only valid for depths < 8
60+
true, // reverse_pixels_in_word
61+
MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command
62+
MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command
63+
MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
64+
display_init_sequence,
65+
sizeof(display_init_sequence),
66+
&pin_GPIO5, // backlight pin
67+
NO_BRIGHTNESS_COMMAND,
68+
1.0f, // brightness
69+
false, // single_byte_bounds
70+
false, // data_as_commands
71+
true, // auto_refresh
72+
60, // native_frames_per_second
73+
true, // backlight_on_high
74+
false, // SH1107_addressing
75+
50000 // backlight pwm frequency
76+
);
77+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2025 Neradoc
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
#define MICROPY_HW_BOARD_NAME "Waveshare ESP32-S3 Touch LCD 2.8"
10+
#define MICROPY_HW_MCU_NAME "ESP32S3"
11+
12+
#define CIRCUITPY_BOARD_I2C (1)
13+
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO3, .sda = &pin_GPIO1}}
14+
15+
#define CIRCUITPY_BOARD_SPI (1)
16+
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO40, .mosi = &pin_GPIO45, .miso = &pin_GPIO46}}
17+
18+
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
19+
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
USB_VID = 0x303A
2+
USB_PID = 0x825F
3+
USB_MANUFACTURER = "Waveshare Electronics"
4+
USB_PRODUCT = "ESP32-S3 Touch LCD 2.8"
5+
6+
IDF_TARGET = esp32s3
7+
8+
CIRCUITPY_ESP_FLASH_MODE = qio
9+
CIRCUITPY_ESP_FLASH_FREQ = 80m
10+
CIRCUITPY_ESP_FLASH_SIZE = 16MB
11+
12+
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
13+
CIRCUITPY_ESP_PSRAM_MODE = opi
14+
CIRCUITPY_ESP_PSRAM_FREQ = 80m
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "shared-bindings/board/__init__.h"
8+
#include "shared-module/displayio/__init__.h"
9+
10+
static const mp_rom_map_elem_t board_module_globals_table[] = {
11+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
12+
13+
// LCD (SPI0)
14+
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO40) },
15+
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO45) },
16+
{ MP_ROM_QSTR(MP_QSTR_LCD_MISO), MP_ROM_PTR(&pin_GPIO46) },
17+
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO42) },
18+
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO41) },
19+
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO39) },
20+
{ MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO5) }, // PWM-capable
21+
22+
// microSD (SPI1)
23+
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO14) },
24+
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO17) },
25+
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO16) },
26+
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO21) },
27+
28+
// Touch panel (I2C0)
29+
{ MP_ROM_QSTR(MP_QSTR_TP_SCL), MP_ROM_PTR(&pin_GPIO3) },
30+
{ MP_ROM_QSTR(MP_QSTR_TP_SDA), MP_ROM_PTR(&pin_GPIO1) },
31+
{ MP_ROM_QSTR(MP_QSTR_TP_RST), MP_ROM_PTR(&pin_GPIO2) },
32+
{ MP_ROM_QSTR(MP_QSTR_TP_INT), MP_ROM_PTR(&pin_GPIO4) },
33+
34+
// IMU (I2C1)
35+
{ MP_ROM_QSTR(MP_QSTR_IMU_SCL), MP_ROM_PTR(&pin_GPIO10) },
36+
{ MP_ROM_QSTR(MP_QSTR_IMU_SDA), MP_ROM_PTR(&pin_GPIO11) },
37+
{ MP_ROM_QSTR(MP_QSTR_IMU_INT2), MP_ROM_PTR(&pin_GPIO12) },
38+
{ MP_ROM_QSTR(MP_QSTR_IMU_INT1), MP_ROM_PTR(&pin_GPIO13) },
39+
40+
// I2S Audio
41+
{ MP_ROM_QSTR(MP_QSTR_I2S_BCK), MP_ROM_PTR(&pin_GPIO48) },
42+
{ MP_ROM_QSTR(MP_QSTR_I2S_DIN), MP_ROM_PTR(&pin_GPIO47) },
43+
{ MP_ROM_QSTR(MP_QSTR_I2S_LRCK), MP_ROM_PTR(&pin_GPIO38) },
44+
45+
// Battery management
46+
{ MP_ROM_QSTR(MP_QSTR_BAT_CONTROL), MP_ROM_PTR(&pin_GPIO7) }, // control pin
47+
{ MP_ROM_QSTR(MP_QSTR_BAT_PWR), MP_ROM_PTR(&pin_GPIO6) }, // Board name
48+
{ MP_ROM_QSTR(MP_QSTR_KEY_BAT), MP_ROM_PTR(&pin_GPIO6) }, // Schematics name
49+
{ MP_ROM_QSTR(MP_QSTR_BAT_ADC), MP_ROM_PTR(&pin_GPIO8) }, // VBAT sense (ADC)
50+
51+
// UART header
52+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
53+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
54+
55+
// I2C header
56+
{ MP_ROM_QSTR(MP_QSTR_I2C_SCL), MP_ROM_PTR(&pin_GPIO10) },
57+
{ MP_ROM_QSTR(MP_QSTR_I2C_SDA), MP_ROM_PTR(&pin_GPIO11) },
58+
59+
// Boot/User button
60+
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
61+
{ MP_ROM_QSTR(MP_QSTR_BUTTON0), MP_ROM_PTR(&pin_GPIO0) },
62+
63+
// Primary bus pins
64+
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO40) }, // Primary SPI (LCD)
65+
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO45) },
66+
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO46) },
67+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO3) }, // Primary I2C (TP)
68+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO1) },
69+
70+
// Objects
71+
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
72+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
73+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
74+
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display) },
75+
76+
// User accessible
77+
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
78+
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
79+
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
80+
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
81+
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
82+
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
83+
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
84+
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
85+
};
86+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

ports/espressif/boards/waveshare_esp32_s3_touch_lcd_2_8/sdkconfig

Whitespace-only changes.

0 commit comments

Comments
 (0)