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"; + } +};