diff --git a/src/graphics/EInkDisplay2.cpp b/src/graphics/EInkDisplay2.cpp index 66c7938b5..1685766c9 100644 --- a/src/graphics/EInkDisplay2.cpp +++ b/src/graphics/EInkDisplay2.cpp @@ -33,6 +33,7 @@ */ // Constructor + EInkDisplay::EInkDisplay(uint8_t address, int sda, int scl, OLEDDISPLAY_GEOMETRY geometry, HW_I2C i2cBus) { // Set dimensions in OLEDDisplay base class @@ -206,6 +207,12 @@ bool EInkDisplay::connect() adafruitDisplay->setRotation(0); adafruitDisplay->setPartialWindow(0, 0, EINK_WIDTH, EINK_HEIGHT); } +#elif defined(LORA_TYPE) + auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); + adafruitDisplay = new GxEPD2_BW(*lowLevel); + adafruitDisplay->init(115200, true, 40, false, SPI, SPISettings(4000000, MSBFIRST, SPI_MODE0)); + adafruitDisplay->setRotation(3); + adafruitDisplay->setPartialWindow(0, 0, EPD_WIDTH, EPD_HEIGHT); #elif defined(M5_COREINK) auto lowLevel = new EINK_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY); adafruitDisplay = new GxEPD2_BW(*lowLevel); diff --git a/src/main.cpp b/src/main.cpp index c37001307..60e77f825 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -800,14 +800,18 @@ void setup() #elif !defined(ARCH_ESP32) // ARCH_RP2040 SPI.begin(); #else - // ESP32 -#if defined(HW_SPI1_DEVICE) + // ESP32 +#ifdef LORA_TYPE + SPI.begin(PIN_EINK_SCLK, 15, PIN_EINK_MOSI, PIN_EINK_CS); + LOG_WARN("SPI.begin(SCK=%d, MISO=15, MOSI=%d, NSS=%d)\n", PIN_EINK_SCLK, PIN_EINK_MOSI, PIN_EINK_CS); +#elif defined(HW_SPI1_DEVICE) SPI1.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); LOG_DEBUG("SPI1.begin(SCK=%d, MISO=%d, MOSI=%d, NSS=%d)", LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); SPI1.setFrequency(4000000); #else SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); LOG_DEBUG("SPI.begin(SCK=%d, MISO=%d, MOSI=%d, NSS=%d)", LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); +#endif SPI.setFrequency(4000000); #endif #endif @@ -1145,6 +1149,10 @@ void setup() } #elif defined(HW_SPI1_DEVICE) LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI1, spiSettings); +#elif LORA_TYPE + SPIClass radioSPI(VSPI); + radioSPI.begin(RF95_SCK, RF95_MISO, RF95_MOSI, RF95_NSS); + LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(radioSPI, spiSettings); #else // HW_SPI1_DEVICE LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings); #endif diff --git a/src/platform/esp32/architecture.h b/src/platform/esp32/architecture.h index baefbc4eb..077b999c4 100644 --- a/src/platform/esp32/architecture.h +++ b/src/platform/esp32/architecture.h @@ -152,6 +152,8 @@ #define HW_VENDOR meshtastic_HardwareModel_SENSELORA_S3 #elif defined(HELTEC_HT62) #define HW_VENDOR meshtastic_HardwareModel_HELTEC_HT62 +#elif defined(LORA_TYPE) +#define HW_VENDOR meshtastic_HardwareModel_LORA_TYPE #elif defined(CHATTER_2) #define HW_VENDOR meshtastic_HardwareModel_CHATTER_2 #elif defined(STATION_G2) diff --git a/variants/lora_type/platformio.ini b/variants/lora_type/platformio.ini new file mode 100644 index 000000000..49ada3bef --- /dev/null +++ b/variants/lora_type/platformio.ini @@ -0,0 +1,16 @@ +[env:lora_type] +extends = esp32_base +board = esp32doit-devkit-v1 +board_level = extra +build_flags = + ${esp32_base.build_flags} + -DLORA_TYPE + -DEBYTE_E22 + -Ivariants/lora_type + -DEPD_HEIGHT=200 + -DEPD_WIDTH=200 + -DEINK_DISPLAY_MODEL=GxEPD2_154_GDEY0154D67 + -DM5_COREINK +lib_deps = + ${esp32_base.lib_deps} + zinggjm/GxEPD2@^1.4.9 diff --git a/variants/lora_type/variant.h b/variants/lora_type/variant.h new file mode 100644 index 000000000..c47f7e1b1 --- /dev/null +++ b/variants/lora_type/variant.h @@ -0,0 +1,37 @@ +#define BUTTON_PIN 39 // The middle button GPIO on the T-Beam +#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage +#define ADC_CHANNEL ADC1_GPIO35_CHANNEL +#define ADC_MULTIPLIER 2.0 // (R1 = 27k, R2 = 100k) +#define LED_PIN 33 // add status LED (compatible with core-pcb and DIY targets) + +#define LORA_DIO0 RADIOLIB_NC // a No connect on the SX1262/SX1268 module +#define LORA_RESET 16 // RST for SX1276, and for SX1262/SX1268 +#define LORA_DIO1 4 // IRQ for SX1262/SX1268 +#define LORA_DIO2 26 // BUSY for SX1262/SX1268 +#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262/SX1268, if DIO3 is high the TXCO is enabled + +#define RF95_SCK 18 +#define RF95_MISO 19 +#define RF95_MOSI 23 +#define RF95_NSS 5 + +#define USE_SX1262 + +#define SX126X_CS 5 // NSS for SX126X +#define SX126X_DIO1 LORA_DIO1 +#define SX126X_BUSY LORA_DIO2 +#define SX126X_RESET LORA_RESET +#define SX126X_RXEN 25 +#define SX126X_TXEN RADIOLIB_NC +#define SX126X_DIO2_AS_RF_SWITCH + +#define SX126X_DIO3_TCXO_VOLTAGE 1.8 + +#define USE_EINK +#define PIN_EINK_EN -1 // N/C +#define PIN_EINK_CS 15 // EPD_CS +#define PIN_EINK_BUSY 27 // EPD_BUSY +#define PIN_EINK_DC 12 // EPD_D/C +#define PIN_EINK_RES 32 // Connected but not needed +#define PIN_EINK_SCLK 14 // EPD_SCLK +#define PIN_EINK_MOSI 13 // GxEPD2_EPDEPD_MOSI