diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 125eb21..e469186 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,6 +57,8 @@ jobs: chip: esp32s3 - name: ttgo_t_deck_GPS chip: esp32s3 + - name: ttgo_t_beam_s3_SUPREME_v3 + chip: esp32s3 - name: ESP32_DIY_LoRa_A7670 chip: esp32 - name: ESP32_DIY_LoRa_A7670_915 diff --git a/src/display.cpp b/src/display.cpp index d8ba7ac..9195f7e 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -30,11 +30,16 @@ String lastEpaperText; #else #include - #include - #ifdef HELTEC_WSL_V3_DISPLAY - Adafruit_SSD1306 display(128, 64, &Wire1, OLED_RST); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + #include + Adafruit_SH1106G display(128, 64, &Wire, OLED_RST); #else - Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST); + #include + #ifdef HELTEC_WSL_V3_DISPLAY + Adafruit_SSD1306 display(128, 64, &Wire1, OLED_RST); + #else + Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST); + #endif #endif #endif #endif @@ -77,17 +82,30 @@ void displaySetup() { digitalWrite(OLED_RST, HIGH); #endif - if(display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { - displayFound = true; - if (Config.display.turn180) display.setRotation(2); - display.clearDisplay(); - display.setTextColor(WHITE); - display.setTextSize(1); - display.setCursor(0, 0); - display.ssd1306_command(SSD1306_SETCONTRAST); - display.ssd1306_command(1); - display.display(); - } + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + if (!display.begin(0x3c, false)) { + displayFound = true; + if (Config.display.turn180) display.setRotation(2); + display.clearDisplay(); + display.setTextColor(SH110X_WHITE); + display.setTextSize(1); + display.setCursor(0, 0); + display.setContrast(1); + display.display(); + } + #else + if(display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { + displayFound = true; + if (Config.display.turn180) display.setRotation(2); + display.clearDisplay(); + display.setTextColor(WHITE); + display.setTextSize(1); + display.setCursor(0, 0); + display.ssd1306_command(SSD1306_SETCONTRAST); + display.ssd1306_command(1); + display.display(); + } + #endif #endif #endif delay(1000); @@ -104,7 +122,11 @@ void displayToggle(bool toggle) { display.printCenter("EPAPER Display Disabled by toggle..."); display.update(); #else - if (displayFound) display.ssd1306_command(SSD1306_DISPLAYON); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + if (displayFound) display.oled_command(SH110X_DISPLAYON); + #else + if (displayFound) display.ssd1306_command(SSD1306_DISPLAYON); + #endif #endif #endif } else { @@ -115,7 +137,12 @@ void displayToggle(bool toggle) { display.printCenter("Enabled EPAPER Display..."); display.update(); #else - if (displayFound) display.ssd1306_command(SSD1306_DISPLAYOFF); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + if (displayFound) display.oled_command(SH110X_DISPLAYOFF); + #else + if (displayFound) display.ssd1306_command(SSD1306_DISPLAYOFF); + #endif + #endif #endif } @@ -161,7 +188,11 @@ void displayShow(const String& header, const String& line1, const String& line2, #else if (displayFound) { display.clearDisplay(); - display.setTextColor(WHITE); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + display.setTextColor(SH110X_WHITE); + #else + display.setTextColor(WHITE); + #endif display.setTextSize(1); display.setCursor(0, 0); display.println(header); @@ -169,8 +200,12 @@ void displayShow(const String& header, const String& line1, const String& line2, display.setCursor(0, 8 + (8 * i)); display.println(*lines[i]); } - display.ssd1306_command(SSD1306_SETCONTRAST); - display.ssd1306_command(1); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + display.setContrast(1); + #else + display.ssd1306_command(SSD1306_SETCONTRAST); + display.ssd1306_command(1); + #endif display.display(); } #endif @@ -219,17 +254,24 @@ void displayShow(const String& header, const String& line1, const String& line2, #else if (displayFound) { display.clearDisplay(); - display.setTextColor(WHITE); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + display.setTextColor(SH110X_WHITE); + #else + display.setTextColor(WHITE); + #endif display.setTextSize(2); display.setCursor(0, 0); display.println(header); - display.setTextSize(1); for (int i = 0; i < 6; i++) { display.setCursor(0, 16 + (8 * i)); display.println(*lines[i]); } - display.ssd1306_command(SSD1306_SETCONTRAST); - display.ssd1306_command(1); + #if defined(TTGO_T_Beam_S3_SUPREME_V3) + display.setContrast(1); + #else + display.ssd1306_command(SSD1306_SETCONTRAST); + display.ssd1306_command(1); + #endif display.display(); } #endif diff --git a/src/power_utils.cpp b/src/power_utils.cpp index 8f3ef23..2884eca 100644 --- a/src/power_utils.cpp +++ b/src/power_utils.cpp @@ -4,9 +4,17 @@ #include "power_utils.h" #if defined(HAS_AXP192) || defined(HAS_AXP2101) - #define I2C_SDA 21 - #define I2C_SCL 22 - #define IRQ_PIN 35 + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + #define I2C0_SDA 17 + #define I2C0_SCL 18 + #define I2C1_SDA 42 + #define I2C1_SCL 41 + #define IRQ_PIN 40 + #else + #define I2C_SDA 21 + #define I2C_SCL 22 + #define IRQ_PIN 35 + #endif #endif #ifdef HAS_AXP192 @@ -54,8 +62,13 @@ namespace POWER_Utils { #endif #ifdef HAS_AXP2101 + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + PMU.setALDO4Voltage(3300); + PMU.enableALDO4(); + #else PMU.setALDO3Voltage(3300); PMU.enableALDO3(); + #endif #endif #ifdef HELTEC_WIRELESS_TRACKER digitalWrite(VEXT_CTRL, HIGH); @@ -69,7 +82,11 @@ namespace POWER_Utils { #endif #ifdef HAS_AXP2101 - PMU.disableALDO3(); + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + PMU.disableALDO4(); + #else + PMU.disableALDO3(); + #endif #endif #ifdef HELTEC_WIRELESS_TRACKER digitalWrite(VEXT_CTRL, LOW); @@ -83,8 +100,13 @@ namespace POWER_Utils { PMU.enableLDO2(); #endif #ifdef HAS_AXP2101 - PMU.setALDO2Voltage(3300); - PMU.enableALDO2(); + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + PMU.setALDO3Voltage(3300); + PMU.enableALDO3(); + #else + PMU.setALDO2Voltage(3300); + PMU.enableALDO2(); + #endif #endif } @@ -93,7 +115,11 @@ namespace POWER_Utils { PMU.disableLDO2(); #endif #ifdef HAS_AXP2101 - PMU.disableALDO2(); + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + PMU.disableALDO3(); + #else + PMU.disableALDO2(); + #endif #endif } @@ -111,20 +137,29 @@ namespace POWER_Utils { } return result; #elif defined(HAS_AXP2101) - bool result = PMU.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL); + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + bool result = PMU.begin(Wire1, AXP2101_SLAVE_ADDRESS, I2C1_SDA, I2C1_SCL); + #else + bool result = PMU.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL); + #endif if (result) { PMU.disableDC2(); PMU.disableDC3(); PMU.disableDC4(); PMU.disableDC5(); - PMU.disableALDO1(); - PMU.disableALDO4(); + #ifndef TTGO_T_Beam_S3_SUPREME_V3 + PMU.disableALDO1(); + PMU.disableALDO4(); + #endif PMU.disableBLDO1(); PMU.disableBLDO2(); PMU.disableDLDO1(); PMU.disableDLDO2(); PMU.setDC1Voltage(3300); PMU.enableDC1(); + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + PMU.setALDO1Voltage(3300); + #endif PMU.setButtonBatteryChargeVoltage(3300); PMU.enableButtonBatteryCharge(); PMU.disableIRQ(XPOWERS_AXP2101_ALL_IRQ); @@ -152,8 +187,16 @@ namespace POWER_Utils { #endif #ifdef HAS_AXP2101 - Wire.begin(SDA, SCL); - if (begin(Wire)) { + bool beginStatus = false; + #ifdef TTGO_T_Beam_S3_SUPREME_V3 + Wire1.begin(I2C1_SDA, I2C1_SCL); + Wire.begin(I2C0_SDA, I2C0_SCL); + if (begin(Wire1)) beginStatus = true; + #else + Wire.begin(SDA, SCL); + if (begin(Wire)) beginStatus = true; + #endif + if (beginStatus) { Serial.println("AXP2101 init done!"); } else { Serial.println("AXP2101 init failed!"); diff --git a/variants/ttgo_t_beam_s3_SUPREME_v3/board_pinout.h b/variants/ttgo_t_beam_s3_SUPREME_v3/board_pinout.h new file mode 100644 index 0000000..bf0f05d --- /dev/null +++ b/variants/ttgo_t_beam_s3_SUPREME_v3/board_pinout.h @@ -0,0 +1,37 @@ +#ifndef BOARD_PINOUT_H_ +#define BOARD_PINOUT_H_ + + // LoRa Radio + #define HAS_SX1262 + #define RADIO_SCLK_PIN 12 + #define RADIO_MISO_PIN 13 + #define RADIO_MOSI_PIN 11 + #define RADIO_CS_PIN 10 + #define RADIO_DIO0_PIN -1 + #define RADIO_RST_PIN 5 + #define RADIO_DIO1_PIN 1 + #define RADIO_BUSY_PIN 4 + + // Display + #define HAS_DISPLAY + + #undef OLED_SDA + #undef OLED_SCL + #undef OLED_RST + + #define OLED_SDA 17 + #define OLED_SCL 18 + #define OLED_RST 16 + #define OLED_DISPLAY_HAS_RST_PIN + + // Aditional Config + #define HAS_AXP2101 + + // GPS + #define HAS_GPS + #define GPS_RX 8 + #define GPS_TX 9 + + #define BOARD_HAS_PSRAM + +#endif \ No newline at end of file diff --git a/variants/ttgo_t_beam_s3_SUPREME_v3/platformio.ini b/variants/ttgo_t_beam_s3_SUPREME_v3/platformio.ini new file mode 100644 index 0000000..80cc521 --- /dev/null +++ b/variants/ttgo_t_beam_s3_SUPREME_v3/platformio.ini @@ -0,0 +1,12 @@ +[env:ttgo_t_beam_s3_SUPREME_v3] +board = esp32-s3-devkitc-1 +board_build.mcu = esp32s3 +build_flags = + ${common.build_flags} + ${common.usb_flags} + -D TTGO_T_Beam_S3_SUPREME_V3 +lib_deps = + ${common.lib_deps} + ${common.display_libs} + lewisxhe/XPowersLib @ 0.2.4 + adafruit/Adafruit SH110X @ 2.1.10 \ No newline at end of file