From 2edbd92b3bb9991af67f3652780830c707175bb9 Mon Sep 17 00:00:00 2001 From: James Hall Date: Thu, 13 Mar 2025 14:07:54 -0400 Subject: [PATCH 1/8] Added Support for the LilyGo TBeam v1.2 SX1276 --- .vscode/settings.json | 3 + examples/companion_radio/main.cpp | 7 ++ platformio.ini | 38 +++++++++++ src/helpers/TBeamBoard.h | 104 ++++++++++++++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 src/helpers/TBeamBoard.h diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..06b08423 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.dimInactiveRegions": false +} \ No newline at end of file diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index f3374ecb..ebde045e 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -96,6 +96,10 @@ #include #include static TechoBoard board; +#elif defined(LILYGO_TBEAM) + #include + #include + static TBeamBoard board; #else #error "need to provide a 'board' object" #endif @@ -1319,6 +1323,9 @@ RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BU #elif defined(LILYGO_TLORA) SPIClass spi; RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1, spi); +#elif defined(LILYGO_TBEAM) +SPIClass spi; +RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_0, P_LORA_RESET, P_LORA_DIO_1, spi); #elif defined(P_LORA_SCLK) SPIClass spi; RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); diff --git a/platformio.ini b/platformio.ini index 47aca405..af7cef4c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -654,6 +654,44 @@ build_flags = ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 +[LilyGo_TBeam] +extends = esp32_base +board = ttgo-t-beam +build_flags = + ${esp32_base.build_flags} + -D LILYGO_TBEAM + -D RADIO_CLASS=CustomSX1276 + -D WRAPPER_CLASS=CustomSX1276Wrapper + -D LORA_TX_POWER=20 + -D P_LORA_TX_LED=4 +build_src_filter = ${esp32_base.build_src_filter} +board_build.partitions = min_spiffs.csv ; get around 4mb flash limit + +[env:Tbeam_companion_radio_ble] +extends = LilyGo_TBeam +board_build.upload.maximum_ram_size=2000000 +build_flags = + ${LilyGo_TBeam.build_flags} + -D MAX_CONTACTS=100 + -D MAX_GROUP_CHANNELS=1 + -D BLE_PIN_CODE=123456 + -D BLE_DEBUG_LOGGING=1 + -D MESH_PACKET_LOGGING=1 + -D MESH_DEBUG=1 + -D RADIOLIB_DEBUG_BASIC=1 +; -D ENABLE_PRIVATE_KEY_IMPORT=1 +; -D ENABLE_PRIVATE_KEY_EXPORT=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${LilyGo_TBeam.build_src_filter} + + + +<../examples/companion_radio/main.cpp> +lib_deps = + ${LilyGo_TBeam.lib_deps} + densaugeo/base64 @ ~1.4.0 + lewisxhe/XPowersLib@^0.2.7 + + ; ----------------- NRF52 --------------------- [nrf52_base] extends = arduino_base diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h new file mode 100644 index 00000000..60e5f4fa --- /dev/null +++ b/src/helpers/TBeamBoard.h @@ -0,0 +1,104 @@ +#pragma once + +// Defined using AXP2102 +#define XPOWERS_CHIP_AXP2101 + +#include +#include +#include "XPowersLib.h" + +#ifndef CONFIG_PMU_SDA +#define CONFIG_PMU_SDA 21 +#endif + +#ifndef CONFIG_PMU_SCL +#define CONFIG_PMU_SCL 22 +#endif + +#ifndef CONFIG_PMU_IRQ +#define CONFIG_PMU_IRQ 35 +#endif + +bool pmu_flag = 0; +XPowersPMU power; + +const uint8_t i2c_sda = CONFIG_PMU_SDA; +const uint8_t i2c_scl = CONFIG_PMU_SCL; +const uint8_t pmu_irq_pin = CONFIG_PMU_IRQ; + +void setFlag(void) +{ + pmu_flag = true; +} + + + +// LoRa radio module pins for TBeam +#define P_LORA_DIO_0 26 +#define P_LORA_DIO_2 32 +#define P_LORA_DIO_1 33 +#define P_LORA_NSS 18 +#define P_LORA_RESET 14 +#define P_LORA_BUSY RADIOLIB_NC +#define P_LORA_SCLK 5 +#define P_LORA_MISO 19 +#define P_LORA_MOSI 27 + +// built-ins +//#define PIN_VBAT_READ 37 +//#define PIN_LED_BUILTIN 25 + +#include "ESP32Board.h" + +#include + +class TBeamBoard : public ESP32Board { +public: + void begin() { + ESP32Board::begin(); + power.setALDO2Voltage(3300); + power.enableALDO2(); + + esp_reset_reason_t reason = esp_reset_reason(); + if (reason == ESP_RST_DEEPSLEEP) { + long wakeup_source = esp_sleep_get_ext1_wakeup_status(); + if (wakeup_source & (1 << P_LORA_DIO_1)) { // received a LoRa packet (while in deep sleep) + startup_reason = BD_STARTUP_RX_PACKET; + } + + rtc_gpio_hold_dis((gpio_num_t)P_LORA_NSS); + rtc_gpio_deinit((gpio_num_t)P_LORA_DIO_1); + } + } + + void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1) { + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + + // Make sure the DIO1 and NSS GPIOs are hold on required levels during deep sleep + rtc_gpio_set_direction((gpio_num_t)P_LORA_DIO_1, RTC_GPIO_MODE_INPUT_ONLY); + rtc_gpio_pulldown_en((gpio_num_t)P_LORA_DIO_1); + + rtc_gpio_hold_en((gpio_num_t)P_LORA_NSS); + + if (pin_wake_btn < 0) { + esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet + } else { + esp_sleep_enable_ext1_wakeup( (1L << P_LORA_DIO_1) | (1L << pin_wake_btn), ESP_EXT1_WAKEUP_ANY_HIGH); // wake up on: recv LoRa packet OR wake btn + } + + if (secs > 0) { + esp_sleep_enable_timer_wakeup(secs * 1000000); + } + + // Finally set ESP32 into sleep + esp_deep_sleep_start(); // CPU halts here and never returns! + } + + uint16_t getBattMilliVolts() override { + return 0; + } + + const char* getManufacturerName() const override { + return "LilyGo T-Beam"; + } +}; From aca3486f88f3e35ac4e4a359fca738b27ffcdc3f Mon Sep 17 00:00:00 2001 From: James Hall Date: Thu, 13 Mar 2025 20:35:44 -0400 Subject: [PATCH 2/8] Update settings.json --- .vscode/settings.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 06b08423..8b137891 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1 @@ -{ - "C_Cpp.dimInactiveRegions": false -} \ No newline at end of file + From 6d8aa5817b0782b92b22ab4d249904ceae335561 Mon Sep 17 00:00:00 2001 From: James Hall Date: Thu, 13 Mar 2025 20:41:32 -0400 Subject: [PATCH 3/8] removed pmu flag --- src/helpers/TBeamBoard.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h index 60e5f4fa..9587e96c 100644 --- a/src/helpers/TBeamBoard.h +++ b/src/helpers/TBeamBoard.h @@ -19,19 +19,13 @@ #define CONFIG_PMU_IRQ 35 #endif -bool pmu_flag = 0; + XPowersPMU power; const uint8_t i2c_sda = CONFIG_PMU_SDA; const uint8_t i2c_scl = CONFIG_PMU_SCL; const uint8_t pmu_irq_pin = CONFIG_PMU_IRQ; -void setFlag(void) -{ - pmu_flag = true; -} - - // LoRa radio module pins for TBeam #define P_LORA_DIO_0 26 From b41d1a56f606f424b67e6a3948fb965eef19dc5d Mon Sep 17 00:00:00 2001 From: James Hall Date: Thu, 13 Mar 2025 20:42:36 -0400 Subject: [PATCH 4/8] Delete .vscode/settings.json --- .vscode/settings.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 8b137891..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1 +0,0 @@ - From aca0bcc91970f85c3030dcad766f4d4c15886850 Mon Sep 17 00:00:00 2001 From: James Hall Date: Fri, 14 Mar 2025 14:22:13 -0400 Subject: [PATCH 5/8] removed unnecessary constants --- src/helpers/TBeamBoard.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h index 9587e96c..5c8bc224 100644 --- a/src/helpers/TBeamBoard.h +++ b/src/helpers/TBeamBoard.h @@ -22,11 +22,6 @@ XPowersPMU power; -const uint8_t i2c_sda = CONFIG_PMU_SDA; -const uint8_t i2c_scl = CONFIG_PMU_SCL; -const uint8_t pmu_irq_pin = CONFIG_PMU_IRQ; - - // LoRa radio module pins for TBeam #define P_LORA_DIO_0 26 #define P_LORA_DIO_2 32 From c2f92534df4ffc196c5772af6d7243da90593abc Mon Sep 17 00:00:00 2001 From: James Hall Date: Fri, 14 Mar 2025 14:27:10 -0400 Subject: [PATCH 6/8] removed unnecessary defines --- src/helpers/TBeamBoard.h | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h index 5c8bc224..9c9f5820 100644 --- a/src/helpers/TBeamBoard.h +++ b/src/helpers/TBeamBoard.h @@ -7,19 +7,6 @@ #include #include "XPowersLib.h" -#ifndef CONFIG_PMU_SDA -#define CONFIG_PMU_SDA 21 -#endif - -#ifndef CONFIG_PMU_SCL -#define CONFIG_PMU_SCL 22 -#endif - -#ifndef CONFIG_PMU_IRQ -#define CONFIG_PMU_IRQ 35 -#endif - - XPowersPMU power; // LoRa radio module pins for TBeam @@ -45,6 +32,7 @@ class TBeamBoard : public ESP32Board { public: void begin() { ESP32Board::begin(); + power.setALDO2Voltage(3300); power.enableALDO2(); From bc6e4930d9a9df9157149afe06f16ead59f001d0 Mon Sep 17 00:00:00 2001 From: James Hall Date: Fri, 14 Mar 2025 19:54:46 -0400 Subject: [PATCH 7/8] Cleaned up code --- src/helpers/TBeamBoard.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h index 9c9f5820..0114dbdc 100644 --- a/src/helpers/TBeamBoard.h +++ b/src/helpers/TBeamBoard.h @@ -1,12 +1,12 @@ #pragma once -// Defined using AXP2102 -#define XPOWERS_CHIP_AXP2101 #include #include #include "XPowersLib.h" +// Defined using AXP2102 +#define XPOWERS_CHIP_AXP2101 XPowersPMU power; // LoRa radio module pins for TBeam From aeda21840204f80c12e722f7e4c6dcc599a3c8de Mon Sep 17 00:00:00 2001 From: James Hall Date: Sat, 15 Mar 2025 13:09:15 -0400 Subject: [PATCH 8/8] Update TBeamBoard.h --- src/helpers/TBeamBoard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/TBeamBoard.h b/src/helpers/TBeamBoard.h index 0114dbdc..a6cff678 100644 --- a/src/helpers/TBeamBoard.h +++ b/src/helpers/TBeamBoard.h @@ -7,7 +7,7 @@ // Defined using AXP2102 #define XPOWERS_CHIP_AXP2101 -XPowersPMU power; +XPowersAXP2101 power; // LoRa radio module pins for TBeam #define P_LORA_DIO_0 26