From 9537a037929adf67307e24733f054d0dc68db486 Mon Sep 17 00:00:00 2001
From: Jan Delgado
Date: Wed, 25 Dec 2024 22:26:01 +0100
Subject: [PATCH 1/5] add esp32 w/ st7789v tft
---
README.md | 127 +++++++++-----
esp32_st7789v/Makefile | 1 +
esp32_st7789v/platformio.ini | 10 ++
esp32_st7789v/test.ino | 319 +++++++++++++++++++++++++++++++++++
4 files changed, 418 insertions(+), 39 deletions(-)
create mode 120000 esp32_st7789v/Makefile
create mode 100644 esp32_st7789v/platformio.ini
create mode 100644 esp32_st7789v/test.ino
diff --git a/README.md b/README.md
index e10dbce..c0f6734 100644
--- a/README.md
+++ b/README.md
@@ -5,32 +5,33 @@ Notes on Arduino libraries and sketches and other related stuff.
* [My Libraries and projects](#my-libraries-and-projects)
- * [JLed](#jled)
- * [log4arduino](#log4arduino)
- * [eps32-aws-iot](#eps32-aws-iot)
- * [USB Spinner Game Controller](#usb-spinner-game-controller)
- * [Simpson Device (virtual Drinking Bird)](#simpson-device-virtual-drinking-bird)
+ * [JLed](#jled)
+ * [log4arduino](#log4arduino)
+ * [eps32-aws-iot](#eps32-aws-iot)
+ * [USB Spinner Game Controller](#usb-spinner-game-controller)
+ * [Simpson Device (virtual Drinking Bird)](#simpson-device-virtual-drinking-bird)
* [Sketches](#sketches)
- * [Interfacing SSD1306 based OLED displays (SPI)](#interfacing-ssd1306-based-oled-displays-spi)
- * [Colorduino RGB matrix driver](#colorduino-rgb-matrix-driver)
- * [CJMCU-8x8 RGB matix](#cjmcu-8x8-rgb-matix)
- * [WEMOS D-Duino](#wemos-d-duino)
- * [ESP32 TTGO](#esp32-ttgo)
- * [Heltec WiFi Lora 32](#heltec-wifi-lora-32)
- * [Raspberry Pi 480x320 SPI TFT Display (3.5 inches)](#raspberry-pi-480x320-spi-tft-display-35-inches)
- * [Further info](#further-info)
- * [Sipeed Longan Nano RISC-V proto board (GD32VF103CBT6)](#sipeed-longan-nano-risc-v-proto-board-gd32vf103cbt6)
- * [DFU mode](#dfu-mode)
- * [Upload demo sketch](#upload-demo-sketch)
- * [Raspberry Pi HDMI LCD display (800x480, 4")](#raspberry-pi-hdmi-lcd-display-800x480-4)
- * [Raspberry Pi Pico (RP2040)](#raspberry-pi-pico-rp2040)
- * [PCA9685 driver board](#pca9685-driver-board)
- * [MP3 Modules](#mp3-modules)
- * [VS1053 notes](#vs1053-notes)
- * [Bosch BMP280](#bosch-bmp280)
- * [TM1637 based Display](#tm1637-based-display)
+ * [Interfacing SSD1306 based OLED displays (SPI)](#interfacing-ssd1306-based-oled-displays-spi)
+ * [Colorduino RGB matrix driver](#colorduino-rgb-matrix-driver)
+ * [CJMCU-8x8 RGB matix](#cjmcu-8x8-rgb-matix)
+ * [WEMOS D-Duino](#wemos-d-duino)
+ * [ESP32 TTGO](#esp32-ttgo)
+ * [Heltec WiFi Lora 32](#heltec-wifi-lora-32)
+ * [Raspberry Pi 480x320 SPI TFT Display (3.5 inches)](#raspberry-pi-480x320-spi-tft-display-35-inches)
+ * [Further info](#further-info)
+ * [Sipeed Longan Nano RISC-V proto board (GD32VF103CBT6)](#sipeed-longan-nano-risc-v-proto-board-gd32vf103cbt6)
+ * [DFU mode](#dfu-mode)
+ * [Upload demo sketch](#upload-demo-sketch)
+ * [Raspberry Pi HDMI LCD display (800x480, 4")](#raspberry-pi-hdmi-lcd-display-800x480-4)
+ * [Raspberry Pi Pico (RP2040)](#raspberry-pi-pico-rp2040)
+ * [PCA9685 driver board](#pca9685-driver-board)
+ * [MP3 Modules](#mp3-modules)
+ * [VS1053 notes](#vs1053-notes)
+ * [Bosch BMP280](#bosch-bmp280)
+ * [TM1637 based Display](#tm1637-based-display)
+ * [ESP32 board with 1.14" RGB ST7789V TFT display](#esp32-board-with-114-rgb-st7789v-tft-display)
* [Misc](#misc)
- * [WS2812 protection circuit](#ws2812-protection-circuit)
+ * [WS2812 protection circuit](#ws2812-protection-circuit)
* [Author](#author)
@@ -112,11 +113,11 @@ to play games like e.g. Arkanoid. Simulates an USB mouse and needs no drivers.
Simulates an USB mouse using an Attiny85 (Digispark board) and randomly moves
your mouse (see The Simpsons S07E07).
-* https://github.com/jandelgado/simpson-device
+* https://github.com/jandelgado/simpson-device
## Sketches
-To build the demo sketches you can either copy the folders to the source
+To build the demo sketches you can either copy the folders to the source
folder of your Arduino IDE or use PlatformIO and the provided makefiles, e.g.:
```
@@ -155,13 +156,13 @@ rmation.
### WEMOS D-Duino
The Wemos D-Duino is an ESP8266 board with an integrated SSD1306 OLED display
-connected via I2C.
+connected via I2C.
* SSD1306 is connected with I2C and SCL connected to D2 and SDA connected
to D1.
-* see [example sketch](wemos_d_duino) for an example on how to use it with
+* see [example sketch](wemos_d_duino) for an example on how to use it with
the u8g2 library.
### ESP32 TTGO
@@ -178,7 +179,7 @@ switch.
* SSD1306 is connected with I2C and SCL connected to GPIO4 and SDA connected
to GPIO5.
* the builtin blue LED is connected to GPIO 16
-* see [example sketch](esp32_ttgo) for an example on how to use it with
+* see [example sketch](esp32_ttgo) for an example on how to use it with
the u8g2 library.
### Heltec WiFi Lora 32
@@ -201,7 +202,7 @@ transceiver.
The display is labeled with `RPi Display 480x320 Pixel XPT246 Touch Controller`
-and uses an `ILI9486` controller. In raspian (tested with `2018-11-13 Raspian`).
+and uses an `ILI9486` controller. In raspian (tested with `2018-11-13 Raspian`).
no additional drivers are needed. I got it running with the following configuration:
Add to `/boot/config.txt`:
@@ -275,7 +276,7 @@ Found DFU: [28e9:0189] ver=1000, devnum=7, cfg=1, intf=0, path="1-2", alt=1, nam
Found DFU: [28e9:0189] ver=1000, devnum=7, cfg=1, intf=0, path="1-2", alt=0, name="@Internal Flash /0x08000000/512*002Kg", serial="??"
```
-#### Upload demo sketch
+#### Upload demo sketch
Before uploading to the MCU, make sure you installed [the udev rules as described here](https://docs.platformio.org/en/latest/faq.html#faq-udev-rules). Afterwards a
`udevadm control --reload-rules && udevadm trigger` (as root) might be necessary.
@@ -304,7 +305,7 @@ TODO
-The display is labelled "4inch HDMI LCD". The resolution is 800x480 and the
+The display is labelled "4inch HDMI LCD". The resolution is 800x480 and the
display has a built in XPT2046 touch controller.
I had to power both the Raspi (RPi 3) and the display to get it run. The display
@@ -353,7 +354,7 @@ and a [simple build script](https://github.com/jandelgado/jled/blob/4.7.0/exampl
The PCA9685 is an **I2C bus** controlled LED/Servo controller **with 16
individually controllable PWM channels**. Each channel has a resolution of 12
bits, resulting in 4096 steps. All channels operate at the same fixed
-frequency, which must be in the range between 24Hz and 1526Hz.
+frequency, which must be in the range between 24Hz and 1526Hz.
The board operates at 3V to 5V, which is fed through the VCC pin. The V+ pin
is optional and is used to power servos or LEDs with up to 6V. The V+ voltage
@@ -368,14 +369,14 @@ SDA and SCL are the I2C data and clock pins. The OE pin is optional (and pulled
down by default) and is used to quickly disable all outputs (by setting OE to
high level).
-The I2C address is by default `0x40` and can be changed by closing the `A0` to
+The I2C address is by default `0x40` and can be changed by closing the `A0` to
`A5` pins using a soldering iron.
There are many libraries for PCA9685 based boards out there, I successfully
used the [Adafruit PWM Servo Driver
-library](https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library).
+library](https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library).
Have a look at [this example here](pca9685).
### MP3 Modules
@@ -410,7 +411,7 @@ Summary:
* WTV020M01 is not recommended since not supporting MP3 format and very
restrictive regarding SD cards used and audio encoding
* The GPD2856A based boards are designed as stand alone players and are not
- meant to be controlled by a micro controller.
+ meant to be controlled by a micro controller.
* The DFPlayer Mini is a reliable board which can be controlled by a micro
controller. It has an amplifier built in as well as an equalizer.
* The VL1053 based shield supports many file formats and even recording of
@@ -419,7 +420,7 @@ Summary:
controller. It lacks an amplifier and offers only a serial interface for
control.
-Addiontial links:
+Addiontial links:
* DFPlayerMini: https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
* Catalex: http://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf
* GPD2856A: https://www.petervis.com/Electronics_Kits/gpd2856a/gpd2856a-mp3-decoder-board.html
@@ -440,7 +441,7 @@ plugin did not load. Refer to the
[documentation](http://www.vlsi.fi/fileadmin/software/VS10XX/VorbisEncoder170c.pdf)
for more details.
-Libraries and examples:
+Libraries and examples:
* https://github.com/adafruit/Adafruit_VS1053_Library
* https://github.com/madsci1016/Sparkfun-MP3-Player-Shield-Arduino-Library
@@ -456,7 +457,7 @@ boards available, mine is labeled `GY-BME/PM280` and costs about 1.60€
(02/2023). I successfully connected it using I²C and CircuitPython, running on
an Raspberry Pi Pico W using the
[adafruit_bmp280](https://github.com/adafruit/Adafruit_CircuitPython_BMP280)
-library (install on the Pico Pi with `circup adadfruit_bmp280`).
+library (install on the Pico Pi with `circup adadfruit_bmp280`).
In the example I connected the sensor as follows:
@@ -526,6 +527,54 @@ display.scroll("hello world")
display.temperature(23)
```
+### ESP32 board with 1.14" RGB ST7789V TFT display
+
+
+
+This module was sold on aliexpress as an ESP32-S3 (_T-Display T-PicoC3 ESP32 S3
+1,9 Zoll WiFi und Bluetooth-kompatibles Modul ESP32 C3 Entwicklungsboard 1,14
+Zoll LCD für Arduino_), but the one I got had an ESP32-D0WDQD6 and not an
+ESP32-S3, as advertised. According to the specs, the display is a 1.14" RGB TFT
+display with an ST7789V controller, connected by SPI, wired as follows:
+
+| Signal | Pin |
+|------------- |-----|
+| `MOSI` | 19 |
+| `SCLK` | 18 |
+| `CS` | 5 |
+| `DC` | 16 |
+| `RST` | 23 |
+| `BL` | 4 |
+
+I tested 2 different libraries to control the TFT:
+
+1. [deirvlon/ST7789v-Arduino](https://github.com/deirvlon/ST7789v-Arduino):
+ while I had initially success in getting displayed at least anything,
+ further inspection of the [code](https://github.com/deirvlon/ST7789v-Arduino/blob/main/ST7789v_arduino.cpp#L545)
+ revealed, that the lib is hardwired to a resoultion of 240x320 pixels, resulting
+ in a wrong geometry of displayed graphics
+2. [adafruit/Adafruit ST7735 and ST7789 Library](https://github.com/adafruit/Adafruit-ST7735-Library):
+ this lib finally worked, and I have adapted one of the original [demos here](esp32_st7789v/test.ino),
+ with the proper configuration
+
+During development, I eventually found out, that `BL` stands for `BACKLIGHT`: the
+backlight must be turned on, otherwise the screen will stay black. For that, I
+added the following code:
+
+```c++
+...
+#define BL 4
+...
+
+void setup() {
+ ...
+ // turn the backlight on
+ pinMode(BL, OUTPUT);
+ digitalWrite(BL, 1);
+ ...
+}
+```
+
## Misc
### WS2812 protection circuit
diff --git a/esp32_st7789v/Makefile b/esp32_st7789v/Makefile
new file mode 120000
index 0000000..44526d2
--- /dev/null
+++ b/esp32_st7789v/Makefile
@@ -0,0 +1 @@
+../.common/Makefile
\ No newline at end of file
diff --git a/esp32_st7789v/platformio.ini b/esp32_st7789v/platformio.ini
new file mode 100644
index 0000000..685523a
--- /dev/null
+++ b/esp32_st7789v/platformio.ini
@@ -0,0 +1,10 @@
+[platformio]
+default_envs = esp32
+src_dir = .
+
+[env:esp32]
+platform = espressif32
+board = esp32dev
+framework = arduino
+monitor_speed = 9600
+lib_deps=adafruit/Adafruit ST7735 and ST7789 Library@1.10.4
diff --git a/esp32_st7789v/test.ino b/esp32_st7789v/test.ino
new file mode 100644
index 0000000..1b04fba
--- /dev/null
+++ b/esp32_st7789v/test.ino
@@ -0,0 +1,319 @@
+/**************************************************************************
+ Source: https://github.com/adafruit/Adafruit-ST7735-Library/blob/c7882bfd42adf196f34c7080c7206d2f0d6939da/examples/graphicstest/graphicstest.ino
+ Minor changes (i.e. enable backlight and removal of unused code) for
+ ESP32 ST7789V 1.14" demo by Jan Delgado 12/2024.
+
+ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ This is a library for several Adafruit displays based on ST77* drivers.
+
+ Works with the Adafruit 1.8" TFT Breakout w/SD card
+ ----> http://www.adafruit.com/products/358
+ The 1.8" TFT shield
+ ----> https://www.adafruit.com/product/802
+ The 1.44" TFT breakout
+ ----> https://www.adafruit.com/product/2088
+ The 1.14" TFT breakout
+ ----> https://www.adafruit.com/product/4383
+ The 1.3" TFT breakout
+ ----> https://www.adafruit.com/product/4313
+ The 1.54" TFT breakout
+ ----> https://www.adafruit.com/product/3787
+ The 1.69" TFT breakout
+ ----> https://www.adafruit.com/product/5206
+ The 2.0" TFT breakout
+ ----> https://www.adafruit.com/product/4311
+ as well as Adafruit raw 1.8" TFT display
+ ----> http://www.adafruit.com/products/618
+
+ Check out the links above for our tutorials and wiring diagrams.
+ These displays use SPI to communicate, 4 or 5 pins are required to
+ interface (RST is optional).
+
+ Adafruit invests time and resources providing this open source code,
+ please support Adafruit and open-source hardware by purchasing
+ products from Adafruit!
+
+ Written by Limor Fried/Ladyada for Adafruit Industries.
+ MIT license, all text above must be included in any redistribution
+
+ **************************************************************************/
+
+#include // Core graphics library
+#include // Hardware-specific library for ST7789
+#include
+
+// using software SPI
+#define TFT_CS 5
+#define TFT_RST 23
+#define TFT_DC 16
+#define TFT_MOSI 19 // Data out
+#define TFT_SCLK 18 // Clock out
+
+// JD: backlight
+#define BL 4
+
+Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
+
+float p = 3.1415926;
+
+void setup(void) {
+ Serial.begin(9600);
+ Serial.print(F("Hello! ST77xx TFT Test"));
+
+ // JD: turn backlight on
+ pinMode(BL, OUTPUT);
+ digitalWrite(BL, 1);
+
+ tft.init(135, 240); // Init ST7789 240x135
+
+ Serial.println(F("Initialized"));
+
+ uint16_t time = millis();
+ tft.fillScreen(ST77XX_BLACK);
+ time = millis() - time;
+
+ Serial.println(time, DEC);
+ delay(500);
+
+ // large block of text
+ tft.fillScreen(ST77XX_BLACK);
+ testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
+ delay(1000);
+
+ // tft print function!
+ tftPrintTest();
+ delay(4000);
+
+ // a single pixel
+ tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
+ delay(500);
+
+ // line draw test
+ testlines(ST77XX_YELLOW);
+ delay(500);
+
+ // optimized lines
+ testfastlines(ST77XX_RED, ST77XX_BLUE);
+ delay(500);
+
+ testdrawrects(ST77XX_GREEN);
+ delay(500);
+
+ testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
+ delay(500);
+
+ tft.fillScreen(ST77XX_BLACK);
+ testfillcircles(10, ST77XX_BLUE);
+ testdrawcircles(10, ST77XX_WHITE);
+ delay(500);
+
+ testroundrects();
+ delay(500);
+
+ testtriangles();
+ delay(500);
+
+ mediabuttons();
+ delay(500);
+
+ Serial.println("done");
+ delay(1000);
+}
+
+void loop() {
+ tft.invertDisplay(true);
+ delay(500);
+ tft.invertDisplay(false);
+ delay(500);
+}
+
+void testlines(uint16_t color) {
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=0; x < tft.width(); x+=6) {
+ tft.drawLine(0, 0, x, tft.height()-1, color);
+ delay(0);
+ }
+ for (int16_t y=0; y < tft.height(); y+=6) {
+ tft.drawLine(0, 0, tft.width()-1, y, color);
+ delay(0);
+ }
+
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=0; x < tft.width(); x+=6) {
+ tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
+ delay(0);
+ }
+ for (int16_t y=0; y < tft.height(); y+=6) {
+ tft.drawLine(tft.width()-1, 0, 0, y, color);
+ delay(0);
+ }
+
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=0; x < tft.width(); x+=6) {
+ tft.drawLine(0, tft.height()-1, x, 0, color);
+ delay(0);
+ }
+ for (int16_t y=0; y < tft.height(); y+=6) {
+ tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
+ delay(0);
+ }
+
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=0; x < tft.width(); x+=6) {
+ tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
+ delay(0);
+ }
+ for (int16_t y=0; y < tft.height(); y+=6) {
+ tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
+ delay(0);
+ }
+}
+
+void testdrawtext(char *text, uint16_t color) {
+ tft.setCursor(0, 0);
+ tft.setTextColor(color);
+ tft.setTextWrap(true);
+ tft.print(text);
+}
+
+void testfastlines(uint16_t color1, uint16_t color2) {
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t y=0; y < tft.height(); y+=5) {
+ tft.drawFastHLine(0, y, tft.width(), color1);
+ }
+ for (int16_t x=0; x < tft.width(); x+=5) {
+ tft.drawFastVLine(x, 0, tft.height(), color2);
+ }
+}
+
+void testdrawrects(uint16_t color) {
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=0; x < tft.width(); x+=6) {
+ tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
+ }
+}
+
+void testfillrects(uint16_t color1, uint16_t color2) {
+ tft.fillScreen(ST77XX_BLACK);
+ for (int16_t x=tft.width()-1; x > 6; x-=6) {
+ tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
+ tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
+ }
+}
+
+void testfillcircles(uint8_t radius, uint16_t color) {
+ for (int16_t x=radius; x < tft.width(); x+=radius*2) {
+ for (int16_t y=radius; y < tft.height(); y+=radius*2) {
+ tft.fillCircle(x, y, radius, color);
+ }
+ }
+}
+
+void testdrawcircles(uint8_t radius, uint16_t color) {
+ for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
+ for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
+ tft.drawCircle(x, y, radius, color);
+ }
+ }
+}
+
+void testtriangles() {
+ tft.fillScreen(ST77XX_BLACK);
+ uint16_t color = 0xF800;
+ int t;
+ int w = tft.width()/2;
+ int x = tft.height()-1;
+ int y = 0;
+ int z = tft.width();
+ for(t = 0 ; t <= 15; t++) {
+ tft.drawTriangle(w, y, y, x, z, x, color);
+ x-=4;
+ y+=4;
+ z-=4;
+ color+=100;
+ }
+}
+
+void testroundrects() {
+ tft.fillScreen(ST77XX_BLACK);
+ uint16_t color = 100;
+ int i;
+ int t;
+ for(t = 0 ; t <= 4; t+=1) {
+ int x = 0;
+ int y = 0;
+ int w = tft.width()-2;
+ int h = tft.height()-2;
+ for(i = 0 ; i <= 16; i+=1) {
+ tft.drawRoundRect(x, y, w, h, 5, color);
+ x+=2;
+ y+=3;
+ w-=4;
+ h-=6;
+ color+=1100;
+ }
+ color+=100;
+ }
+}
+
+void tftPrintTest() {
+ tft.setTextWrap(false);
+ tft.fillScreen(ST77XX_BLACK);
+ tft.setCursor(0, 30);
+ tft.setTextColor(ST77XX_RED);
+ tft.setTextSize(1);
+ tft.println("Hello World!");
+ tft.setTextColor(ST77XX_YELLOW);
+ tft.setTextSize(2);
+ tft.println("Hello World!");
+ tft.setTextColor(ST77XX_GREEN);
+ tft.setTextSize(3);
+ tft.println("Hello World!");
+ tft.setTextColor(ST77XX_BLUE);
+ tft.setTextSize(4);
+ tft.print(1234.567);
+ delay(1500);
+ tft.setCursor(0, 0);
+ tft.fillScreen(ST77XX_BLACK);
+ tft.setTextColor(ST77XX_WHITE);
+ tft.setTextSize(0);
+ tft.println("Hello World!");
+ tft.setTextSize(1);
+ tft.setTextColor(ST77XX_GREEN);
+ tft.print(p, 6);
+ tft.println(" Want pi?");
+ tft.println(" ");
+ tft.print(8675309, HEX); // print 8,675,309 out in HEX!
+ tft.println(" Print HEX!");
+ tft.println(" ");
+ tft.setTextColor(ST77XX_WHITE);
+ tft.println("Sketch has been");
+ tft.println("running for: ");
+ tft.setTextColor(ST77XX_MAGENTA);
+ tft.print(millis() / 1000);
+ tft.setTextColor(ST77XX_WHITE);
+ tft.print(" seconds.");
+}
+
+void mediabuttons() {
+ // play
+ tft.fillScreen(ST77XX_BLACK);
+ tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
+ tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
+ delay(500);
+ // pause
+ tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
+ tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
+ tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
+ delay(500);
+ // play color
+ tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
+ delay(50);
+ // pause color
+ tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
+ tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
+ // play color
+ tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
+}
+
+
From d5473c4d32657eecdbd29d56a27745f1b071106d Mon Sep 17 00:00:00 2001
From: Jan Delgado
Date: Fri, 27 Dec 2024 21:39:11 +0100
Subject: [PATCH 2/5] add images
---
README.md | 6 +++++-
images/esp32_st7789v_1.jpg | Bin 0 -> 731597 bytes
images/esp32_st7789v_2.jpg | Bin 0 -> 341167 bytes
images/esp32_st7789v_3.jpg | Bin 0 -> 378019 bytes
4 files changed, 5 insertions(+), 1 deletion(-)
create mode 100644 images/esp32_st7789v_1.jpg
create mode 100644 images/esp32_st7789v_2.jpg
create mode 100644 images/esp32_st7789v_3.jpg
diff --git a/README.md b/README.md
index c0f6734..a4bc2d6 100644
--- a/README.md
+++ b/README.md
@@ -529,7 +529,11 @@ display.temperature(23)
### ESP32 board with 1.14" RGB ST7789V TFT display
-
+
+
+
+
This module was sold on aliexpress as an ESP32-S3 (_T-Display T-PicoC3 ESP32 S3
1,9 Zoll WiFi und Bluetooth-kompatibles Modul ESP32 C3 Entwicklungsboard 1,14
diff --git a/images/esp32_st7789v_1.jpg b/images/esp32_st7789v_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1c3b8605ba3735eab0553288af392b47ee417792
GIT binary patch
literal 731597
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%0DodRh
z44HzpwT9&Pv%-t01T9{QUcRIvJ_(02WBc%i~epx);0;{H(Wj)2@%WvzD~Kd8VT