Add SenseCAP Indicator D1

This commit is contained in:
fvanroie 2023-07-23 16:20:39 +02:00
parent 2f4092b39e
commit 4e5114a01b
7 changed files with 600 additions and 4 deletions

View File

@ -11,6 +11,142 @@
#include "Arduino_GFX.h" #include "Arduino_GFX.h"
#include "Arduino_RGBPanel_mod.h" #include "Arduino_RGBPanel_mod.h"
static const uint8_t st7701_sensecap_indicator_init_operations[] = {
BEGIN_WRITE,
WRITE_COMMAND_8, 0xFF,
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x10,
WRITE_C8_D16, 0xC0, 0x3B, 0x00,
WRITE_C8_D16, 0xC1, 0x0D, 0x02,
WRITE_C8_D16, 0xC2, 0x31, 0x05,
WRITE_C8_D8, 0xC7, 0x04,
WRITE_C8_D8, 0xCD, 0x08,
WRITE_COMMAND_8, 0xB0, // Positive Voltage Gamma Control
WRITE_BYTES, 16,
0x00, 0x11, 0x18, 0x0E,
0x11, 0x06, 0x07, 0x08,
0x07, 0x22, 0x04, 0x12,
0x0F, 0xAA, 0x31, 0x18,
END_WRITE,
BEGIN_WRITE,
WRITE_COMMAND_8, 0xB1, // Negative Voltage Gamma Control
WRITE_BYTES, 16,
0x00, 0x11, 0x19, 0x0E,
0x12, 0x07, 0x08, 0x08,
0x08, 0x22, 0x04, 0x11,
0x11, 0xA9, 0x32, 0x18,
// PAGE1
WRITE_COMMAND_8, 0xFF,
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x11,
WRITE_C8_D8, 0xB0, 0x60, // Vop=4.7375v
WRITE_C8_D8, 0xB1, 0x32, // VCOM=32
WRITE_C8_D8, 0xB2, 0x07, // VGH=15v
WRITE_C8_D8, 0xB3, 0x80,
WRITE_C8_D8, 0xB5, 0x49, // VGL=-10.17v
WRITE_C8_D8, 0xB7, 0x85,
WRITE_C8_D8, 0xB8, 0x21, // AVDD=6.6 & AVCL=-4.6
WRITE_C8_D8, 0xC1, 0x78,
WRITE_C8_D8, 0xC2, 0x78,
END_WRITE,
DELAY, 20,
BEGIN_WRITE,
WRITE_COMMAND_8, 0xE0,
WRITE_BYTES, 3, 0x00, 0x1B, 0x02,
WRITE_COMMAND_8, 0xE1,
WRITE_BYTES, 11,
0x08, 0xA0, 0x00, 0x00,
0x07, 0xA0, 0x00, 0x00,
0x00, 0x44, 0x44,
WRITE_COMMAND_8, 0xE2,
WRITE_BYTES, 12,
0x11, 0x11, 0x44, 0x44,
0xED, 0xA0, 0x00, 0x00,
0xEC, 0xA0, 0x00, 0x00,
END_WRITE,
BEGIN_WRITE,
WRITE_COMMAND_8, 0xE3,
WRITE_BYTES, 4, 0x00, 0x00, 0x11, 0x11,
WRITE_C8_D16, 0xE4, 0x44, 0x44,
WRITE_COMMAND_8, 0xE5,
WRITE_BYTES, 16,
0x0A, 0xE9, 0xD8, 0xA0,
0x0C, 0xEB, 0xD8, 0xA0,
0x0E, 0xED, 0xD8, 0xA0,
0x10, 0xEF, 0xD8, 0xA0,
WRITE_COMMAND_8, 0xE6,
WRITE_BYTES, 4, 0x00, 0x00, 0x11, 0x11,
WRITE_C8_D16, 0xE7, 0x44, 0x44,
END_WRITE,
BEGIN_WRITE,
WRITE_COMMAND_8, 0xE8,
WRITE_BYTES, 16,
0x09, 0xE8, 0xD8, 0xA0,
0x0B, 0xEA, 0xD8, 0xA0,
0x0D, 0xEC, 0xD8, 0xA0,
0x0F, 0xEE, 0xD8, 0xA0,
WRITE_COMMAND_8, 0xEB,
WRITE_BYTES, 7,
0x02, 0x00, 0xE4, 0xE4,
0x88, 0x00, 0x40,
WRITE_C8_D16, 0xEC, 0x3C, 0x00,
WRITE_COMMAND_8, 0xED,
WRITE_BYTES, 16,
0xAB, 0x89, 0x76, 0x54,
0x02, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x20,
0x45, 0x67, 0x98, 0xBA,
WRITE_C8_D8, 0x36, 0x10,
END_WRITE,
BEGIN_WRITE,
//-----------VAP & VAN---------------
WRITE_COMMAND_8, 0xFF,
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x13,
WRITE_C8_D8, 0xE5, 0xE4,
WRITE_COMMAND_8, 0xFF,
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x00,
WRITE_COMMAND_8, 0x21, // 0x20 normal, 0x21 IPS
WRITE_C8_D8, 0x3A, 0x60, // 0x70 RGB888, 0x60 RGB666, 0x50 RGB565
WRITE_COMMAND_8, 0x11, // Sleep Out
END_WRITE,
DELAY, 120,
BEGIN_WRITE,
WRITE_COMMAND_8, 0x29, // Display On
END_WRITE,
DELAY, 120,
};
class Arduino_RGB_Display_Mod : public Arduino_GFX{ class Arduino_RGB_Display_Mod : public Arduino_GFX{
public: public:
Arduino_RGB_Display_Mod( Arduino_RGB_Display_Mod(

View File

@ -0,0 +1,269 @@
#include "Arduino_PCA9535SWSPI.h"
#include "driver/gpio.h"
#include "hasplib.h"
Arduino_PCA9535SWSPI::Arduino_PCA9535SWSPI(int8_t sda, int8_t scl, int8_t pwd, int8_t cs, int8_t sck, int8_t mosi, TwoWire *wire)
: _sda(sda), _scl(scl), _pwd(pwd), _cs(cs), _sck(sck), _mosi(mosi), _wire(wire)
{
}
bool Arduino_PCA9535SWSPI::begin(int32_t speed, int8_t dataMode)
{
UNUSED(speed);
UNUSED(dataMode);
_address = PCA9535_IIC_ADDRESS;
_wire->beginTransmission(_address);
if (!_wire->endTransmission())
{
LOG_INFO(TAG_DRVR, "Found xl9535");
is_found = true;
// this->pinMode8(0, 0xFF, OUTPUT);
if (_pwd != GFX_NOT_DEFINED)
{
this->pinMode(_pwd, OUTPUT);
this->digitalWrite(_pwd, 1);
}
this->pinMode(_cs, OUTPUT);
this->digitalWrite(_cs, 1);
this->pinMode(_sck, OUTPUT);
this->digitalWrite(_sck, 1);
this->pinMode(_mosi, OUTPUT);
this->digitalWrite(_mosi, 1);
}
else
{
LOG_INFO(TAG_DRVR, "xl9535 not found");
is_found = false;
}
return is_found;
}
void Arduino_PCA9535SWSPI::beginWrite()
{
this->digitalWrite(_cs, 0);
}
void Arduino_PCA9535SWSPI::endWrite()
{
this->digitalWrite(_cs, 1);
}
void Arduino_PCA9535SWSPI::writeCommand(uint8_t c)
{
// D/C bit, command
this->digitalWrite(_mosi, 0);
this->digitalWrite(_sck, 0);
this->digitalWrite(_sck, 1);
uint8_t bit = 0x80;
while (bit)
{
if (c & bit)
{
this->digitalWrite(_mosi, 1);
}
else
{
this->digitalWrite(_mosi, 0);
}
this->digitalWrite(_sck, 0);
bit >>= 1;
this->digitalWrite(_sck, 1);
}
}
void Arduino_PCA9535SWSPI::writeCommand16(uint16_t)
{
}
void Arduino_PCA9535SWSPI::write(uint8_t d)
{
// D/C bit, data
this->digitalWrite(_mosi, 1);
this->digitalWrite(_sck, 0);
this->digitalWrite(_sck, 1);
uint8_t bit = 0x80;
while (bit)
{
if (d & bit)
{
this->digitalWrite(_mosi, 1);
}
else
{
this->digitalWrite(_mosi, 0);
}
this->digitalWrite(_sck, 0);
bit >>= 1;
this->digitalWrite(_sck, 1);
}
}
void Arduino_PCA9535SWSPI::write16(uint16_t)
{
// not implemented
}
void Arduino_PCA9535SWSPI::writeRepeat(uint16_t p, uint32_t len)
{
// not implemented
}
void Arduino_PCA9535SWSPI::writePixels(uint16_t *data, uint32_t len)
{
// not implemented
}
#if !defined(LITTLE_FOOT_PRINT)
void Arduino_PCA9535SWSPI::writeBytes(uint8_t *data, uint32_t len)
{
// not implemented
}
#endif // !defined(LITTLE_FOOT_PRINT)
void Arduino_PCA9535SWSPI::writeRegister(uint8_t reg, uint8_t *data, size_t len)
{
_wire->beginTransmission(_address);
_wire->write(reg);
for (size_t i = 0; i < len; i++)
{
_wire->write(data[i]);
}
_wire->endTransmission();
}
uint8_t Arduino_PCA9535SWSPI::readRegister(uint8_t reg, uint8_t *data, size_t len)
{
_wire->beginTransmission(_address);
_wire->write(reg);
_wire->endTransmission();
_wire->requestFrom(_address, len);
size_t index = 0;
while (index < len)
data[index++] = _wire->read();
return 0;
}
void Arduino_PCA9535SWSPI::pinMode(uint8_t pin, uint8_t mode)
{
if (is_found)
{
uint8_t port = 0;
if (pin > 15)
{
gpio_set_direction((gpio_num_t)pin, mode == OUTPUT ? GPIO_MODE_OUTPUT : GPIO_MODE_INPUT);
}
else if (pin > 7)
{
this->readRegister(PCA9535_CONFIG_PORT_1_REG, &port, 1);
if (mode == OUTPUT)
{
port = port & (~(1 << (pin - 10)));
}
else
{
port = port | (1 << (pin - 10));
}
this->writeRegister(PCA9535_CONFIG_PORT_1_REG, &port, 1);
}
else
{
this->readRegister(PCA9535_CONFIG_PORT_0_REG, &port, 1);
if (mode == OUTPUT)
{
port = port & (~(1 << pin));
}
else
{
port = port | (1 << pin);
}
this->writeRegister(PCA9535_CONFIG_PORT_0_REG, &port, 1);
}
}
else
{
LOG_INFO(TAG_DRVR, "xl9535 not found");
}
}
void Arduino_PCA9535SWSPI::pinMode8(uint8_t port, uint8_t pin, uint8_t mode)
{
if (is_found)
{
uint8_t _pin = (mode != OUTPUT) ? pin : ~pin;
if (port)
{
this->writeRegister(PCA9535_CONFIG_PORT_1_REG, &_pin, 1);
}
else
{
this->writeRegister(PCA9535_CONFIG_PORT_0_REG, &_pin, 1);
}
}
else
{
LOG_INFO(TAG_DRVR, "xl9535 not found");
}
}
void Arduino_PCA9535SWSPI::digitalWrite(uint8_t pin, uint8_t val)
{
if (is_found)
{
uint8_t port = 0;
uint8_t reg_data = 0;
if (pin > 15)
{
gpio_set_level((gpio_num_t)pin, val);
}
else if (pin > 7)
{
this->readRegister(PCA9535_OUTPUT_PORT_1_REG, &reg_data, 1);
reg_data = reg_data & (~(1 << (pin - 10)));
port = reg_data | val << (pin - 10);
this->writeRegister(PCA9535_OUTPUT_PORT_1_REG, &port, 1);
}
else
{
this->readRegister(PCA9535_OUTPUT_PORT_0_REG, &reg_data, 1);
reg_data = reg_data & (~(1 << pin));
port = reg_data | val << pin;
this->writeRegister(PCA9535_OUTPUT_PORT_0_REG, &port, 1);
}
}
else
{
LOG_INFO(TAG_DRVR, "xl9535 not found");
}
}
int Arduino_PCA9535SWSPI::digitalRead(uint8_t pin)
{
if (is_found)
{
int state = 0;
uint8_t port = 0;
if (pin > 15)
{
state = gpio_get_level((gpio_num_t)pin);
}
else if (pin > 7)
{
this->readRegister(PCA9535_INPUT_PORT_1_REG, &port, 1);
state = port & (pin - 10) ? 1 : 0;
}
else
{
this->readRegister(PCA9535_INPUT_PORT_0_REG, &port, 1);
state = port & pin ? 1 : 0;
}
return state;
}
else
{
LOG_INFO(TAG_DRVR, "xl9535 not found");
}
return 0;
}

View File

@ -0,0 +1,57 @@
#ifndef _Arduino_PCA9535SWSPI_H_
#define _Arduino_PCA9535SWSPI_H_
#include <Wire.h>
#include "Arduino_DataBus.h"
#define PCA9535_IIC_ADDRESS 0X20
#define PCA9535_INPUT_PORT_0_REG 0X00
#define PCA9535_INPUT_PORT_1_REG 0X01
#define PCA9535_OUTPUT_PORT_0_REG 0X02
#define PCA9535_OUTPUT_PORT_1_REG 0X03
#define PCA9535_INVERSION_PORT_0_REG 0X04
#define PCA9535_INVERSION_PORT_1_REG 0X05
#define PCA9535_CONFIG_PORT_0_REG 0X06
#define PCA9535_CONFIG_PORT_1_REG 0X07
class Arduino_PCA9535SWSPI : public Arduino_DataBus
{
public:
Arduino_PCA9535SWSPI(int8_t sda, int8_t scl, int8_t pwd, int8_t cs, int8_t sck, int8_t mosi, TwoWire *wire = &Wire);
bool begin(int32_t speed = GFX_NOT_DEFINED, int8_t dataMode = GFX_NOT_DEFINED) override;
void beginWrite() override;
void endWrite() override;
void writeCommand(uint8_t) override;
void writeCommand16(uint16_t) override;
void write(uint8_t) override;
void write16(uint16_t) override;
void writeRepeat(uint16_t p, uint32_t len) override;
void writePixels(uint16_t *data, uint32_t len) override;
#if !defined(LITTLE_FOOT_PRINT)
void writeBytes(uint8_t *data, uint32_t len) override;
#endif // !defined(LITTLE_FOOT_PRINT)
void pinMode(uint8_t pin, uint8_t mode);
void pinMode8(uint8_t port, uint8_t pin, uint8_t mode);
void digitalWrite(uint8_t pin, uint8_t val);
int digitalRead(uint8_t pin);
protected:
void writeRegister(uint8_t reg, uint8_t *data, size_t len);
uint8_t readRegister(uint8_t reg, uint8_t *data, size_t len);
uint8_t _address;
bool is_found;
int8_t _sda, _scl, _pwd, _cs, _sck, _mosi;
TwoWire *_wire;
private:
};
#endif // _Arduino_PCA9535SWSPI_H_

View File

@ -14,6 +14,10 @@
#define TOUCH_IRQ -1 #define TOUCH_IRQ -1
#endif #endif
#ifndef TOUCH_RST
#define TOUCH_RST -1
#endif
#ifndef TFT_DMA_CHANNEL #ifndef TFT_DMA_CHANNEL
#define TFT_DMA_CHANNEL 0 #define TFT_DMA_CHANNEL 0
#endif #endif

View File

@ -1,4 +1,4 @@
/* MIT License - Copyright (c) 2019-2022 Francis Van Roie /* MIT License - Copyright (c) 2019-2023 Francis Van Roie
For full license information read the LICENSE file in the project folder */ For full license information read the LICENSE file in the project folder */
#if defined(ARDUINO) && defined(HASP_USE_ARDUINOGFX) #if defined(ARDUINO) && defined(HASP_USE_ARDUINOGFX)
@ -7,6 +7,7 @@
#include "Arduino_RGBPanel_mod.h" #include "Arduino_RGBPanel_mod.h"
#include "Arduino_RGB_Display_mod.h" #include "Arduino_RGB_Display_mod.h"
#include "Arduino_PCA9535SWSPI/Arduino_PCA9535SWSPI.h"
namespace dev { namespace dev {
@ -37,6 +38,21 @@ void ArduinoGfx::init(int w, int h)
tft = new Arduino_RGB_Display(w, h, rgbpanel, 0 /* rotation */, TFT_AUTO_FLUSH, bus, TFT_RST, tft = new Arduino_RGB_Display(w, h, rgbpanel, 0 /* rotation */, TFT_AUTO_FLUSH, bus, TFT_RST,
st7701_type4_init_operations, sizeof(st7701_type4_init_operations)); st7701_type4_init_operations, sizeof(st7701_type4_init_operations));
#elif(TFT_WIDTH == 480) && (TFT_HEIGHT == 480) && defined(SENSECAP_INDICATOR_D1)
Wire.begin(TOUCH_SDA, TOUCH_SCL, I2C_TOUCH_FREQUENCY);
pinMode(TFT_SCLK, OUTPUT);
pinMode(TFT_MOSI, OUTPUT);
pinMode(TFT_MISO, OUTPUT);
Arduino_DataBus* bus = new Arduino_PCA9535SWSPI(TOUCH_SDA, TOUCH_SCL, 5 /* XL PWD */, 4 /* XL CS */,
TFT_SCLK /* XL SCK */, TFT_MOSI /* XL MOSI */, &Wire);
Arduino_ESP32RGBPanel* rgbpanel = new Arduino_ESP32RGBPanel(
TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK, TFT_R0, TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_G0, TFT_G1, TFT_G2, TFT_G3,
TFT_G4, TFT_G5, TFT_B0, TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_HSYNC_POLARITY, TFT_HSYNC_FRONT_PORCH,
TFT_HSYNC_PULSE_WIDTH, TFT_HSYNC_BACK_PORCH, TFT_VSYNC_POLARITY, TFT_VSYNC_FRONT_PORCH, TFT_VSYNC_PULSE_WIDTH,
TFT_VSYNC_BACK_PORCH);
tft = new Arduino_RGB_Display(w, h, rgbpanel, 0 /* rotation */, TFT_AUTO_FLUSH, bus, TFT_RST,
st7701_sensecap_indicator_init_operations, sizeof(st7701_sensecap_indicator_init_operations));
#elif(TFT_WIDTH == 480) && (TFT_HEIGHT == 480) && defined(GC9503V_DRIVER) #elif(TFT_WIDTH == 480) && (TFT_HEIGHT == 480) && defined(GC9503V_DRIVER)
Arduino_DataBus* bus = new Arduino_SWSPI(TFT_DC, TFT_CS, TFT_SCLK, TFT_MOSI, TFT_MISO); Arduino_DataBus* bus = new Arduino_SWSPI(TFT_DC, TFT_CS, TFT_SCLK, TFT_MOSI, TFT_MISO);
Arduino_ESP32RGBPanel* rgbpanel = new Arduino_ESP32RGBPanel( Arduino_ESP32RGBPanel* rgbpanel = new Arduino_ESP32RGBPanel(

View File

@ -67,6 +67,21 @@ class TouchFt6336u : public BaseTouch {
data->state = LV_INDEV_STATE_PR; data->state = LV_INDEV_STATE_PR;
hasp_set_sleep_offset(0); // Reset the offset hasp_set_sleep_offset(0); // Reset the offset
#if defined(TOUCH_SWAP_XY) && (TOUCH_SWAP_XY)
data->point.x = ft6336u_touch->read_touch1_y();
data->point.y = ft6336u_touch->read_touch1_x();
#else
data->point.x = ft6336u_touch->read_touch1_x();
data->point.y = ft6336u_touch->read_touch1_y();
#endif
#if defined(TOUCH_INVERSE_X) && (TOUCH_INVERSE_X)
data->point.x = _width_max - data->point.x;
#endif
#if defined(TOUCH_INVERSE_Y) && (TOUCH_INVERSE_Y)
data->point.y = _height_max - data->point.y;
#endif
} else { } else {
data->state = LV_INDEV_STATE_REL; data->state = LV_INDEV_STATE_REL;
} }
@ -77,6 +92,9 @@ class TouchFt6336u : public BaseTouch {
void init(int w, int h) void init(int w, int h)
{ {
_height_max = h - 1;
_width_max = w - 1;
LOG_INFO(TAG_DRVR, F("Touch SDA : %d"), TOUCH_SDA); LOG_INFO(TAG_DRVR, F("Touch SDA : %d"), TOUCH_SDA);
LOG_INFO(TAG_DRVR, F("Touch SCL : %d"), TOUCH_SCL); LOG_INFO(TAG_DRVR, F("Touch SCL : %d"), TOUCH_SCL);
LOG_INFO(TAG_DRVR, F("Touch freq. : %d"), I2C_TOUCH_FREQUENCY); LOG_INFO(TAG_DRVR, F("Touch freq. : %d"), I2C_TOUCH_FREQUENCY);
@ -110,6 +128,10 @@ class TouchFt6336u : public BaseTouch {
LOG_ERROR(TAG_DRVR, F("FT6336U touch driver failed to start")); LOG_ERROR(TAG_DRVR, F("FT6336U touch driver failed to start"));
} }
} }
private:
uint16_t _width_max;
uint16_t _height_max;
}; };
} // namespace dev } // namespace dev

View File

@ -0,0 +1,92 @@
;***************************************************;
; SenseCAP Indicator D1, 4-Inch Touch Screen ;
; - Custom esp32-s3 board ;
; - st7701s TFT ;
; - ft6336u touch controller ;
;***************************************************;
[sensecap-indicator-d1]
extends = arduino_esp32s3_v2
board = esp32-s3-devkitc-1
board_build.arduino.memory_type = qio_opi
build_flags =
-D HASP_MODEL="SenseCAP Indicator D1"
${arduino_esp32s3_v2.build_flags}
${esp32s3.ps_ram}
-DSENSECAP_INDICATOR_D1
;-DARDUINO_USB_CDC_ON_BOOT
;-DUSE_USB_CDC_CONSOLE
;region -- ArduinoGFX build options ------------------------
-D HASP_USE_ARDUINOGFX=1
-D HASP_LV_USE_SW_ROTATE=1
-D ST7701_DRIVER=1
-D TFT_WIDTH=480
-D TFT_HEIGHT=480
; Bus Settings
-D TFT_HSYNC=16
-D TFT_VSYNC=17
-D TFT_DE=18
-D TFT_PCLK=21
-D TFT_R0=4
-D TFT_R1=3
-D TFT_R2=2
-D TFT_R3=1
-D TFT_R4=0
-D TFT_G0=10
-D TFT_G1=9
-D TFT_G2=8
-D TFT_G3=7
-D TFT_G4=6
-D TFT_G5=5
-D TFT_B0=15
-D TFT_B1=14
-D TFT_B2=13
-D TFT_B3=12
-D TFT_B4=11
-D TFT_DC=-1
-D TFT_CS=-1
-D TFT_SCLK=41
-D TFT_MOSI=48
-D TFT_MISO=47
-D TFT_RST=-1
-D TFT_BUSY=-1
-D TFT_BCKL=45
; Panel Settings
-D TFT_HSYNC_POLARITY=1
-D TFT_HSYNC_FRONT_PORCH=10
-D TFT_HSYNC_PULSE_WIDTH=8
-D TFT_HSYNC_BACK_PORCH=50
-D TFT_VSYNC_POLARITY=1
-D TFT_VSYNC_FRONT_PORCH=10
-D TFT_VSYNC_PULSE_WIDTH=8
-D TFT_VSYNC_BACK_PORCH=20
-D TFT_PCLK_ACTIVE_NEG=1 ; 0
-D TFT_PREFER_SPEED=18000000
-D TFT_AUTO_FLUSH=1
; Touch Settings
-D TOUCH_DRIVER=0x6336
-D TOUCH_WIDTH=480
-D TOUCH_HEIGHT=480
-D TOUCH_SWAP_XY=0
-D TOUCH_INVERSE_X=1
-D TOUCH_INVERSE_Y=1
-D TOUCH_SDA=39
-D TOUCH_SCL=40
-D TOUCH_RST=-1
-D TOUCH_IRQ=-1
-D I2C_TOUCH_FREQUENCY=400000
-D I2C_TOUCH_ADDRESS=0x48
-D I2C_TOUCH_PORT=1
;endregion
lib_deps =
${arduino_esp32s3_v2.lib_deps}
${arduinogfx.lib_deps}
; ${ft6336.lib_deps}
git+https://github.com/RobTillaart/TCA9555.git
[env:sensecap-indicator-d1_8MB]
extends = sensecap-indicator-d1, flash_8mb